68 lines
1.5 KiB
Go
68 lines
1.5 KiB
Go
package models
|
|
|
|
import (
|
|
"database/sql"
|
|
)
|
|
|
|
type UserPreferences struct {
|
|
ID int
|
|
UserID int
|
|
AutoSaveDrafts bool
|
|
}
|
|
|
|
// GetUserPreferences retrieves preferences for a user, creating defaults if none exist
|
|
func GetUserPreferences(db *sql.DB, userID int) (*UserPreferences, error) {
|
|
query := `SELECT id, user_id, auto_save_drafts
|
|
FROM user_preferences WHERE user_id = ?`
|
|
|
|
prefs := &UserPreferences{}
|
|
err := db.QueryRow(query, userID).Scan(
|
|
&prefs.ID,
|
|
&prefs.UserID,
|
|
&prefs.AutoSaveDrafts,
|
|
)
|
|
|
|
if err == sql.ErrNoRows {
|
|
// No preferences exist, create defaults
|
|
return CreateDefaultPreferences(db, userID)
|
|
}
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return prefs, nil
|
|
}
|
|
|
|
// CreateDefaultPreferences creates default preferences for a new user
|
|
func CreateDefaultPreferences(db *sql.DB, userID int) (*UserPreferences, error) {
|
|
query := `INSERT INTO user_preferences (user_id, auto_save_drafts)
|
|
VALUES (?, TRUE)`
|
|
|
|
result, err := db.Exec(query, userID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
id, err := result.LastInsertId()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &UserPreferences{
|
|
ID: int(id),
|
|
UserID: userID,
|
|
AutoSaveDrafts: true,
|
|
}, nil
|
|
}
|
|
|
|
// UpdateUserPreferences updates user preferences
|
|
func UpdateUserPreferences(db *sql.DB, prefs *UserPreferences) error {
|
|
query := `UPDATE user_preferences
|
|
SET auto_save_drafts = ?, updated_at = NOW()
|
|
WHERE user_id = ?`
|
|
|
|
_, err := db.Exec(query, prefs.AutoSaveDrafts, prefs.UserID)
|
|
return err
|
|
}
|