Connor McCutcheon
/ SkyCode
settings.go
go
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
}
No comments yet.