From 87180e185846ec0946fe93c4b6d9b83deab2e38d Mon Sep 17 00:00:00 2001 From: Wira Basalamah Date: Tue, 21 Apr 2026 12:27:29 +0700 Subject: [PATCH] fix: make initial migration PostgreSQL-compatible --- .../20260420143000_init/migration.sql | 118 +++++++++--------- 1 file changed, 59 insertions(+), 59 deletions(-) diff --git a/prisma/migrations/20260420143000_init/migration.sql b/prisma/migrations/20260420143000_init/migration.sql index d0f0a2b..fc593d6 100644 --- a/prisma/migrations/20260420143000_init/migration.sql +++ b/prisma/migrations/20260420143000_init/migration.sql @@ -8,8 +8,8 @@ CREATE TABLE "SubscriptionPlan" ( "seatQuota" INTEGER NOT NULL, "broadcastQuota" INTEGER NOT NULL, "featuresJson" JSONB, - "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updatedAt" DATETIME NOT NULL + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL ); -- CreateTable @@ -21,8 +21,8 @@ CREATE TABLE "Tenant" ( "timezone" TEXT NOT NULL, "status" TEXT NOT NULL DEFAULT 'TRIAL', "planId" TEXT NOT NULL, - "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updatedAt" DATETIME NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, CONSTRAINT "Tenant_planId_fkey" FOREIGN KEY ("planId") REFERENCES "SubscriptionPlan" ("id") ON DELETE RESTRICT ON UPDATE CASCADE ); @@ -33,8 +33,8 @@ CREATE TABLE "Role" ( "name" TEXT NOT NULL, "code" TEXT NOT NULL, "permissionsJson" JSONB, - "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updatedAt" DATETIME NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, CONSTRAINT "Role_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "Tenant" ("id") ON DELETE SET NULL ON UPDATE CASCADE ); @@ -48,9 +48,9 @@ CREATE TABLE "User" ( "roleId" TEXT NOT NULL, "status" TEXT NOT NULL DEFAULT 'INVITED', "avatarUrl" TEXT, - "lastLoginAt" DATETIME, - "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updatedAt" DATETIME NOT NULL, + "lastLoginAt" TIMESTAMP(3), + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, CONSTRAINT "User_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "Tenant" ("id") ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT "User_roleId_fkey" FOREIGN KEY ("roleId") REFERENCES "Role" ("id") ON DELETE RESTRICT ON UPDATE CASCADE ); @@ -66,9 +66,9 @@ CREATE TABLE "Channel" ( "displayPhoneNumber" TEXT, "status" TEXT NOT NULL DEFAULT 'PENDING', "webhookStatus" TEXT, - "lastSyncAt" DATETIME, - "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updatedAt" DATETIME NOT NULL, + "lastSyncAt" TIMESTAMP(3), + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, CONSTRAINT "Channel_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "Tenant" ("id") ON DELETE RESTRICT ON UPDATE CASCADE ); @@ -84,9 +84,9 @@ CREATE TABLE "Contact" ( "avatarUrl" TEXT, "countryCode" TEXT, "optInStatus" TEXT NOT NULL DEFAULT 'UNKNOWN', - "lastInteractionAt" DATETIME, - "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updatedAt" DATETIME NOT NULL, + "lastInteractionAt" TIMESTAMP(3), + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, CONSTRAINT "Contact_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "Tenant" ("id") ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT "Contact_channelId_fkey" FOREIGN KEY ("channelId") REFERENCES "Channel" ("id") ON DELETE SET NULL ON UPDATE CASCADE ); @@ -97,8 +97,8 @@ CREATE TABLE "Tag" ( "tenantId" TEXT NOT NULL, "name" TEXT NOT NULL, "color" TEXT, - "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updatedAt" DATETIME NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, CONSTRAINT "Tag_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "Tenant" ("id") ON DELETE RESTRICT ON UPDATE CASCADE ); @@ -108,7 +108,7 @@ CREATE TABLE "ContactTag" ( "tenantId" TEXT NOT NULL, "contactId" TEXT NOT NULL, "tagId" TEXT NOT NULL, - "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "ContactTag_contactId_fkey" FOREIGN KEY ("contactId") REFERENCES "Contact" ("id") ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT "ContactTag_tagId_fkey" FOREIGN KEY ("tagId") REFERENCES "Tag" ("id") ON DELETE RESTRICT ON UPDATE CASCADE ); @@ -123,13 +123,13 @@ CREATE TABLE "Conversation" ( "status" TEXT NOT NULL DEFAULT 'OPEN', "priority" TEXT NOT NULL DEFAULT 'NORMAL', "assignedUserId" TEXT, - "firstMessageAt" DATETIME, - "lastMessageAt" DATETIME, - "lastInboundAt" DATETIME, - "lastOutboundAt" DATETIME, - "resolvedAt" DATETIME, - "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updatedAt" DATETIME NOT NULL, + "firstMessageAt" TIMESTAMP(3), + "lastMessageAt" TIMESTAMP(3), + "lastInboundAt" TIMESTAMP(3), + "lastOutboundAt" TIMESTAMP(3), + "resolvedAt" TIMESTAMP(3), + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, CONSTRAINT "Conversation_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "Tenant" ("id") ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT "Conversation_channelId_fkey" FOREIGN KEY ("channelId") REFERENCES "Channel" ("id") ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT "Conversation_contactId_fkey" FOREIGN KEY ("contactId") REFERENCES "Contact" ("id") ON DELETE RESTRICT ON UPDATE CASCADE, @@ -153,10 +153,10 @@ CREATE TABLE "Message" ( "deliveryStatus" TEXT NOT NULL DEFAULT 'QUEUED', "failedReason" TEXT, "sentByUserId" TEXT, - "sentAt" DATETIME, - "deliveredAt" DATETIME, - "readAt" DATETIME, - "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + "sentAt" TIMESTAMP(3), + "deliveredAt" TIMESTAMP(3), + "readAt" TIMESTAMP(3), + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "Message_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "Tenant" ("id") ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT "Message_conversationId_fkey" FOREIGN KEY ("conversationId") REFERENCES "Conversation" ("id") ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT "Message_channelId_fkey" FOREIGN KEY ("channelId") REFERENCES "Channel" ("id") ON DELETE RESTRICT ON UPDATE CASCADE, @@ -171,8 +171,8 @@ CREATE TABLE "ConversationNote" ( "conversationId" TEXT NOT NULL, "userId" TEXT NOT NULL, "content" TEXT NOT NULL, - "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updatedAt" DATETIME NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, CONSTRAINT "ConversationNote_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "Tenant" ("id") ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT "ConversationNote_conversationId_fkey" FOREIGN KEY ("conversationId") REFERENCES "Conversation" ("id") ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT "ConversationNote_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE @@ -184,7 +184,7 @@ CREATE TABLE "ConversationTag" ( "tenantId" TEXT NOT NULL, "conversationId" TEXT NOT NULL, "tagId" TEXT NOT NULL, - "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "ConversationTag_conversationId_fkey" FOREIGN KEY ("conversationId") REFERENCES "Conversation" ("id") ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT "ConversationTag_tagId_fkey" FOREIGN KEY ("tagId") REFERENCES "Tag" ("id") ON DELETE RESTRICT ON UPDATE CASCADE ); @@ -197,7 +197,7 @@ CREATE TABLE "ConversationActivity" ( "actorUserId" TEXT, "activityType" TEXT NOT NULL, "metadataJson" JSONB, - "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "ConversationActivity_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "Tenant" ("id") ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT "ConversationActivity_conversationId_fkey" FOREIGN KEY ("conversationId") REFERENCES "Conversation" ("id") ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT "ConversationActivity_actorUserId_fkey" FOREIGN KEY ("actorUserId") REFERENCES "User" ("id") ON DELETE SET NULL ON UPDATE CASCADE @@ -210,8 +210,8 @@ CREATE TABLE "ContactSegment" ( "name" TEXT NOT NULL, "description" TEXT, "rulesJson" JSONB, - "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updatedAt" DATETIME NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, CONSTRAINT "ContactSegment_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "Tenant" ("id") ON DELETE RESTRICT ON UPDATE CASCADE ); @@ -221,7 +221,7 @@ CREATE TABLE "SegmentMember" ( "tenantId" TEXT NOT NULL, "segmentId" TEXT NOT NULL, "contactId" TEXT NOT NULL, - "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "SegmentMember_segmentId_fkey" FOREIGN KEY ("segmentId") REFERENCES "ContactSegment" ("id") ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT "SegmentMember_contactId_fkey" FOREIGN KEY ("contactId") REFERENCES "Contact" ("id") ON DELETE RESTRICT ON UPDATE CASCADE ); @@ -242,8 +242,8 @@ CREATE TABLE "MessageTemplate" ( "providerTemplateId" TEXT, "approvalStatus" TEXT NOT NULL DEFAULT 'DRAFT', "rejectedReason" TEXT, - "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updatedAt" DATETIME NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, CONSTRAINT "MessageTemplate_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "Tenant" ("id") ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT "MessageTemplate_channelId_fkey" FOREIGN KEY ("channelId") REFERENCES "Channel" ("id") ON DELETE RESTRICT ON UPDATE CASCADE ); @@ -259,17 +259,17 @@ CREATE TABLE "BroadcastCampaign" ( "campaignType" TEXT NOT NULL DEFAULT 'BROADCAST', "audienceType" TEXT NOT NULL, "segmentId" TEXT, - "scheduledAt" DATETIME, - "startedAt" DATETIME, - "finishedAt" DATETIME, + "scheduledAt" TIMESTAMP(3), + "startedAt" TIMESTAMP(3), + "finishedAt" TIMESTAMP(3), "status" TEXT NOT NULL DEFAULT 'DRAFT', "totalRecipients" INTEGER NOT NULL DEFAULT 0, "totalSent" INTEGER NOT NULL DEFAULT 0, "totalDelivered" INTEGER NOT NULL DEFAULT 0, "totalRead" INTEGER NOT NULL DEFAULT 0, "totalFailed" INTEGER NOT NULL DEFAULT 0, - "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updatedAt" DATETIME NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, CONSTRAINT "BroadcastCampaign_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "Tenant" ("id") ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT "BroadcastCampaign_channelId_fkey" FOREIGN KEY ("channelId") REFERENCES "Channel" ("id") ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT "BroadcastCampaign_templateId_fkey" FOREIGN KEY ("templateId") REFERENCES "MessageTemplate" ("id") ON DELETE RESTRICT ON UPDATE CASCADE, @@ -287,10 +287,10 @@ CREATE TABLE "CampaignRecipient" ( "sendStatus" TEXT NOT NULL DEFAULT 'QUEUED', "failureReason" TEXT, "providerMessageId" TEXT, - "sentAt" DATETIME, - "deliveredAt" DATETIME, - "readAt" DATETIME, - "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + "sentAt" TIMESTAMP(3), + "deliveredAt" TIMESTAMP(3), + "readAt" TIMESTAMP(3), + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "CampaignRecipient_campaignId_fkey" FOREIGN KEY ("campaignId") REFERENCES "BroadcastCampaign" ("id") ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT "CampaignRecipient_contactId_fkey" FOREIGN KEY ("contactId") REFERENCES "Contact" ("id") ON DELETE RESTRICT ON UPDATE CASCADE ); @@ -306,7 +306,7 @@ CREATE TABLE "AuditLog" ( "metadataJson" JSONB, "ipAddress" TEXT, "userAgent" TEXT, - "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "AuditLog_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "Tenant" ("id") ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT "AuditLog_actorUserId_fkey" FOREIGN KEY ("actorUserId") REFERENCES "User" ("id") ON DELETE SET NULL ON UPDATE CASCADE ); @@ -321,8 +321,8 @@ CREATE TABLE "WebhookEvent" ( "payloadJson" JSONB NOT NULL, "processStatus" TEXT NOT NULL, "failedReason" TEXT, - "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, - "processedAt" DATETIME, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "processedAt" TIMESTAMP(3), CONSTRAINT "WebhookEvent_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "Tenant" ("id") ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT "WebhookEvent_channelId_fkey" FOREIGN KEY ("channelId") REFERENCES "Channel" ("id") ON DELETE SET NULL ON UPDATE CASCADE ); @@ -331,15 +331,15 @@ CREATE TABLE "WebhookEvent" ( CREATE TABLE "UsageMetric" ( "id" TEXT NOT NULL PRIMARY KEY, "tenantId" TEXT NOT NULL, - "metricDate" DATETIME NOT NULL, + "metricDate" TIMESTAMP(3) NOT NULL, "inboundMessages" INTEGER NOT NULL DEFAULT 0, "outboundMessages" INTEGER NOT NULL DEFAULT 0, "activeContacts" INTEGER NOT NULL DEFAULT 0, "activeAgents" INTEGER NOT NULL DEFAULT 0, "broadcastSent" INTEGER NOT NULL DEFAULT 0, "storageUsedMb" INTEGER NOT NULL DEFAULT 0, - "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updatedAt" DATETIME NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, CONSTRAINT "UsageMetric_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "Tenant" ("id") ON DELETE RESTRICT ON UPDATE CASCADE ); @@ -349,16 +349,16 @@ CREATE TABLE "BillingInvoice" ( "tenantId" TEXT NOT NULL, "planId" TEXT NOT NULL, "invoiceNumber" TEXT NOT NULL, - "periodStart" DATETIME NOT NULL, - "periodEnd" DATETIME NOT NULL, + "periodStart" TIMESTAMP(3) NOT NULL, + "periodEnd" TIMESTAMP(3) NOT NULL, "subtotal" DECIMAL NOT NULL, "taxAmount" DECIMAL NOT NULL, "totalAmount" DECIMAL NOT NULL, "paymentStatus" TEXT NOT NULL DEFAULT 'UNPAID', - "dueDate" DATETIME NOT NULL, - "paidAt" DATETIME, - "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updatedAt" DATETIME NOT NULL, + "dueDate" TIMESTAMP(3) NOT NULL, + "paidAt" TIMESTAMP(3), + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, CONSTRAINT "BillingInvoice_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "Tenant" ("id") ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT "BillingInvoice_planId_fkey" FOREIGN KEY ("planId") REFERENCES "SubscriptionPlan" ("id") ON DELETE RESTRICT ON UPDATE CASCADE );