37 lines
1.1 KiB
TypeScript
37 lines
1.1 KiB
TypeScript
import { Database } from "bun:sqlite";
|
|
|
|
export function initDb(path: string): Database {
|
|
const db = new Database(path, { create: true });
|
|
db.exec("PRAGMA journal_mode = WAL");
|
|
db.exec("PRAGMA foreign_keys = ON");
|
|
|
|
db.exec(`
|
|
CREATE TABLE IF NOT EXISTS instances (
|
|
id TEXT PRIMARY KEY,
|
|
slug TEXT UNIQUE NOT NULL,
|
|
display_name TEXT NOT NULL,
|
|
primary_domain TEXT NOT NULL,
|
|
fallback_domain TEXT NOT NULL,
|
|
owner TEXT NOT NULL,
|
|
status TEXT NOT NULL DEFAULT 'provisioning',
|
|
compose_path TEXT,
|
|
created_at TEXT DEFAULT (datetime('now')),
|
|
updated_at TEXT DEFAULT (datetime('now'))
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS provision_log (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
instance_id TEXT NOT NULL REFERENCES instances(id),
|
|
action TEXT NOT NULL,
|
|
detail TEXT,
|
|
created_at TEXT DEFAULT (datetime('now'))
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_instances_slug ON instances(slug);
|
|
CREATE INDEX IF NOT EXISTS idx_instances_owner ON instances(owner);
|
|
CREATE INDEX IF NOT EXISTS idx_provision_log_instance ON provision_log(instance_id);
|
|
`);
|
|
|
|
return db;
|
|
}
|