1import * as SqlClient from "effect/sql/SqlClient";
2import * as Effect from "effect/Effect";
3
4export default Effect.gen(function* () {
5 const sql = yield* SqlClient.SqlClient;
6
7 yield* sql`
8 CREATE TABLE IF NOT EXISTS orchestration_events (
9 sequence INTEGER PRIMARY KEY AUTOINCREMENT,
10 event_id TEXT NOT NULL UNIQUE,
11 aggregate_kind TEXT NOT NULL,
12 stream_id TEXT NOT NULL,
13 stream_version INTEGER NOT NULL,
14 event_type TEXT NOT NULL,
15 occurred_at TEXT NOT NULL,
16 command_id TEXT,
17 causation_event_id TEXT,
18 correlation_id TEXT,
19 actor_kind TEXT NOT NULL,
20 payload_json TEXT NOT NULL,
21 metadata_json TEXT NOT NULL
22 )
23 `;
24
25 yield* sql`
26 CREATE UNIQUE INDEX IF NOT EXISTS idx_orch_events_stream_version
27 ON orchestration_events(aggregate_kind, stream_id, stream_version)
28 `;
29
30 yield* sql`
31 CREATE INDEX IF NOT EXISTS idx_orch_events_stream_sequence
32 ON orchestration_events(aggregate_kind, stream_id, sequence)
33 `;
34
35 yield* sql`
36 CREATE INDEX IF NOT EXISTS idx_orch_events_command_id
37 ON orchestration_events(command_id)
38 `;
39
40 yield* sql`
41 CREATE INDEX IF NOT EXISTS idx_orch_events_correlation_id
42 ON orchestration_events(correlation_id)
43 `;
44});