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 last_sync_at: number | null;16 last_sync_error: string | null;17};1819export type RepoEdit = Omit<AdminRepo, "name" | "last_sync_at" | "last_sync_error">;2021export function allRepos(db: Database): AdminRepo[] {22 return db.query<AdminRepo, []>("SELECT * FROM repos ORDER BY sort_order, name").all();23}2425export function findRepo(db: Database, name: string): AdminRepo | null {26 return db.query<AdminRepo, [string]>("SELECT * FROM repos WHERE name = ?").get(name);27}2829export function updateRepo(db: Database, name: string, edit: RepoEdit): void {30 db.query(31 `UPDATE repos SET public = ?, category = ?, homepage = ?, sort_order = ?, install1 = ?,32 install2 = ?, install3 = ?, languages = ?33 WHERE name = ?`,34 ).run(35 edit.public,36 edit.category,37 edit.homepage,38 edit.sort_order,39 edit.install1,40 edit.install2,41 edit.install3,42 edit.languages,43 name,44 );45}464748export function saveSettings(db: Database, values: Record<string, string>): void {49 db.transaction(() => {50 for (const [key, value] of Object.entries(values)) {51 if (value === "") db.query("DELETE FROM settings WHERE key = ?").run(key);52 else db.query("INSERT OR REPLACE INTO settings (key, value) VALUES (?, ?)").run(key, value);53 }54 })();55}