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 DELETE FROM projection_pending_approvals
9 WHERE NOT EXISTS (
10 SELECT 1
11 FROM projection_thread_activities AS activity
12 WHERE activity.kind = 'approval.requested'
13 AND json_extract(activity.payload_json, '$.requestId')
14 = projection_pending_approvals.request_id
15 )
16 `;
17
18 yield* sql`
19 UPDATE projection_threads
20 SET pending_approval_count = COALESCE((
21 SELECT COUNT(*)
22 FROM projection_pending_approvals
23 WHERE projection_pending_approvals.thread_id = projection_threads.thread_id
24 AND projection_pending_approvals.status = 'pending'
25 ), 0)
26 `;
27});