-- FeishuEventReceipt: idempotency for inbound ws events (at-least-once redelivery). CREATE TABLE "FeishuEventReceipt" ( "id" TEXT NOT NULL, "eventId" TEXT NOT NULL, "eventType" TEXT NOT NULL, "messageId" TEXT, "receivedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "FeishuEventReceipt_pkey" PRIMARY KEY ("id") ); CREATE UNIQUE INDEX "FeishuEventReceipt_eventId_key" ON "FeishuEventReceipt"("eventId"); CREATE INDEX "FeishuEventReceipt_eventType_idx" ON "FeishuEventReceipt"("eventType"); CREATE INDEX "FeishuEventReceipt_messageId_idx" ON "FeishuEventReceipt"("messageId"); CREATE INDEX "FeishuEventReceipt_receivedAt_idx" ON "FeishuEventReceipt"("receivedAt"); -- AuditEntry: add projectId so audit points before/without a run (permission -- denials, slash commands) are locatable to a project. ALTER TABLE "AuditEntry" ADD COLUMN "projectId" TEXT; CREATE INDEX "AuditEntry_projectId_createdAt_idx" ON "AuditEntry"("projectId", "createdAt"); ALTER TABLE "AuditEntry" ADD CONSTRAINT "AuditEntry_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES "Project"("id") ON DELETE SET NULL ON UPDATE CASCADE;