package repository import ( "database/sql" "strconv" "time" "vidarchive/internal/models" ) type SettingsRepository struct { db *sql.DB } func NewSettingsRepository(db *sql.DB) *SettingsRepository { return &SettingsRepository{db: db} } func (r *SettingsRepository) GetAll() (*models.Settings, error) { settings := &models.Settings{ RefreshInterval: 5, AutoRefreshLibrary: false, AutoRefreshDownloads: true, } rows, err := r.db.Query(`SELECT key, value FROM settings`) if err != nil { return nil, err } defer rows.Close() for rows.Next() { var key, value string if err := rows.Scan(&key, &value); err != nil { return nil, err } switch key { case "refresh_interval": if v, err := strconv.Atoi(value); err == nil { settings.RefreshInterval = v } case "auto_refresh_library": settings.AutoRefreshLibrary = value == "1" || value == "true" case "auto_refresh_downloads": settings.AutoRefreshDownloads = value == "1" || value == "true" case "cookies": settings.Cookies = value case "tool_auto_update": settings.ToolAutoUpdate = value == "1" || value == "true" case "tools_checked_at": if t, err := time.Parse(time.RFC3339, value); err == nil { settings.ToolsCheckedAt = t } case "js_runtime_enabled": settings.JSRuntimeEnabled = value == "1" || value == "true" } } return settings, rows.Err() } func (r *SettingsRepository) Set(key, value string) error { _, err := r.db.Exec( `INSERT INTO settings (key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value`, key, value, ) return err } func (r *SettingsRepository) Get(key string) (string, error) { var value string err := r.db.QueryRow(`SELECT value FROM settings WHERE key = ?`, key).Scan(&value) if err == sql.ErrNoRows { return "", nil } return value, err }