improvement: notify counter badge added to treatment and tasks tabs for upadted and edited cases.
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
-- 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");
|
||||
@@ -28,6 +28,7 @@ model User {
|
||||
assignedLabCaseTasks LabCaseTask[] @relation("LabCaseTaskAssignee")
|
||||
labCaseTaskStatusEvents LabCaseTaskStatusEvent[]
|
||||
labCaseComments LabCaseComment[]
|
||||
labCaseActivities LabCaseActivity[]
|
||||
phoneVerificationCodes PhoneVerificationCode[]
|
||||
|
||||
createdAt DateTime @default(now())
|
||||
@@ -224,6 +225,8 @@ model LabCase {
|
||||
toothProsthesis LabCaseToothProsthesis[]
|
||||
comments LabCaseComment[]
|
||||
attachments LabCaseAttachment[]
|
||||
activities LabCaseActivity[]
|
||||
userReadStates LabCaseUserReadState[]
|
||||
|
||||
@@index([treatmentId, sortOrder])
|
||||
@@map("lab_cases")
|
||||
@@ -410,6 +413,60 @@ model LabCaseComment {
|
||||
@@map("lab_case_comments")
|
||||
}
|
||||
|
||||
enum LabCaseActivityType {
|
||||
CASE_SENT
|
||||
CLINIC_COMMENT
|
||||
LAB_COMMENT
|
||||
CASE_IMPORTANT
|
||||
CASE_AMENDED
|
||||
TASK_COMPLETED
|
||||
}
|
||||
|
||||
enum LabCaseTabReadTarget {
|
||||
CASES
|
||||
TASKS
|
||||
TREATMENT
|
||||
}
|
||||
|
||||
model LabCaseActivity {
|
||||
id String @id @default(uuid())
|
||||
labCaseId String
|
||||
type LabCaseActivityType
|
||||
actorUserId String?
|
||||
payload Json?
|
||||
createdAt DateTime @default(now())
|
||||
|
||||
labCase LabCase @relation(fields: [labCaseId], references: [id], onDelete: Cascade)
|
||||
actorUser User? @relation(fields: [actorUserId], references: [id], onDelete: SetNull)
|
||||
|
||||
@@index([labCaseId, createdAt])
|
||||
@@index([type, createdAt])
|
||||
@@map("lab_case_activities")
|
||||
}
|
||||
|
||||
model LabCaseUserReadState {
|
||||
userId String
|
||||
organizationId String
|
||||
labCaseId String
|
||||
lastReadAt DateTime
|
||||
|
||||
labCase LabCase @relation(fields: [labCaseId], references: [id], onDelete: Cascade)
|
||||
|
||||
@@id([userId, organizationId, labCaseId])
|
||||
@@index([userId, organizationId])
|
||||
@@map("lab_case_user_read_states")
|
||||
}
|
||||
|
||||
model LabCaseUserTabReadState {
|
||||
userId String
|
||||
organizationId String
|
||||
tab LabCaseTabReadTarget
|
||||
lastReadAt DateTime
|
||||
|
||||
@@id([userId, organizationId, tab])
|
||||
@@map("lab_case_user_tab_read_states")
|
||||
}
|
||||
|
||||
model Plan {
|
||||
id String @id @default(uuid())
|
||||
name String @unique // "Solo", "Small", "Medium", "Large", "Enterprise"
|
||||
|
||||
Reference in New Issue
Block a user