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 }
45 }
46 return settings, rows.Err()
47}
48
49func (r *SettingsRepository) Set(key, value string) error {
50 _, err := r.db.Exec(
51 `INSERT INTO settings (key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value`,
52 key, value,
53 )
54 return err
55}
56
57func (r *SettingsRepository) Get(key string) (string, error) {
58 var value string
59 err := r.db.QueryRow(`SELECT value FROM settings WHERE key = ?`, key).Scan(&value)
60 if err == sql.ErrNoRows {
61 return "", nil
62 }
63 return value, err
64}
65