From 7f834b2905a8838a5f82417a9d33048f3d71a344 Mon Sep 17 00:00:00 2001 From: hectorzhao Date: Wed, 1 Jul 2026 16:43:08 +0800 Subject: [PATCH] chore: add initial prisma migration --- .gitignore | 2 + .../20260701083436_init/migration.sql | 1187 +++++++++++++++++ api/prisma/migrations/migration_lock.toml | 3 + 3 files changed, 1192 insertions(+) create mode 100644 api/prisma/migrations/20260701083436_init/migration.sql create mode 100644 api/prisma/migrations/migration_lock.toml diff --git a/.gitignore b/.gitignore index 2d9d421..1a530d9 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,8 @@ dist/ .env .env.* *.local +.local-tools/ +.local-data/ npm-debug.log* yarn-debug.log* diff --git a/api/prisma/migrations/20260701083436_init/migration.sql b/api/prisma/migrations/20260701083436_init/migration.sql new file mode 100644 index 0000000..7b57065 --- /dev/null +++ b/api/prisma/migrations/20260701083436_init/migration.sql @@ -0,0 +1,1187 @@ +-- CreateTable +CREATE TABLE "Tenant" ( + "id" TEXT NOT NULL, + "name" TEXT NOT NULL, + "code" TEXT NOT NULL, + "status" TEXT NOT NULL DEFAULT 'active', + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "Tenant_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "User" ( + "id" TEXT NOT NULL, + "tenantId" TEXT, + "username" TEXT NOT NULL, + "displayName" TEXT NOT NULL, + "passwordHash" TEXT NOT NULL, + "status" TEXT NOT NULL DEFAULT 'active', + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "User_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Role" ( + "id" TEXT NOT NULL, + "code" TEXT NOT NULL, + "name" TEXT NOT NULL, + "scope" TEXT NOT NULL DEFAULT 'platform', + "description" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "Role_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Permission" ( + "id" TEXT NOT NULL, + "code" TEXT NOT NULL, + "name" TEXT NOT NULL, + "description" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "Permission_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "UserRole" ( + "userId" TEXT NOT NULL, + "roleId" TEXT NOT NULL, + + CONSTRAINT "UserRole_pkey" PRIMARY KEY ("userId","roleId") +); + +-- CreateTable +CREATE TABLE "RolePermission" ( + "roleId" TEXT NOT NULL, + "permissionId" TEXT NOT NULL, + + CONSTRAINT "RolePermission_pkey" PRIMARY KEY ("roleId","permissionId") +); + +-- CreateTable +CREATE TABLE "OperationLog" ( + "id" TEXT NOT NULL, + "tenantId" TEXT, + "userId" TEXT, + "action" TEXT NOT NULL, + "resource" TEXT NOT NULL, + "resourceId" TEXT, + "ipAddress" TEXT, + "userAgent" TEXT, + "detail" JSONB, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "OperationLog_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "FileObject" ( + "id" TEXT NOT NULL, + "tenantId" TEXT, + "bucket" TEXT NOT NULL, + "objectKey" TEXT NOT NULL, + "fileName" TEXT NOT NULL, + "contentType" TEXT NOT NULL, + "sizeBytes" BIGINT NOT NULL, + "checksum" TEXT, + "purpose" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "FileObject_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "PhoneSegment" ( + "id" TEXT NOT NULL, + "prefix" TEXT NOT NULL, + "carrier" TEXT NOT NULL, + "province" TEXT, + "city" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "PhoneSegment_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "SensitiveWord" ( + "id" TEXT NOT NULL, + "word" TEXT NOT NULL, + "level" TEXT NOT NULL DEFAULT 'block', + "status" TEXT NOT NULL DEFAULT 'active', + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "SensitiveWord_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "EnterpriseBlacklist" ( + "id" TEXT NOT NULL, + "tenantId" TEXT NOT NULL, + "phoneNumber" TEXT NOT NULL, + "reason" TEXT, + "status" TEXT NOT NULL DEFAULT 'active', + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "EnterpriseBlacklist_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "GlobalBlacklist" ( + "id" TEXT NOT NULL, + "phoneNumber" TEXT NOT NULL, + "reason" TEXT, + "status" TEXT NOT NULL DEFAULT 'active', + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "GlobalBlacklist_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "DrainageField" ( + "id" TEXT NOT NULL, + "code" TEXT NOT NULL, + "name" TEXT NOT NULL, + "fieldType" TEXT NOT NULL, + "required" BOOLEAN NOT NULL DEFAULT false, + "status" TEXT NOT NULL DEFAULT 'active', + "description" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "DrainageField_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "BillingPlan" ( + "id" TEXT NOT NULL, + "name" TEXT NOT NULL, + "priceCents" INTEGER NOT NULL, + "smsUnits" INTEGER NOT NULL, + "validDays" INTEGER NOT NULL, + "status" TEXT NOT NULL DEFAULT 'active', + "description" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "BillingPlan_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "TenantAccount" ( + "id" TEXT NOT NULL, + "tenantId" TEXT NOT NULL, + "balanceCents" INTEGER NOT NULL DEFAULT 0, + "smsUnits" INTEGER NOT NULL DEFAULT 0, + "creditCents" INTEGER NOT NULL DEFAULT 0, + "status" TEXT NOT NULL DEFAULT 'active', + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "TenantAccount_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "AccountTransaction" ( + "id" TEXT NOT NULL, + "tenantId" TEXT NOT NULL, + "transactionType" TEXT NOT NULL, + "amountCents" INTEGER NOT NULL DEFAULT 0, + "smsUnits" INTEGER NOT NULL DEFAULT 0, + "balanceAfter" INTEGER NOT NULL DEFAULT 0, + "relatedType" TEXT, + "relatedId" TEXT, + "remark" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "AccountTransaction_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "BillingRule" ( + "id" TEXT NOT NULL, + "code" TEXT NOT NULL, + "name" TEXT NOT NULL, + "chargeBasis" TEXT NOT NULL DEFAULT 'submit_success', + "unitPrice" INTEGER NOT NULL, + "status" TEXT NOT NULL DEFAULT 'active', + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "BillingRule_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "RechargeOrder" ( + "id" TEXT NOT NULL, + "tenantId" TEXT NOT NULL, + "planId" TEXT, + "orderNo" TEXT NOT NULL, + "amountCents" INTEGER NOT NULL, + "smsUnits" INTEGER NOT NULL DEFAULT 0, + "status" TEXT NOT NULL DEFAULT 'created', + "payMethod" TEXT, + "paidAt" TIMESTAMP(3), + "operatorId" TEXT, + "remark" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "RechargeOrder_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "SmsBillingRecord" ( + "id" TEXT NOT NULL, + "tenantId" TEXT NOT NULL, + "applicationId" TEXT, + "taskId" TEXT, + "messageId" TEXT, + "phoneNumber" TEXT, + "contentLength" INTEGER NOT NULL, + "billingUnits" INTEGER NOT NULL, + "unitPrice" INTEGER NOT NULL, + "amountCents" INTEGER NOT NULL, + "billingStatus" TEXT NOT NULL DEFAULT 'estimated', + "transactionId" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "SmsBillingRecord_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "SmsApplication" ( + "id" TEXT NOT NULL, + "tenantId" TEXT NOT NULL, + "name" TEXT NOT NULL, + "scene" TEXT, + "callbackUrl" TEXT, + "secretHash" TEXT NOT NULL, + "dailyLimit" INTEGER, + "maxPhonesPerTask" INTEGER NOT NULL DEFAULT 1000000, + "templateMismatchMode" TEXT NOT NULL DEFAULT 'reject', + "status" TEXT NOT NULL DEFAULT 'active', + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "SmsApplication_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "SmsApplicationIpAllowlist" ( + "id" TEXT NOT NULL, + "applicationId" TEXT NOT NULL, + "ipCidr" TEXT NOT NULL, + "remark" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "SmsApplicationIpAllowlist_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "SmsSignature" ( + "id" TEXT NOT NULL, + "tenantId" TEXT NOT NULL, + "applicationId" TEXT, + "name" TEXT NOT NULL, + "purpose" TEXT, + "drainageInfo" JSONB, + "auditStatus" TEXT NOT NULL DEFAULT 'draft', + "reportStatus" TEXT NOT NULL DEFAULT 'waiting_material', + "rejectReason" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "SmsSignature_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "SignatureMaterial" ( + "id" TEXT NOT NULL, + "signatureId" TEXT NOT NULL, + "fileObjectId" TEXT, + "materialType" TEXT NOT NULL, + "title" TEXT NOT NULL, + "description" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "SignatureMaterial_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "SmsTemplate" ( + "id" TEXT NOT NULL, + "tenantId" TEXT NOT NULL, + "applicationId" TEXT NOT NULL, + "signatureId" TEXT, + "name" TEXT NOT NULL, + "content" TEXT NOT NULL, + "category" TEXT, + "auditStatus" TEXT NOT NULL DEFAULT 'draft', + "rejectReason" TEXT, + "billingUnits" INTEGER NOT NULL DEFAULT 1, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "SmsTemplate_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "TemplateVariable" ( + "id" TEXT NOT NULL, + "templateId" TEXT NOT NULL, + "name" TEXT NOT NULL, + "example" TEXT, + "required" BOOLEAN NOT NULL DEFAULT true, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "TemplateVariable_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "AuditRecord" ( + "id" TEXT NOT NULL, + "tenantId" TEXT, + "targetType" TEXT NOT NULL, + "targetId" TEXT NOT NULL, + "action" TEXT NOT NULL, + "statusBefore" TEXT, + "statusAfter" TEXT NOT NULL, + "reason" TEXT, + "reviewerId" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "AuditRecord_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "SmsChannel" ( + "id" TEXT NOT NULL, + "code" TEXT NOT NULL, + "name" TEXT NOT NULL, + "carrier" TEXT, + "protocol" TEXT NOT NULL DEFAULT 'CMPP', + "gatewayHost" TEXT NOT NULL, + "gatewayPort" INTEGER NOT NULL, + "enterpriseCode" TEXT, + "account" TEXT NOT NULL, + "passwordCipher" TEXT NOT NULL, + "srcId" TEXT NOT NULL, + "cmppVersion" TEXT NOT NULL DEFAULT '3.0', + "rateLimitPerSecond" INTEGER NOT NULL DEFAULT 100, + "unitPrice" INTEGER NOT NULL DEFAULT 0, + "status" TEXT NOT NULL DEFAULT 'active', + "config" JSONB, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "SmsChannel_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "SmsChannelGroup" ( + "id" TEXT NOT NULL, + "code" TEXT NOT NULL, + "name" TEXT NOT NULL, + "description" TEXT, + "status" TEXT NOT NULL DEFAULT 'active', + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "SmsChannelGroup_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "SmsChannelGroupItem" ( + "id" TEXT NOT NULL, + "groupId" TEXT NOT NULL, + "channelId" TEXT NOT NULL, + "carrier" TEXT, + "province" TEXT, + "priority" INTEGER NOT NULL DEFAULT 100, + "weight" INTEGER NOT NULL DEFAULT 1, + "isBackup" BOOLEAN NOT NULL DEFAULT false, + "rateLimitPerSecond" INTEGER, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "SmsChannelGroupItem_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "ChannelRouteRule" ( + "id" TEXT NOT NULL, + "tenantId" TEXT, + "applicationId" TEXT, + "groupId" TEXT NOT NULL, + "channelId" TEXT, + "carrier" TEXT, + "province" TEXT, + "priority" INTEGER NOT NULL DEFAULT 100, + "status" TEXT NOT NULL DEFAULT 'active', + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "ChannelRouteRule_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "ChannelHealthMetric" ( + "id" TEXT NOT NULL, + "channelId" TEXT NOT NULL, + "submitTotal" INTEGER NOT NULL DEFAULT 0, + "submitSuccess" INTEGER NOT NULL DEFAULT 0, + "submitFailed" INTEGER NOT NULL DEFAULT 0, + "receiptSuccess" INTEGER NOT NULL DEFAULT 0, + "receiptFailed" INTEGER NOT NULL DEFAULT 0, + "unknownTotal" INTEGER NOT NULL DEFAULT 0, + "windowStart" TIMESTAMP(3) NOT NULL, + "windowEnd" TIMESTAMP(3) NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "ChannelHealthMetric_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "ChannelReportField" ( + "id" TEXT NOT NULL, + "channelId" TEXT NOT NULL, + "code" TEXT NOT NULL, + "name" TEXT NOT NULL, + "fieldType" TEXT NOT NULL, + "required" BOOLEAN NOT NULL DEFAULT false, + "description" TEXT, + "sortOrder" INTEGER NOT NULL DEFAULT 100, + "status" TEXT NOT NULL DEFAULT 'active', + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "ChannelReportField_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "SignatureReportMaterial" ( + "id" TEXT NOT NULL, + "signatureId" TEXT NOT NULL, + "channelId" TEXT NOT NULL, + "fieldCode" TEXT NOT NULL, + "fieldValue" TEXT, + "fileObjectId" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "SignatureReportMaterial_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "ChannelSignatureReportTask" ( + "id" TEXT NOT NULL, + "tenantId" TEXT NOT NULL, + "signatureId" TEXT NOT NULL, + "channelId" TEXT NOT NULL, + "status" TEXT NOT NULL DEFAULT 'pending', + "reason" TEXT, + "createdById" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "ChannelSignatureReportTask_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "ChannelSignatureReportRecord" ( + "id" TEXT NOT NULL, + "taskId" TEXT NOT NULL, + "channelId" TEXT NOT NULL, + "action" TEXT NOT NULL, + "statusBefore" TEXT, + "statusAfter" TEXT NOT NULL, + "reason" TEXT, + "operatorId" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "ChannelSignatureReportRecord_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "ReportExportFile" ( + "id" TEXT NOT NULL, + "taskId" TEXT NOT NULL, + "fileObjectId" TEXT, + "fileName" TEXT NOT NULL, + "rowCount" INTEGER NOT NULL DEFAULT 0, + "status" TEXT NOT NULL DEFAULT 'generated', + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "ReportExportFile_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "ReportReceiptImport" ( + "id" TEXT NOT NULL, + "taskId" TEXT NOT NULL, + "fileObjectId" TEXT, + "fileName" TEXT NOT NULL, + "rowCount" INTEGER NOT NULL DEFAULT 0, + "successCount" INTEGER NOT NULL DEFAULT 0, + "failedCount" INTEGER NOT NULL DEFAULT 0, + "status" TEXT NOT NULL DEFAULT 'imported', + "result" JSONB, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "ReportReceiptImport_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "RiskRule" ( + "id" TEXT NOT NULL, + "tenantId" TEXT, + "code" TEXT NOT NULL, + "name" TEXT NOT NULL, + "description" TEXT, + "metric" TEXT NOT NULL, + "thresholdValue" DOUBLE PRECISION NOT NULL, + "action" TEXT NOT NULL DEFAULT 'manual_review', + "status" TEXT NOT NULL DEFAULT 'active', + "priority" INTEGER NOT NULL DEFAULT 100, + "config" JSONB, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "RiskRule_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "SmsSendTask" ( + "id" TEXT NOT NULL, + "tenantId" TEXT NOT NULL, + "applicationId" TEXT, + "templateId" TEXT, + "taskNo" TEXT NOT NULL, + "content" TEXT NOT NULL, + "category" TEXT, + "phoneTotal" INTEGER NOT NULL, + "uniquePhoneTotal" INTEGER NOT NULL, + "duplicateRatio" DOUBLE PRECISION NOT NULL DEFAULT 0, + "illegalRatio" DOUBLE PRECISION NOT NULL DEFAULT 0, + "blacklistHitRatio" DOUBLE PRECISION NOT NULL DEFAULT 0, + "variableIssues" JSONB, + "status" TEXT NOT NULL DEFAULT 'created', + "riskDecision" TEXT NOT NULL DEFAULT 'allow', + "reviewReason" TEXT, + "rejectReason" TEXT, + "createdById" TEXT, + "reviewedById" TEXT, + "reviewedAt" TIMESTAMP(3), + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "SmsSendTask_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "RiskHitRecord" ( + "id" TEXT NOT NULL, + "tenantId" TEXT NOT NULL, + "taskId" TEXT NOT NULL, + "ruleId" TEXT, + "ruleCode" TEXT NOT NULL, + "ruleName" TEXT NOT NULL, + "thresholdValue" DOUBLE PRECISION NOT NULL, + "actualValue" DOUBLE PRECISION NOT NULL, + "action" TEXT NOT NULL, + "reason" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "RiskHitRecord_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "SmsBatchTask" ( + "id" TEXT NOT NULL, + "tenantId" TEXT NOT NULL, + "applicationId" TEXT, + "templateId" TEXT, + "taskNo" TEXT NOT NULL, + "sourceType" TEXT NOT NULL DEFAULT 'client', + "content" TEXT NOT NULL, + "category" TEXT, + "phoneTotal" INTEGER NOT NULL, + "status" TEXT NOT NULL DEFAULT 'created', + "riskTaskId" TEXT, + "auditStatus" TEXT NOT NULL DEFAULT 'approved', + "reviewReason" TEXT, + "rejectReason" TEXT, + "progressTotal" INTEGER NOT NULL DEFAULT 0, + "submittedTotal" INTEGER NOT NULL DEFAULT 0, + "successTotal" INTEGER NOT NULL DEFAULT 0, + "failedTotal" INTEGER NOT NULL DEFAULT 0, + "unknownTotal" INTEGER NOT NULL DEFAULT 0, + "timeoutTotal" INTEGER NOT NULL DEFAULT 0, + "createdById" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "SmsBatchTask_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "SmsApiRequest" ( + "id" TEXT NOT NULL, + "tenantId" TEXT NOT NULL, + "batchTaskId" TEXT NOT NULL, + "requestId" TEXT NOT NULL, + "sourceIp" TEXT, + "userAgent" TEXT, + "payloadSummary" JSONB, + "status" TEXT NOT NULL DEFAULT 'accepted', + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "SmsApiRequest_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "SmsMessageRecord" ( + "id" TEXT NOT NULL, + "tenantId" TEXT NOT NULL, + "batchTaskId" TEXT NOT NULL, + "applicationId" TEXT, + "templateId" TEXT, + "messageId" TEXT NOT NULL, + "phoneNumber" TEXT NOT NULL, + "content" TEXT NOT NULL, + "billingUnits" INTEGER NOT NULL DEFAULT 1, + "unitPrice" INTEGER NOT NULL DEFAULT 0, + "amountCents" INTEGER NOT NULL DEFAULT 0, + "channelId" TEXT, + "submitId" TEXT, + "gatewayMessageId" TEXT, + "status" TEXT NOT NULL DEFAULT 'queued', + "submitStatus" TEXT, + "receiptStatus" TEXT, + "errorCode" TEXT, + "errorMessage" TEXT, + "queuedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "submittedAt" TIMESTAMP(3), + "deliveredAt" TIMESTAMP(3), + "timeoutAt" TIMESTAMP(3), + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "SmsMessageRecord_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "CmppSubmitSession" ( + "id" TEXT NOT NULL, + "channelId" TEXT NOT NULL, + "sessionNo" TEXT NOT NULL, + "status" TEXT NOT NULL DEFAULT 'open', + "submitTotal" INTEGER NOT NULL DEFAULT 0, + "acceptedTotal" INTEGER NOT NULL DEFAULT 0, + "rejectedTotal" INTEGER NOT NULL DEFAULT 0, + "startedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "endedAt" TIMESTAMP(3), + + CONSTRAINT "CmppSubmitSession_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "SmsSubmitRecord" ( + "id" TEXT NOT NULL, + "tenantId" TEXT NOT NULL, + "batchTaskId" TEXT NOT NULL, + "messageRecordId" TEXT NOT NULL, + "channelId" TEXT NOT NULL, + "sessionId" TEXT, + "submitId" TEXT NOT NULL, + "sequenceId" INTEGER, + "gatewayMessageId" TEXT, + "submitStatus" TEXT NOT NULL DEFAULT 'queued', + "errorCode" TEXT, + "errorMessage" TEXT, + "submittedAt" TIMESTAMP(3), + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "SmsSubmitRecord_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "SmsReceiptRecord" ( + "id" TEXT NOT NULL, + "tenantId" TEXT NOT NULL, + "batchTaskId" TEXT, + "messageRecordId" TEXT, + "channelId" TEXT, + "messageId" TEXT NOT NULL, + "gatewayMessageId" TEXT NOT NULL, + "sequenceId" INTEGER, + "receiptStatus" TEXT NOT NULL, + "rawStatus" TEXT NOT NULL, + "errorCode" TEXT, + "deliveredAt" TIMESTAMP(3) NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "SmsReceiptRecord_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "SmsUplinkMessage" ( + "id" TEXT NOT NULL, + "tenantId" TEXT, + "channelId" TEXT NOT NULL, + "messageId" TEXT, + "sequenceId" INTEGER, + "phoneNumber" TEXT NOT NULL, + "destId" TEXT NOT NULL, + "content" TEXT NOT NULL, + "receivedAt" TIMESTAMP(3) NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "SmsUplinkMessage_pkey" PRIMARY KEY ("id") +); + +-- CreateIndex +CREATE UNIQUE INDEX "Tenant_code_key" ON "Tenant"("code"); + +-- CreateIndex +CREATE UNIQUE INDEX "User_username_key" ON "User"("username"); + +-- CreateIndex +CREATE UNIQUE INDEX "Role_code_key" ON "Role"("code"); + +-- CreateIndex +CREATE UNIQUE INDEX "Permission_code_key" ON "Permission"("code"); + +-- CreateIndex +CREATE INDEX "OperationLog_tenantId_createdAt_idx" ON "OperationLog"("tenantId", "createdAt"); + +-- CreateIndex +CREATE INDEX "OperationLog_userId_createdAt_idx" ON "OperationLog"("userId", "createdAt"); + +-- CreateIndex +CREATE UNIQUE INDEX "FileObject_objectKey_key" ON "FileObject"("objectKey"); + +-- CreateIndex +CREATE UNIQUE INDEX "PhoneSegment_prefix_key" ON "PhoneSegment"("prefix"); + +-- CreateIndex +CREATE UNIQUE INDEX "SensitiveWord_word_key" ON "SensitiveWord"("word"); + +-- CreateIndex +CREATE UNIQUE INDEX "EnterpriseBlacklist_tenantId_phoneNumber_key" ON "EnterpriseBlacklist"("tenantId", "phoneNumber"); + +-- CreateIndex +CREATE UNIQUE INDEX "GlobalBlacklist_phoneNumber_key" ON "GlobalBlacklist"("phoneNumber"); + +-- CreateIndex +CREATE UNIQUE INDEX "DrainageField_code_key" ON "DrainageField"("code"); + +-- CreateIndex +CREATE UNIQUE INDEX "TenantAccount_tenantId_key" ON "TenantAccount"("tenantId"); + +-- CreateIndex +CREATE INDEX "AccountTransaction_tenantId_createdAt_idx" ON "AccountTransaction"("tenantId", "createdAt"); + +-- CreateIndex +CREATE INDEX "AccountTransaction_relatedType_relatedId_idx" ON "AccountTransaction"("relatedType", "relatedId"); + +-- CreateIndex +CREATE UNIQUE INDEX "BillingRule_code_key" ON "BillingRule"("code"); + +-- CreateIndex +CREATE UNIQUE INDEX "RechargeOrder_orderNo_key" ON "RechargeOrder"("orderNo"); + +-- CreateIndex +CREATE INDEX "RechargeOrder_tenantId_createdAt_idx" ON "RechargeOrder"("tenantId", "createdAt"); + +-- CreateIndex +CREATE INDEX "SmsBillingRecord_tenantId_createdAt_idx" ON "SmsBillingRecord"("tenantId", "createdAt"); + +-- CreateIndex +CREATE INDEX "SmsBillingRecord_taskId_idx" ON "SmsBillingRecord"("taskId"); + +-- CreateIndex +CREATE INDEX "SmsBillingRecord_messageId_idx" ON "SmsBillingRecord"("messageId"); + +-- CreateIndex +CREATE INDEX "SmsApplication_tenantId_status_idx" ON "SmsApplication"("tenantId", "status"); + +-- CreateIndex +CREATE UNIQUE INDEX "SmsApplicationIpAllowlist_applicationId_ipCidr_key" ON "SmsApplicationIpAllowlist"("applicationId", "ipCidr"); + +-- CreateIndex +CREATE INDEX "SmsSignature_tenantId_auditStatus_idx" ON "SmsSignature"("tenantId", "auditStatus"); + +-- CreateIndex +CREATE INDEX "SmsSignature_tenantId_reportStatus_idx" ON "SmsSignature"("tenantId", "reportStatus"); + +-- CreateIndex +CREATE INDEX "SmsTemplate_tenantId_auditStatus_idx" ON "SmsTemplate"("tenantId", "auditStatus"); + +-- CreateIndex +CREATE INDEX "SmsTemplate_applicationId_idx" ON "SmsTemplate"("applicationId"); + +-- CreateIndex +CREATE UNIQUE INDEX "TemplateVariable_templateId_name_key" ON "TemplateVariable"("templateId", "name"); + +-- CreateIndex +CREATE INDEX "AuditRecord_targetType_targetId_idx" ON "AuditRecord"("targetType", "targetId"); + +-- CreateIndex +CREATE INDEX "AuditRecord_tenantId_createdAt_idx" ON "AuditRecord"("tenantId", "createdAt"); + +-- CreateIndex +CREATE UNIQUE INDEX "SmsChannel_code_key" ON "SmsChannel"("code"); + +-- CreateIndex +CREATE INDEX "SmsChannel_status_idx" ON "SmsChannel"("status"); + +-- CreateIndex +CREATE UNIQUE INDEX "SmsChannelGroup_code_key" ON "SmsChannelGroup"("code"); + +-- CreateIndex +CREATE INDEX "SmsChannelGroupItem_channelId_idx" ON "SmsChannelGroupItem"("channelId"); + +-- CreateIndex +CREATE UNIQUE INDEX "SmsChannelGroupItem_groupId_channelId_carrier_province_key" ON "SmsChannelGroupItem"("groupId", "channelId", "carrier", "province"); + +-- CreateIndex +CREATE INDEX "ChannelRouteRule_tenantId_applicationId_status_idx" ON "ChannelRouteRule"("tenantId", "applicationId", "status"); + +-- CreateIndex +CREATE INDEX "ChannelRouteRule_groupId_priority_idx" ON "ChannelRouteRule"("groupId", "priority"); + +-- CreateIndex +CREATE INDEX "ChannelHealthMetric_channelId_windowStart_idx" ON "ChannelHealthMetric"("channelId", "windowStart"); + +-- CreateIndex +CREATE UNIQUE INDEX "ChannelReportField_channelId_code_key" ON "ChannelReportField"("channelId", "code"); + +-- CreateIndex +CREATE INDEX "SignatureReportMaterial_channelId_idx" ON "SignatureReportMaterial"("channelId"); + +-- CreateIndex +CREATE UNIQUE INDEX "SignatureReportMaterial_signatureId_channelId_fieldCode_key" ON "SignatureReportMaterial"("signatureId", "channelId", "fieldCode"); + +-- CreateIndex +CREATE INDEX "ChannelSignatureReportTask_tenantId_status_idx" ON "ChannelSignatureReportTask"("tenantId", "status"); + +-- CreateIndex +CREATE INDEX "ChannelSignatureReportTask_signatureId_channelId_idx" ON "ChannelSignatureReportTask"("signatureId", "channelId"); + +-- CreateIndex +CREATE INDEX "ChannelSignatureReportRecord_taskId_createdAt_idx" ON "ChannelSignatureReportRecord"("taskId", "createdAt"); + +-- CreateIndex +CREATE INDEX "ChannelSignatureReportRecord_channelId_createdAt_idx" ON "ChannelSignatureReportRecord"("channelId", "createdAt"); + +-- CreateIndex +CREATE INDEX "RiskRule_tenantId_status_priority_idx" ON "RiskRule"("tenantId", "status", "priority"); + +-- CreateIndex +CREATE UNIQUE INDEX "RiskRule_tenantId_code_key" ON "RiskRule"("tenantId", "code"); + +-- CreateIndex +CREATE UNIQUE INDEX "SmsSendTask_taskNo_key" ON "SmsSendTask"("taskNo"); + +-- CreateIndex +CREATE INDEX "SmsSendTask_tenantId_status_createdAt_idx" ON "SmsSendTask"("tenantId", "status", "createdAt"); + +-- CreateIndex +CREATE INDEX "SmsSendTask_applicationId_createdAt_idx" ON "SmsSendTask"("applicationId", "createdAt"); + +-- CreateIndex +CREATE INDEX "RiskHitRecord_tenantId_createdAt_idx" ON "RiskHitRecord"("tenantId", "createdAt"); + +-- CreateIndex +CREATE INDEX "RiskHitRecord_taskId_idx" ON "RiskHitRecord"("taskId"); + +-- CreateIndex +CREATE INDEX "RiskHitRecord_ruleCode_idx" ON "RiskHitRecord"("ruleCode"); + +-- CreateIndex +CREATE UNIQUE INDEX "SmsBatchTask_taskNo_key" ON "SmsBatchTask"("taskNo"); + +-- CreateIndex +CREATE INDEX "SmsBatchTask_tenantId_status_createdAt_idx" ON "SmsBatchTask"("tenantId", "status", "createdAt"); + +-- CreateIndex +CREATE INDEX "SmsBatchTask_applicationId_createdAt_idx" ON "SmsBatchTask"("applicationId", "createdAt"); + +-- CreateIndex +CREATE UNIQUE INDEX "SmsApiRequest_requestId_key" ON "SmsApiRequest"("requestId"); + +-- CreateIndex +CREATE INDEX "SmsApiRequest_tenantId_createdAt_idx" ON "SmsApiRequest"("tenantId", "createdAt"); + +-- CreateIndex +CREATE INDEX "SmsApiRequest_batchTaskId_idx" ON "SmsApiRequest"("batchTaskId"); + +-- CreateIndex +CREATE UNIQUE INDEX "SmsMessageRecord_messageId_key" ON "SmsMessageRecord"("messageId"); + +-- CreateIndex +CREATE INDEX "SmsMessageRecord_tenantId_status_queuedAt_idx" ON "SmsMessageRecord"("tenantId", "status", "queuedAt"); + +-- CreateIndex +CREATE INDEX "SmsMessageRecord_batchTaskId_status_idx" ON "SmsMessageRecord"("batchTaskId", "status"); + +-- CreateIndex +CREATE INDEX "SmsMessageRecord_phoneNumber_idx" ON "SmsMessageRecord"("phoneNumber"); + +-- CreateIndex +CREATE INDEX "SmsMessageRecord_gatewayMessageId_idx" ON "SmsMessageRecord"("gatewayMessageId"); + +-- CreateIndex +CREATE UNIQUE INDEX "CmppSubmitSession_sessionNo_key" ON "CmppSubmitSession"("sessionNo"); + +-- CreateIndex +CREATE INDEX "CmppSubmitSession_channelId_status_idx" ON "CmppSubmitSession"("channelId", "status"); + +-- CreateIndex +CREATE UNIQUE INDEX "SmsSubmitRecord_submitId_key" ON "SmsSubmitRecord"("submitId"); + +-- CreateIndex +CREATE INDEX "SmsSubmitRecord_tenantId_createdAt_idx" ON "SmsSubmitRecord"("tenantId", "createdAt"); + +-- CreateIndex +CREATE INDEX "SmsSubmitRecord_messageRecordId_idx" ON "SmsSubmitRecord"("messageRecordId"); + +-- CreateIndex +CREATE INDEX "SmsSubmitRecord_gatewayMessageId_idx" ON "SmsSubmitRecord"("gatewayMessageId"); + +-- CreateIndex +CREATE INDEX "SmsReceiptRecord_tenantId_createdAt_idx" ON "SmsReceiptRecord"("tenantId", "createdAt"); + +-- CreateIndex +CREATE INDEX "SmsReceiptRecord_messageId_idx" ON "SmsReceiptRecord"("messageId"); + +-- CreateIndex +CREATE INDEX "SmsReceiptRecord_gatewayMessageId_idx" ON "SmsReceiptRecord"("gatewayMessageId"); + +-- CreateIndex +CREATE INDEX "SmsUplinkMessage_tenantId_createdAt_idx" ON "SmsUplinkMessage"("tenantId", "createdAt"); + +-- CreateIndex +CREATE INDEX "SmsUplinkMessage_channelId_receivedAt_idx" ON "SmsUplinkMessage"("channelId", "receivedAt"); + +-- CreateIndex +CREATE INDEX "SmsUplinkMessage_phoneNumber_idx" ON "SmsUplinkMessage"("phoneNumber"); + +-- AddForeignKey +ALTER TABLE "User" ADD CONSTRAINT "User_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "Tenant"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "UserRole" ADD CONSTRAINT "UserRole_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "UserRole" ADD CONSTRAINT "UserRole_roleId_fkey" FOREIGN KEY ("roleId") REFERENCES "Role"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "RolePermission" ADD CONSTRAINT "RolePermission_roleId_fkey" FOREIGN KEY ("roleId") REFERENCES "Role"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "RolePermission" ADD CONSTRAINT "RolePermission_permissionId_fkey" FOREIGN KEY ("permissionId") REFERENCES "Permission"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "OperationLog" ADD CONSTRAINT "OperationLog_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "Tenant"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "OperationLog" ADD CONSTRAINT "OperationLog_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "FileObject" ADD CONSTRAINT "FileObject_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "Tenant"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "EnterpriseBlacklist" ADD CONSTRAINT "EnterpriseBlacklist_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "Tenant"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "TenantAccount" ADD CONSTRAINT "TenantAccount_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "Tenant"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "AccountTransaction" ADD CONSTRAINT "AccountTransaction_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "Tenant"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "RechargeOrder" ADD CONSTRAINT "RechargeOrder_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "Tenant"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "RechargeOrder" ADD CONSTRAINT "RechargeOrder_planId_fkey" FOREIGN KEY ("planId") REFERENCES "BillingPlan"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "SmsBillingRecord" ADD CONSTRAINT "SmsBillingRecord_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "Tenant"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "SmsApplication" ADD CONSTRAINT "SmsApplication_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "Tenant"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "SmsApplicationIpAllowlist" ADD CONSTRAINT "SmsApplicationIpAllowlist_applicationId_fkey" FOREIGN KEY ("applicationId") REFERENCES "SmsApplication"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "SmsSignature" ADD CONSTRAINT "SmsSignature_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "Tenant"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "SmsSignature" ADD CONSTRAINT "SmsSignature_applicationId_fkey" FOREIGN KEY ("applicationId") REFERENCES "SmsApplication"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "SignatureMaterial" ADD CONSTRAINT "SignatureMaterial_signatureId_fkey" FOREIGN KEY ("signatureId") REFERENCES "SmsSignature"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "SmsTemplate" ADD CONSTRAINT "SmsTemplate_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "Tenant"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "SmsTemplate" ADD CONSTRAINT "SmsTemplate_applicationId_fkey" FOREIGN KEY ("applicationId") REFERENCES "SmsApplication"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "SmsTemplate" ADD CONSTRAINT "SmsTemplate_signatureId_fkey" FOREIGN KEY ("signatureId") REFERENCES "SmsSignature"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "TemplateVariable" ADD CONSTRAINT "TemplateVariable_templateId_fkey" FOREIGN KEY ("templateId") REFERENCES "SmsTemplate"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "AuditRecord" ADD CONSTRAINT "AuditRecord_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "Tenant"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "AuditRecord" ADD CONSTRAINT "AuditRecord_reviewerId_fkey" FOREIGN KEY ("reviewerId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "SmsChannelGroupItem" ADD CONSTRAINT "SmsChannelGroupItem_groupId_fkey" FOREIGN KEY ("groupId") REFERENCES "SmsChannelGroup"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "SmsChannelGroupItem" ADD CONSTRAINT "SmsChannelGroupItem_channelId_fkey" FOREIGN KEY ("channelId") REFERENCES "SmsChannel"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ChannelRouteRule" ADD CONSTRAINT "ChannelRouteRule_groupId_fkey" FOREIGN KEY ("groupId") REFERENCES "SmsChannelGroup"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ChannelRouteRule" ADD CONSTRAINT "ChannelRouteRule_channelId_fkey" FOREIGN KEY ("channelId") REFERENCES "SmsChannel"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ChannelHealthMetric" ADD CONSTRAINT "ChannelHealthMetric_channelId_fkey" FOREIGN KEY ("channelId") REFERENCES "SmsChannel"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ChannelReportField" ADD CONSTRAINT "ChannelReportField_channelId_fkey" FOREIGN KEY ("channelId") REFERENCES "SmsChannel"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "SignatureReportMaterial" ADD CONSTRAINT "SignatureReportMaterial_signatureId_fkey" FOREIGN KEY ("signatureId") REFERENCES "SmsSignature"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ChannelSignatureReportTask" ADD CONSTRAINT "ChannelSignatureReportTask_signatureId_fkey" FOREIGN KEY ("signatureId") REFERENCES "SmsSignature"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ChannelSignatureReportTask" ADD CONSTRAINT "ChannelSignatureReportTask_channelId_fkey" FOREIGN KEY ("channelId") REFERENCES "SmsChannel"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ChannelSignatureReportRecord" ADD CONSTRAINT "ChannelSignatureReportRecord_taskId_fkey" FOREIGN KEY ("taskId") REFERENCES "ChannelSignatureReportTask"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ChannelSignatureReportRecord" ADD CONSTRAINT "ChannelSignatureReportRecord_channelId_fkey" FOREIGN KEY ("channelId") REFERENCES "SmsChannel"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ReportExportFile" ADD CONSTRAINT "ReportExportFile_taskId_fkey" FOREIGN KEY ("taskId") REFERENCES "ChannelSignatureReportTask"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ReportReceiptImport" ADD CONSTRAINT "ReportReceiptImport_taskId_fkey" FOREIGN KEY ("taskId") REFERENCES "ChannelSignatureReportTask"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "RiskRule" ADD CONSTRAINT "RiskRule_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "Tenant"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "SmsSendTask" ADD CONSTRAINT "SmsSendTask_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "Tenant"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "SmsSendTask" ADD CONSTRAINT "SmsSendTask_applicationId_fkey" FOREIGN KEY ("applicationId") REFERENCES "SmsApplication"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "SmsSendTask" ADD CONSTRAINT "SmsSendTask_templateId_fkey" FOREIGN KEY ("templateId") REFERENCES "SmsTemplate"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "SmsSendTask" ADD CONSTRAINT "SmsSendTask_createdById_fkey" FOREIGN KEY ("createdById") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "SmsSendTask" ADD CONSTRAINT "SmsSendTask_reviewedById_fkey" FOREIGN KEY ("reviewedById") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "RiskHitRecord" ADD CONSTRAINT "RiskHitRecord_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "Tenant"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "RiskHitRecord" ADD CONSTRAINT "RiskHitRecord_taskId_fkey" FOREIGN KEY ("taskId") REFERENCES "SmsSendTask"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "RiskHitRecord" ADD CONSTRAINT "RiskHitRecord_ruleId_fkey" FOREIGN KEY ("ruleId") REFERENCES "RiskRule"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "SmsBatchTask" ADD CONSTRAINT "SmsBatchTask_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "Tenant"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "SmsBatchTask" ADD CONSTRAINT "SmsBatchTask_applicationId_fkey" FOREIGN KEY ("applicationId") REFERENCES "SmsApplication"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "SmsBatchTask" ADD CONSTRAINT "SmsBatchTask_templateId_fkey" FOREIGN KEY ("templateId") REFERENCES "SmsTemplate"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "SmsBatchTask" ADD CONSTRAINT "SmsBatchTask_createdById_fkey" FOREIGN KEY ("createdById") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "SmsApiRequest" ADD CONSTRAINT "SmsApiRequest_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "Tenant"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "SmsApiRequest" ADD CONSTRAINT "SmsApiRequest_batchTaskId_fkey" FOREIGN KEY ("batchTaskId") REFERENCES "SmsBatchTask"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "SmsMessageRecord" ADD CONSTRAINT "SmsMessageRecord_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "Tenant"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "SmsMessageRecord" ADD CONSTRAINT "SmsMessageRecord_batchTaskId_fkey" FOREIGN KEY ("batchTaskId") REFERENCES "SmsBatchTask"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "SmsMessageRecord" ADD CONSTRAINT "SmsMessageRecord_applicationId_fkey" FOREIGN KEY ("applicationId") REFERENCES "SmsApplication"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "SmsMessageRecord" ADD CONSTRAINT "SmsMessageRecord_templateId_fkey" FOREIGN KEY ("templateId") REFERENCES "SmsTemplate"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "SmsMessageRecord" ADD CONSTRAINT "SmsMessageRecord_channelId_fkey" FOREIGN KEY ("channelId") REFERENCES "SmsChannel"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "CmppSubmitSession" ADD CONSTRAINT "CmppSubmitSession_channelId_fkey" FOREIGN KEY ("channelId") REFERENCES "SmsChannel"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "SmsSubmitRecord" ADD CONSTRAINT "SmsSubmitRecord_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "Tenant"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "SmsSubmitRecord" ADD CONSTRAINT "SmsSubmitRecord_batchTaskId_fkey" FOREIGN KEY ("batchTaskId") REFERENCES "SmsBatchTask"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "SmsSubmitRecord" ADD CONSTRAINT "SmsSubmitRecord_messageRecordId_fkey" FOREIGN KEY ("messageRecordId") REFERENCES "SmsMessageRecord"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "SmsSubmitRecord" ADD CONSTRAINT "SmsSubmitRecord_channelId_fkey" FOREIGN KEY ("channelId") REFERENCES "SmsChannel"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "SmsSubmitRecord" ADD CONSTRAINT "SmsSubmitRecord_sessionId_fkey" FOREIGN KEY ("sessionId") REFERENCES "CmppSubmitSession"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "SmsReceiptRecord" ADD CONSTRAINT "SmsReceiptRecord_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "Tenant"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "SmsReceiptRecord" ADD CONSTRAINT "SmsReceiptRecord_batchTaskId_fkey" FOREIGN KEY ("batchTaskId") REFERENCES "SmsBatchTask"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "SmsReceiptRecord" ADD CONSTRAINT "SmsReceiptRecord_messageRecordId_fkey" FOREIGN KEY ("messageRecordId") REFERENCES "SmsMessageRecord"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "SmsReceiptRecord" ADD CONSTRAINT "SmsReceiptRecord_channelId_fkey" FOREIGN KEY ("channelId") REFERENCES "SmsChannel"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "SmsUplinkMessage" ADD CONSTRAINT "SmsUplinkMessage_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "Tenant"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "SmsUplinkMessage" ADD CONSTRAINT "SmsUplinkMessage_channelId_fkey" FOREIGN KEY ("channelId") REFERENCES "SmsChannel"("id") ON DELETE RESTRICT ON UPDATE CASCADE; diff --git a/api/prisma/migrations/migration_lock.toml b/api/prisma/migrations/migration_lock.toml new file mode 100644 index 0000000..044d57c --- /dev/null +++ b/api/prisma/migrations/migration_lock.toml @@ -0,0 +1,3 @@ +# Please do not edit this file manually +# It should be added in your version-control system (e.g., Git) +provider = "postgresql"