1import type { Database } from "bun:sqlite";234export type AdminRepo = {5 name: string;6 public: number;7 category: string;8 homepage: string;9 sort_order: number;10 install1: string;11 install2: string;12 install3: string;13 14 languages: string;15 issues_paused: number;16 last_sync_at: number | null;17 last_sync_error: string | null;18};1920export type RepoEdit = Omit<AdminRepo, "name" | "last_sync_at" | "last_sync_error">;2122export function allRepos(db: Database): AdminRepo[] {23 return db.query<AdminRepo, []>("SELECT * FROM repos ORDER BY sort_order, name").all();24}2526export function findRepo(db: Database, name: string): AdminRepo | null {27 return db.query<AdminRepo, [string]>("SELECT * FROM repos WHERE name = ?").get(name);28}2930export function updateRepo(db: Database, name: string, edit: RepoEdit): void {31 db.query(32 `UPDATE repos SET public = ?, category = ?, homepage = ?, sort_order = ?, install1 = ?,33 install2 = ?, install3 = ?, languages = ?, issues_paused = ?34 WHERE name = ?`,35 ).run(36 edit.public,37 edit.category,38 edit.homepage,39 edit.sort_order,40 edit.install1,41 edit.install2,42 edit.install3,43 edit.languages,44 edit.issues_paused,45 name,46 );47}484950export function saveSettings(db: Database, values: Record<string, string>): void {51 db.transaction(() => {52 for (const [key, value] of Object.entries(values)) {53 if (value === "") db.query("DELETE FROM settings WHERE key = ?").run(key);54 else db.query("INSERT OR REPLACE INTO settings (key, value) VALUES (?, ?)").run(key, value);55 }56 })();57}