feat: add unified client timeline query

This commit is contained in:
Ruslan Bakiev
2026-02-23 10:48:21 +07:00
parent c9e4c3172e
commit 4b9682e447
5 changed files with 660 additions and 54 deletions

View File

@@ -0,0 +1,32 @@
-- CreateEnum
CREATE TYPE "ClientTimelineContentType" AS ENUM ('CALENDAR_EVENT', 'DOCUMENT', 'RECOMMENDATION');
-- CreateTable
CREATE TABLE "ClientTimelineEntry" (
"id" TEXT NOT NULL,
"teamId" TEXT NOT NULL,
"contactId" TEXT NOT NULL,
"contentType" "ClientTimelineContentType" NOT NULL,
"contentId" TEXT NOT NULL,
"datetime" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "ClientTimelineEntry_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE INDEX "ClientTimelineEntry_teamId_contactId_datetime_idx" ON "ClientTimelineEntry"("teamId", "contactId", "datetime");
-- CreateIndex
CREATE INDEX "ClientTimelineEntry_contactId_datetime_idx" ON "ClientTimelineEntry"("contactId", "datetime");
-- CreateIndex
CREATE UNIQUE INDEX "ClientTimelineEntry_teamId_contentType_contentId_key" ON "ClientTimelineEntry"("teamId", "contentType", "contentId");
-- AddForeignKey
ALTER TABLE "ClientTimelineEntry" ADD CONSTRAINT "ClientTimelineEntry_teamId_fkey" FOREIGN KEY ("teamId") REFERENCES "Team"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "ClientTimelineEntry" ADD CONSTRAINT "ClientTimelineEntry_contactId_fkey" FOREIGN KEY ("contactId") REFERENCES "Contact"("id") ON DELETE CASCADE ON UPDATE CASCADE;

View File

@@ -58,6 +58,12 @@ enum WorkspaceDocumentType {
Template
}
enum ClientTimelineContentType {
CALENDAR_EVENT
DOCUMENT
RECOMMENDATION
}
model Team {
id String @id @default(cuid())
name String
@@ -79,6 +85,7 @@ model Team {
feedCards FeedCard[]
contactPins ContactPin[]
documents WorkspaceDocument[]
clientTimelineEntries ClientTimelineEntry[]
contactInboxes ContactInbox[]
contactInboxPreferences ContactInboxPreference[]
}
@@ -137,6 +144,7 @@ model Contact {
omniMessages OmniMessage[]
omniIdentities OmniContactIdentity[]
contactInboxes ContactInbox[]
clientTimelineEntries ClientTimelineEntry[]
@@index([teamId, updatedAt])
}
@@ -436,3 +444,21 @@ model WorkspaceDocument {
@@index([teamId, updatedAt])
}
model ClientTimelineEntry {
id String @id @default(cuid())
teamId String
contactId String
contentType ClientTimelineContentType
contentId String
datetime DateTime @default(now())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
team Team @relation(fields: [teamId], references: [id], onDelete: Cascade)
contact Contact @relation(fields: [contactId], references: [id], onDelete: Cascade)
@@unique([teamId, contentType, contentId])
@@index([teamId, contactId, datetime])
@@index([contactId, datetime])
}