Files
HiveGrid-Wireframes/hivegrid-cloud/prisma/schema/outbox.prisma
T

39 lines
1.2 KiB
Plaintext

// Outbox-Event pattern: side-effects committed atomically with DB writes.
// Dispatcher worker (apps/worker/src/outbox/dispatcher.ts) polls PENDING rows
// and routes them to BullMQ queues by `eventType` prefix.
//
// See docs/improvement-plan/03-scaling-infrastructure/outbox-pattern.md and
// docs/architecture/outbox-pattern.md.
model OutboxEvent {
id String @id @default(cuid())
tenantId String?
eventType String
payload Json
status OutboxStatus @default(PENDING)
createdAt DateTime @default(now())
processedAt DateTime?
retries Int @default(0)
lastError String?
scheduledAt DateTime @default(now())
dispatchKey String?
priority Int @default(0)
lockedUntil DateTime?
@@unique([dispatchKey])
@@index([status, scheduledAt])
@@index([tenantId, eventType])
@@index([status, priority, createdAt])
@@index([status, lockedUntil], name: "outbox_event_status_locked_until_idx")
@@index([status, priority(sort: Desc), createdAt], name: "outbox_event_status_priority_created_at_desc_idx")
@@index([status, processedAt], name: "outbox_event_status_processed_at_idx")
}
enum OutboxStatus {
PENDING
PROCESSING
DONE
FAILED
CANCELLED
}