package store import ( "fmt" ) // GetSettings returns the global settings (single-row pattern, always row id=1). func (s *Store) GetSettings() (Settings, error) { var st Settings var wildcardDNS, npmRemote, backupEnabled int err := s.db.QueryRow( `SELECT domain, server_ip, network, subdomain_pattern, notification_url, npm_url, npm_email, npm_password, webhook_secret, polling_interval, base_volume_path, ssl_certificate_id, stale_threshold_days, allowed_volume_paths, wildcard_dns, dns_provider, cloudflare_api_token, cloudflare_zone_id, npm_remote, npm_access_list_id, proxy_provider, traefik_entrypoint, traefik_cert_resolver, traefik_network, traefik_api_url, backup_enabled, backup_interval_hours, backup_retention_count, updated_at FROM settings WHERE id = 1`, ).Scan(&st.Domain, &st.ServerIP, &st.Network, &st.SubdomainPattern, &st.NotificationURL, &st.NpmURL, &st.NpmEmail, &st.NpmPassword, &st.WebhookSecret, &st.PollingInterval, &st.BaseVolumePath, &st.SSLCertificateID, &st.StaleThresholdDays, &st.AllowedVolumePaths, &wildcardDNS, &st.DNSProvider, &st.CloudflareAPIToken, &st.CloudflareZoneID, &npmRemote, &st.NpmAccessListID, &st.ProxyProvider, &st.TraefikEntrypoint, &st.TraefikCertResolver, &st.TraefikNetwork, &st.TraefikAPIURL, &backupEnabled, &st.BackupIntervalHours, &st.BackupRetentionCount, &st.UpdatedAt) if err != nil { return Settings{}, fmt.Errorf("query settings: %w", err) } st.WildcardDNS = wildcardDNS != 0 st.NpmRemote = npmRemote != 0 st.BackupEnabled = backupEnabled != 0 return st, nil } // UpdateSettings upserts the global settings row. func (s *Store) UpdateSettings(st Settings) error { st.UpdatedAt = Now() wildcardDNS := 0 if st.WildcardDNS { wildcardDNS = 1 } npmRemote := 0 if st.NpmRemote { npmRemote = 1 } backupEnabled := 0 if st.BackupEnabled { backupEnabled = 1 } _, err := s.db.Exec( `UPDATE settings SET domain=?, server_ip=?, network=?, subdomain_pattern=?, notification_url=?, npm_url=?, npm_email=?, npm_password=?, webhook_secret=?, polling_interval=?, base_volume_path=?, ssl_certificate_id=?, stale_threshold_days=?, allowed_volume_paths=?, wildcard_dns=?, dns_provider=?, cloudflare_api_token=?, cloudflare_zone_id=?, npm_remote=?, npm_access_list_id=?, proxy_provider=?, traefik_entrypoint=?, traefik_cert_resolver=?, traefik_network=?, traefik_api_url=?, backup_enabled=?, backup_interval_hours=?, backup_retention_count=?, updated_at=? WHERE id = 1`, st.Domain, st.ServerIP, st.Network, st.SubdomainPattern, st.NotificationURL, st.NpmURL, st.NpmEmail, st.NpmPassword, st.WebhookSecret, st.PollingInterval, st.BaseVolumePath, st.SSLCertificateID, st.StaleThresholdDays, st.AllowedVolumePaths, wildcardDNS, st.DNSProvider, st.CloudflareAPIToken, st.CloudflareZoneID, npmRemote, st.NpmAccessListID, st.ProxyProvider, st.TraefikEntrypoint, st.TraefikCertResolver, st.TraefikNetwork, st.TraefikAPIURL, backupEnabled, st.BackupIntervalHours, st.BackupRetentionCount, st.UpdatedAt, ) if err != nil { return fmt.Errorf("update settings: %w", err) } return nil }