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