CREATE TABLE IF NOT EXISTS settings ( key TEXT NOT NULL PRIMARY KEY, value TEXT NOT NULL, updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE IF NOT EXISTS domains ( id TEXT NOT NULL PRIMARY KEY, name TEXT NOT NULL UNIQUE, certificate_type TEXT NOT NULL, sans_json TEXT NOT NULL, status TEXT NOT NULL, expires_at TIMESTAMPTZ NULL, created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE IF NOT EXISTS tasks ( id TEXT NOT NULL PRIMARY KEY, domain_id TEXT NOT NULL, task_type TEXT NOT NULL, status TEXT NOT NULL, message TEXT NOT NULL, started_at TIMESTAMPTZ NULL, finished_at TIMESTAMPTZ NULL, created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP ); CREATE INDEX IF NOT EXISTS idx_tasks_domain_id ON tasks(domain_id); CREATE TABLE IF NOT EXISTS audit_logs ( id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, action TEXT NOT NULL, resource_type TEXT NOT NULL, resource_id TEXT NOT NULL, status TEXT NOT NULL, message TEXT NOT NULL, created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP ); CREATE INDEX IF NOT EXISTS idx_audit_logs_created_at ON audit_logs(created_at);