feat: add unified client timeline query
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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])
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user