From 30eff3dcdb3232ff5141e8f5116450dc75eb1460 Mon Sep 17 00:00:00 2001 From: Lucas Berger Date: Fri, 12 Jun 2026 16:57:21 -0400 Subject: [PATCH] feat(09-02): add signalOutboxDrain() after each of four enqueue sites in events.ts - import signalOutboxDrain from '../lib/outboxTrigger.js' - Site 1 (POST /create): fire-and-forget signal after outbox insert, before 202 - Site 2 (PATCH edit-as-move): signal after await db.transaction() resolves, not inside callback (D-03) - Site 3 (PATCH same-calendar update): signal after outbox insert, before 202 - Site 4 (DELETE): signal after outbox insert, before 202 --- apps/api/src/routes/events.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/apps/api/src/routes/events.ts b/apps/api/src/routes/events.ts index aef146e..1f675f2 100644 --- a/apps/api/src/routes/events.ts +++ b/apps/api/src/routes/events.ts @@ -34,6 +34,7 @@ import { expandOccurrences } from '../broker/expand.js'; import { extractRruleString } from '../broker/vevent.js'; import { getAuth } from '../auth/middleware.js'; import { upsertUser, deriveDisplayName } from '../auth/user.js'; +import { signalOutboxDrain } from '../lib/outboxTrigger.js'; // Side-effect import: brings in the ContextVariableMap augmentation for c.get('user') import '../auth/devBypass.js'; @@ -306,6 +307,7 @@ eventsRouter.post('/create', zValidator('json', eventFieldsSchema), async (c) => payload: JSON.stringify(payload), }); + signalOutboxDrain(); return c.json({ uid }, 202); } catch (err) { console.error('[events/create] DB operation failed:', err); @@ -429,6 +431,7 @@ eventsRouter.patch('/:uid/edit', zValidator('json', eventFieldsSchema), async (c }); }); + signalOutboxDrain(); return c.json({ uid: newUid }, 202); } @@ -444,6 +447,7 @@ eventsRouter.patch('/:uid/edit', zValidator('json', eventFieldsSchema), async (c payload: JSON.stringify(payload), }); + signalOutboxDrain(); return c.json({ uid }, 202); } catch (err) { console.error('[events/edit] DB operation failed:', err); @@ -518,6 +522,7 @@ eventsRouter.delete('/:uid', async (c) => { etag: eventRow.etag ?? undefined, }); + signalOutboxDrain(); return c.json({ uid }, 202); } catch (err) { console.error('[events/delete] DB operation failed:', err);