import type { Database } from "bun:sqlite"; /** A repo row as the console edits it (ยง24): every repo the sync found, public or not. */ export type AdminRepo = { name: string; public: number; category: string; homepage: string; /** Shown languages, joined by ", "; '' shows the detected one. */ languages: string; issues_paused: number; last_sync_at: number | null; last_sync_error: string | null; }; export type RepoEdit = Omit; export function allRepos(db: Database): AdminRepo[] { return db.query("SELECT * FROM repos ORDER BY name").all(); } export function findRepo(db: Database, name: string): AdminRepo | null { return db.query("SELECT * FROM repos WHERE name = ?").get(name); } export function updateRepo(db: Database, name: string, edit: RepoEdit): void { db.query( `UPDATE repos SET public = ?, category = ?, homepage = ?, languages = ?, issues_paused = ? WHERE name = ?`, ).run(edit.public, edit.category, edit.homepage, edit.languages, edit.issues_paused, name); } /** Writes site settings in one transaction; an empty value removes the key, so defaults apply. */ export function saveSettings(db: Database, values: Record): void { db.transaction(() => { for (const [key, value] of Object.entries(values)) { if (value === "") db.query("DELETE FROM settings WHERE key = ?").run(key); else db.query("INSERT OR REPLACE INTO settings (key, value) VALUES (?, ?)").run(key, value); } })(); }