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 );