| 1 | import * as Effect from "effect/Effect"; |
| 2 | import * as SqlClient from "effect/sql/SqlClient"; |
| 3 | |
| 4 | // Schema setup composed by migration 055. |
| 5 | export default Effect.gen(function* () { |
| 6 | const sql = yield* SqlClient.SqlClient; |
| 7 | |
| 8 | yield* sql` |
| 9 | CREATE TABLE orchestration_v2_effect_outbox_next ( |
| 10 | effect_id TEXT PRIMARY KEY, |
| 11 | command_id TEXT NOT NULL, |
| 12 | thread_id TEXT NOT NULL, |
| 13 | effect_type TEXT NOT NULL, |
| 14 | payload_json TEXT NOT NULL, |
| 15 | status TEXT NOT NULL CHECK ( |
| 16 | status IN ('pending', 'running', 'succeeded', 'failed', 'cancelled') |
| 17 | ), |
| 18 | attempt_count INTEGER NOT NULL DEFAULT 0, |
| 19 | available_at TEXT NOT NULL, |
| 20 | lease_owner TEXT, |
| 21 | lease_expires_at TEXT, |
| 22 | created_at TEXT NOT NULL, |
| 23 | updated_at TEXT NOT NULL, |
| 24 | completed_at TEXT, |
| 25 | last_error TEXT |
| 26 | ) |
| 27 | `; |
| 28 | yield* sql` |
| 29 | INSERT INTO orchestration_v2_effect_outbox_next ( |
| 30 | effect_id, |
| 31 | command_id, |
| 32 | thread_id, |
| 33 | effect_type, |
| 34 | payload_json, |
| 35 | status, |
| 36 | attempt_count, |
| 37 | available_at, |
| 38 | lease_owner, |
| 39 | lease_expires_at, |
| 40 | created_at, |
| 41 | updated_at, |
| 42 | completed_at, |
| 43 | last_error |
| 44 | ) |
| 45 | SELECT |
| 46 | effect_id, |
| 47 | command_id, |
| 48 | thread_id, |
| 49 | effect_type, |
| 50 | payload_json, |
| 51 | status, |
| 52 | attempt_count, |
| 53 | available_at, |
| 54 | lease_owner, |
| 55 | lease_expires_at, |
| 56 | created_at, |
| 57 | updated_at, |
| 58 | completed_at, |
| 59 | last_error |
| 60 | FROM orchestration_v2_effect_outbox |
| 61 | `; |
| 62 | yield* sql`DROP TABLE orchestration_v2_effect_outbox`; |
| 63 | yield* sql` |
| 64 | ALTER TABLE orchestration_v2_effect_outbox_next |
| 65 | RENAME TO orchestration_v2_effect_outbox |
| 66 | `; |
| 67 | yield* sql` |
| 68 | CREATE INDEX orchestration_v2_effect_outbox_claim_idx |
| 69 | ON orchestration_v2_effect_outbox(status, available_at, lease_expires_at, created_at) |
| 70 | `; |
| 71 | yield* sql` |
| 72 | CREATE INDEX orchestration_v2_effect_outbox_command_idx |
| 73 | ON orchestration_v2_effect_outbox(command_id, effect_id) |
| 74 | `; |
| 75 | yield* sql` |
| 76 | CREATE INDEX orchestration_v2_effect_outbox_thread_status_idx |
| 77 | ON orchestration_v2_effect_outbox(thread_id, status, effect_type) |
| 78 | `; |
| 79 | }); |