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