Files
dyolink/backend/prisma/migrations/20260713160000_lab_case_activity/migration.sql

60 lines
2.0 KiB
SQL

-- Lab case activity feed + per-user read cursors for tab badges
CREATE TYPE "LabCaseActivityType" AS ENUM (
'CASE_SENT',
'CLINIC_COMMENT',
'LAB_COMMENT',
'CASE_IMPORTANT',
'CASE_AMENDED',
'TASK_COMPLETED'
);
CREATE TYPE "LabCaseTabReadTarget" AS ENUM ('CASES', 'TASKS', 'TREATMENT');
CREATE TABLE "lab_case_activities" (
"id" TEXT NOT NULL,
"labCaseId" TEXT NOT NULL,
"type" "LabCaseActivityType" NOT NULL,
"actorUserId" TEXT,
"payload" JSONB,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "lab_case_activities_pkey" PRIMARY KEY ("id")
);
CREATE TABLE "lab_case_user_read_states" (
"userId" TEXT NOT NULL,
"organizationId" TEXT NOT NULL,
"labCaseId" TEXT NOT NULL,
"lastReadAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "lab_case_user_read_states_pkey" PRIMARY KEY ("userId", "organizationId", "labCaseId")
);
CREATE TABLE "lab_case_user_tab_read_states" (
"userId" TEXT NOT NULL,
"organizationId" TEXT NOT NULL,
"tab" "LabCaseTabReadTarget" NOT NULL,
"lastReadAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "lab_case_user_tab_read_states_pkey" PRIMARY KEY ("userId", "organizationId", "tab")
);
ALTER TABLE "lab_case_activities"
ADD CONSTRAINT "lab_case_activities_labCaseId_fkey"
FOREIGN KEY ("labCaseId") REFERENCES "lab_cases"("id") ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE "lab_case_activities"
ADD CONSTRAINT "lab_case_activities_actorUserId_fkey"
FOREIGN KEY ("actorUserId") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
ALTER TABLE "lab_case_user_read_states"
ADD CONSTRAINT "lab_case_user_read_states_labCaseId_fkey"
FOREIGN KEY ("labCaseId") REFERENCES "lab_cases"("id") ON DELETE CASCADE ON UPDATE CASCADE;
CREATE INDEX "lab_case_activities_labCaseId_createdAt_idx"
ON "lab_case_activities"("labCaseId", "createdAt");
CREATE INDEX "lab_case_activities_type_createdAt_idx"
ON "lab_case_activities"("type", "createdAt");
CREATE INDEX "lab_case_user_read_states_userId_organizationId_idx"
ON "lab_case_user_read_states"("userId", "organizationId");