settings.go
⎇
Raw
1package repository
2
3import (
4 "database/sql"
5 "strconv"
6 "time"
7
8 "vidarchive/internal/models"
9)
10
11type SettingsRepository struct {
12 db *sql.DB
13}
14
15func NewSettingsRepository(db *sql.DB) *SettingsRepository {
16 return &SettingsRepository{db: db}
17}
18
19func (r *SettingsRepository) GetAll() (*models.Settings, error) {
20 settings := &models.Settings{
21 RefreshInterval: 5,
22 AutoRefreshLibrary: false,
23 AutoRefreshDownloads: true,
24 }
25
26 rows, err := r.db.Query(`SELECT key, value FROM settings`)
27 if err != nil {
28 return nil, err
29 }
30 defer rows.Close()
31
32 for rows.Next() {
33 var key, value string
34 if err := rows.Scan(&key, &value); err != nil {
35 return nil, err
36 }
37 switch key {
38 case "refresh_interval":
39 if v, err := strconv.Atoi(value); err == nil {
40 settings.RefreshInterval = v
41 }
42 case "auto_refresh_library":
43 settings.AutoRefreshLibrary = value == "1" || value == "true"
44 case "auto_refresh_downloads":
45 settings.AutoRefreshDownloads = value == "1" || value == "true"
46 case "cookies":
47 settings.Cookies = value
48 case "tool_auto_update":
49 settings.ToolAutoUpdate = value == "1" || value == "true"
50 case "tools_checked_at":
51 if t, err := time.Parse(time.RFC3339, value); err == nil {
52 settings.ToolsCheckedAt = t
53 }
54 case "js_runtime_enabled":
55 settings.JSRuntimeEnabled = value == "1" || value == "true"
56 }
57 }
58 return settings, rows.Err()
59}
60
61func (r *SettingsRepository) Set(key, value string) error {
62 _, err := r.db.Exec(
63 `INSERT INTO settings (key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value`,
64 key, value,
65 )
66 return err
67}
68
69func (r *SettingsRepository) Get(key string) (string, error) {
70 var value string
71 err := r.db.QueryRow(`SELECT value FROM settings WHERE key = ?`, key).Scan(&value)
72 if err == sql.ErrNoRows {
73 return "", nil
74 }
75 return value, err
76}
77