1import * as Effect from "effect/Effect";
2import * as SqlClient from "effect/sql/SqlClient";
3
4// Schema setup composed by migration 055.
5export default Effect.gen(function* () {
6 const sql = yield* SqlClient.SqlClient;
7
8 yield* sql`
9 CREATE TABLE IF NOT EXISTS scheduled_tasks (
10 task_id TEXT PRIMARY KEY,
11 title TEXT NOT NULL,
12 prompt TEXT NOT NULL,
13 enabled INTEGER NOT NULL,
14 schedule_json TEXT NOT NULL,
15 project_id TEXT NOT NULL,
16 thread_id TEXT,
17 workspace_strategy_json TEXT NOT NULL,
18 model_selection_json TEXT NOT NULL,
19 runtime_mode TEXT NOT NULL,
20 interaction_mode TEXT NOT NULL,
21 created_by TEXT NOT NULL,
22 creation_source TEXT NOT NULL,
23 created_at TEXT NOT NULL,
24 updated_at TEXT NOT NULL,
25 next_run_at TEXT,
26 last_run_at TEXT,
27 last_run_status TEXT NOT NULL,
28 last_run_error TEXT,
29 run_count INTEGER NOT NULL
30 )
31 `;
32
33 yield* sql`
34 CREATE INDEX IF NOT EXISTS idx_scheduled_tasks_due
35 ON scheduled_tasks(enabled, next_run_at)
36 WHERE enabled = 1 AND next_run_at IS NOT NULL
37 `;
38
39 yield* sql`
40 CREATE INDEX IF NOT EXISTS idx_scheduled_tasks_project
41 ON scheduled_tasks(project_id, updated_at)
42 `;
43});