From edfb1f21572c7ac955eb2ba9d154f0d6bf37d074 Mon Sep 17 00:00:00 2001 From: Ephraim Atta-Duncan Date: Thu, 30 Jan 2025 05:38:03 +0000 Subject: [PATCH] feat: add document access token model --- .../migration.sql | 29 +++++++++++++++++++ packages/prisma/schema.prisma | 20 ++++++++++++- 2 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 packages/prisma/migrations/20250130053604_document_access_token/migration.sql diff --git a/packages/prisma/migrations/20250130053604_document_access_token/migration.sql b/packages/prisma/migrations/20250130053604_document_access_token/migration.sql new file mode 100644 index 000000000..df2743f07 --- /dev/null +++ b/packages/prisma/migrations/20250130053604_document_access_token/migration.sql @@ -0,0 +1,29 @@ +-- CreateTable +CREATE TABLE "DocumentAccessToken" ( + "id" TEXT NOT NULL, + "token" TEXT NOT NULL, + "documentId" INTEGER NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + "expiresAt" TIMESTAMP(3), + "revokedAt" TIMESTAMP(3), + "lastAccessedAt" TIMESTAMP(3), + "accessCount" INTEGER NOT NULL DEFAULT 0, + + CONSTRAINT "DocumentAccessToken_pkey" PRIMARY KEY ("id") +); + +-- CreateIndex +CREATE UNIQUE INDEX "DocumentAccessToken_token_key" ON "DocumentAccessToken"("token"); + +-- CreateIndex +CREATE UNIQUE INDEX "DocumentAccessToken_documentId_key" ON "DocumentAccessToken"("documentId"); + +-- CreateIndex +CREATE INDEX "DocumentAccessToken_token_idx" ON "DocumentAccessToken"("token"); + +-- CreateIndex +CREATE INDEX "DocumentAccessToken_documentId_idx" ON "DocumentAccessToken"("documentId"); + +-- AddForeignKey +ALTER TABLE "DocumentAccessToken" ADD CONSTRAINT "DocumentAccessToken_documentId_fkey" FOREIGN KEY ("documentId") REFERENCES "Document"("id") ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/packages/prisma/schema.prisma b/packages/prisma/schema.prisma index 0070229d9..9a4217b7d 100644 --- a/packages/prisma/schema.prisma +++ b/packages/prisma/schema.prisma @@ -320,7 +320,8 @@ model Document { template Template? @relation(fields: [templateId], references: [id], onDelete: SetNull) source DocumentSource - auditLogs DocumentAuditLog[] + auditLogs DocumentAuditLog[] + documentAccessToken DocumentAccessToken? @@unique([documentDataId]) @@index([userId]) @@ -386,6 +387,23 @@ model DocumentMeta { emailSettings Json? } +model DocumentAccessToken { + id String @id @default(cuid()) + token String @unique + documentId Int @unique + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + expiresAt DateTime? + revokedAt DateTime? + lastAccessedAt DateTime? + accessCount Int @default(0) + + document Document @relation(fields: [documentId], references: [id], onDelete: Cascade) + + @@index([token]) + @@index([documentId]) +} + enum ReadStatus { NOT_OPENED OPENED