package models
import "theskyscape.com/repo/skykit"
// UserSettings stores user preferences for the editor
type UserSettings struct {
skykit.Model
UserID string `json:"user_id"`
Theme string `json:"theme"` // dark, light, dracula, nord, sunset
FontSize int `json:"font_size"` // 10-32
TabSize int `json:"tab_size"` // 2, 4, 8
WordWrap bool `json:"word_wrap"`
Minimap bool `json:"minimap"`
PersistWorkspace bool `json:"persist_workspace"` // If true, sync workspace to DB on every save
}
func (s *UserSettings) GetModel() *skykit.Model {
return &s.Model
}
// Settings is the table manager for user settings
var Settings = skykit.Manage(DB, "settings", new(UserSettings))
func init() {
Settings.UniqueIndex("UserID")
}
// DefaultSettings returns default editor settings
func DefaultSettings() *UserSettings {
return &UserSettings{
Theme: "dark",
FontSize: 14,
TabSize: 4,
WordWrap: true,
Minimap: false,
PersistWorkspace: true,
}
}
// GetSettings retrieves settings for a user, creating defaults if needed
func GetSettings(userID string) *UserSettings {
settings, err := Settings.First("WHERE UserID = ?", userID)
if err != nil || settings == nil {
// Return defaults if not found
defaults := DefaultSettings()
defaults.UserID = userID
return defaults
}
return settings
}
// SaveSettings saves user settings to the database
func SaveSettings(userID string, settings *UserSettings) error {
settings.UserID = userID
// Check if exists
existing, _ := Settings.First("WHERE UserID = ?", userID)
if existing != nil {
// Update existing
settings.ID = existing.ID
settings.CreatedAt = existing.CreatedAt
return Settings.Update(settings)
}
// Insert new
_, err := Settings.Insert(settings)
return err
}