Files
codex-telegram-bot/internal/store/migrations.go
2026-05-21 08:40:16 +00:00

95 lines
2.8 KiB
Go

package store
type migration struct {
Name string
SQL string
}
var migrations = []migration{
{
Name: "initial_state",
SQL: `
CREATE TABLE allowed_users (
telegram_user_id INTEGER PRIMARY KEY,
username TEXT NOT NULL DEFAULT '',
notes TEXT NOT NULL DEFAULT '',
added_at TEXT NOT NULL DEFAULT (datetime('now'))
);
CREATE TABLE workspaces (
id INTEGER PRIMARY KEY AUTOINCREMENT,
path TEXT NOT NULL UNIQUE,
label TEXT NOT NULL,
is_default INTEGER NOT NULL DEFAULT 0,
created_at TEXT NOT NULL DEFAULT (datetime('now'))
);
CREATE TABLE sessions (
telegram_user_id INTEGER PRIMARY KEY,
active_thread_id INTEGER,
active_workspace_id INTEGER,
model TEXT NOT NULL DEFAULT '',
sandbox TEXT NOT NULL DEFAULT 'workspace-write',
active_turn_id TEXT NOT NULL DEFAULT '',
updated_at TEXT NOT NULL DEFAULT (datetime('now')),
FOREIGN KEY(active_thread_id) REFERENCES threads(id) ON DELETE SET NULL,
FOREIGN KEY(active_workspace_id) REFERENCES workspaces(id) ON DELETE SET NULL
);
CREATE TABLE threads (
id INTEGER PRIMARY KEY AUTOINCREMENT,
telegram_user_id INTEGER NOT NULL,
codex_thread_id TEXT NOT NULL UNIQUE,
workspace_id INTEGER NOT NULL,
title TEXT NOT NULL DEFAULT '',
archived INTEGER NOT NULL DEFAULT 0,
created_at TEXT NOT NULL DEFAULT (datetime('now')),
updated_at TEXT NOT NULL DEFAULT (datetime('now')),
FOREIGN KEY(workspace_id) REFERENCES workspaces(id) ON DELETE RESTRICT
);
CREATE INDEX idx_threads_user_updated ON threads(telegram_user_id, archived, updated_at DESC);
CREATE TABLE pending_approvals (
id INTEGER PRIMARY KEY AUTOINCREMENT,
telegram_user_id INTEGER NOT NULL,
codex_request_id TEXT NOT NULL,
codex_thread_id TEXT NOT NULL,
turn_id TEXT NOT NULL DEFAULT '',
item_id TEXT NOT NULL DEFAULT '',
kind TEXT NOT NULL,
payload_json TEXT NOT NULL,
message_chat_id INTEGER NOT NULL DEFAULT 0,
message_id INTEGER NOT NULL DEFAULT 0,
status TEXT NOT NULL DEFAULT 'pending',
created_at TEXT NOT NULL DEFAULT (datetime('now')),
resolved_at TEXT NOT NULL DEFAULT '',
UNIQUE(telegram_user_id, codex_request_id)
);
CREATE INDEX idx_pending_approvals_status ON pending_approvals(telegram_user_id, status);
CREATE TABLE audit_log (
id INTEGER PRIMARY KEY AUTOINCREMENT,
telegram_user_id INTEGER NOT NULL DEFAULT 0,
action TEXT NOT NULL,
details TEXT NOT NULL DEFAULT '',
created_at TEXT NOT NULL DEFAULT (datetime('now'))
);
CREATE INDEX idx_audit_user_created ON audit_log(telegram_user_id, created_at DESC);
`,
},
{
Name: "session_reasoning_effort",
SQL: "ALTER TABLE sessions ADD COLUMN reasoning_effort TEXT NOT NULL DEFAULT ''",
},
{
Name: "session_settings_message",
SQL: `
ALTER TABLE sessions ADD COLUMN settings_chat_id INTEGER NOT NULL DEFAULT 0;
ALTER TABLE sessions ADD COLUMN settings_message_id INTEGER NOT NULL DEFAULT 0;
`,
},
}