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
This commit is contained in:
Lucas Berger
2026-06-12 16:57:21 -04:00
parent 9164619ccd
commit 30eff3dcdb
+5
View File
@@ -34,6 +34,7 @@ import { expandOccurrences } from '../broker/expand.js';
import { extractRruleString } from '../broker/vevent.js'; import { extractRruleString } from '../broker/vevent.js';
import { getAuth } from '../auth/middleware.js'; import { getAuth } from '../auth/middleware.js';
import { upsertUser, deriveDisplayName } from '../auth/user.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') // Side-effect import: brings in the ContextVariableMap augmentation for c.get('user')
import '../auth/devBypass.js'; import '../auth/devBypass.js';
@@ -306,6 +307,7 @@ eventsRouter.post('/create', zValidator('json', eventFieldsSchema), async (c) =>
payload: JSON.stringify(payload), payload: JSON.stringify(payload),
}); });
signalOutboxDrain();
return c.json({ uid }, 202); return c.json({ uid }, 202);
} catch (err) { } catch (err) {
console.error('[events/create] DB operation failed:', 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); return c.json({ uid: newUid }, 202);
} }
@@ -444,6 +447,7 @@ eventsRouter.patch('/:uid/edit', zValidator('json', eventFieldsSchema), async (c
payload: JSON.stringify(payload), payload: JSON.stringify(payload),
}); });
signalOutboxDrain();
return c.json({ uid }, 202); return c.json({ uid }, 202);
} catch (err) { } catch (err) {
console.error('[events/edit] DB operation failed:', err); console.error('[events/edit] DB operation failed:', err);
@@ -518,6 +522,7 @@ eventsRouter.delete('/:uid', async (c) => {
etag: eventRow.etag ?? undefined, etag: eventRow.etag ?? undefined,
}); });
signalOutboxDrain();
return c.json({ uid }, 202); return c.json({ uid }, 202);
} catch (err) { } catch (err) {
console.error('[events/delete] DB operation failed:', err); console.error('[events/delete] DB operation failed:', err);