fix: close sms scheduling and billing gaps
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
ALTER TABLE "SmsBatchTask" ADD COLUMN "scheduledAt" TIMESTAMP(3);
|
||||
ALTER TABLE "SmsBatchTask" ADD COLUMN "canceledAt" TIMESTAMP(3);
|
||||
CREATE INDEX "SmsBatchTask_status_scheduledAt_idx" ON "SmsBatchTask"("status", "scheduledAt");
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
ALTER TABLE "Tenant" ADD COLUMN "certificationStatus" TEXT NOT NULL DEFAULT 'approved';
|
||||
|
||||
CREATE TABLE "EnterpriseCertification" (
|
||||
"id" TEXT NOT NULL,
|
||||
"tenantId" TEXT NOT NULL,
|
||||
"companyName" TEXT NOT NULL,
|
||||
"licenseNo" TEXT,
|
||||
"contactName" TEXT,
|
||||
"contactPhone" TEXT,
|
||||
"materials" JSONB,
|
||||
"status" TEXT NOT NULL DEFAULT 'pending',
|
||||
"rejectReason" TEXT,
|
||||
"reviewerId" TEXT,
|
||||
"submittedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"reviewedAt" TIMESTAMP(3),
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
CONSTRAINT "EnterpriseCertification_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
CREATE TABLE "CmppConnectionState" (
|
||||
"id" TEXT NOT NULL,
|
||||
"tenantId" TEXT,
|
||||
"channelId" TEXT NOT NULL,
|
||||
"connectionId" TEXT NOT NULL,
|
||||
"status" TEXT NOT NULL DEFAULT 'disconnected',
|
||||
"desiredConnections" INTEGER NOT NULL DEFAULT 1,
|
||||
"currentConnections" INTEGER NOT NULL DEFAULT 0,
|
||||
"lastConnectedAt" TIMESTAMP(3),
|
||||
"lastDisconnectedAt" TIMESTAMP(3),
|
||||
"lastHeartbeatAt" TIMESTAMP(3),
|
||||
"reconnectCount" INTEGER NOT NULL DEFAULT 0,
|
||||
"lastError" TEXT,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
CONSTRAINT "CmppConnectionState_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
CREATE INDEX "EnterpriseCertification_tenantId_status_createdAt_idx" ON "EnterpriseCertification"("tenantId", "status", "createdAt");
|
||||
CREATE UNIQUE INDEX "CmppConnectionState_channelId_connectionId_key" ON "CmppConnectionState"("channelId", "connectionId");
|
||||
CREATE INDEX "CmppConnectionState_tenantId_status_idx" ON "CmppConnectionState"("tenantId", "status");
|
||||
CREATE INDEX "CmppConnectionState_channelId_status_idx" ON "CmppConnectionState"("channelId", "status");
|
||||
|
||||
ALTER TABLE "EnterpriseCertification" ADD CONSTRAINT "EnterpriseCertification_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "Tenant"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
ALTER TABLE "CmppConnectionState" ADD CONSTRAINT "CmppConnectionState_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "Tenant"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
ALTER TABLE "CmppConnectionState" ADD CONSTRAINT "CmppConnectionState_channelId_fkey" FOREIGN KEY ("channelId") REFERENCES "SmsChannel"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
@@ -11,10 +11,12 @@ model Tenant {
|
||||
name String
|
||||
code String @unique
|
||||
status String @default("active")
|
||||
certificationStatus String @default("approved")
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
users User[]
|
||||
enterpriseCertifications EnterpriseCertification[]
|
||||
operationLogs OperationLog[]
|
||||
fileObjects FileObject[]
|
||||
enterpriseBlacklists EnterpriseBlacklist[]
|
||||
@@ -35,6 +37,28 @@ model Tenant {
|
||||
smsSubmitRecords SmsSubmitRecord[]
|
||||
smsReceiptRecords SmsReceiptRecord[]
|
||||
smsUplinkMessages SmsUplinkMessage[]
|
||||
cmppConnectionStates CmppConnectionState[]
|
||||
}
|
||||
|
||||
model EnterpriseCertification {
|
||||
id String @id @default(cuid())
|
||||
tenantId String
|
||||
companyName String
|
||||
licenseNo String?
|
||||
contactName String?
|
||||
contactPhone String?
|
||||
materials Json?
|
||||
status String @default("pending")
|
||||
rejectReason String?
|
||||
reviewerId String?
|
||||
submittedAt DateTime @default(now())
|
||||
reviewedAt DateTime?
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
tenant Tenant @relation(fields: [tenantId], references: [id])
|
||||
|
||||
@@index([tenantId, status, createdAt])
|
||||
}
|
||||
|
||||
model User {
|
||||
@@ -449,10 +473,35 @@ model SmsChannel {
|
||||
submitRecords SmsSubmitRecord[]
|
||||
receiptRecords SmsReceiptRecord[]
|
||||
uplinkMessages SmsUplinkMessage[]
|
||||
connectionStates CmppConnectionState[]
|
||||
|
||||
@@index([status])
|
||||
}
|
||||
|
||||
model CmppConnectionState {
|
||||
id String @id @default(cuid())
|
||||
tenantId String?
|
||||
channelId String
|
||||
connectionId String
|
||||
status String @default("disconnected")
|
||||
desiredConnections Int @default(1)
|
||||
currentConnections Int @default(0)
|
||||
lastConnectedAt DateTime?
|
||||
lastDisconnectedAt DateTime?
|
||||
lastHeartbeatAt DateTime?
|
||||
reconnectCount Int @default(0)
|
||||
lastError String?
|
||||
updatedAt DateTime @updatedAt
|
||||
createdAt DateTime @default(now())
|
||||
|
||||
tenant Tenant? @relation(fields: [tenantId], references: [id])
|
||||
channel SmsChannel @relation(fields: [channelId], references: [id])
|
||||
|
||||
@@unique([channelId, connectionId])
|
||||
@@index([tenantId, status])
|
||||
@@index([channelId, status])
|
||||
}
|
||||
|
||||
model SmsChannelGroup {
|
||||
id String @id @default(cuid())
|
||||
code String @unique
|
||||
@@ -723,6 +772,8 @@ model SmsBatchTask {
|
||||
failedTotal Int @default(0)
|
||||
unknownTotal Int @default(0)
|
||||
timeoutTotal Int @default(0)
|
||||
scheduledAt DateTime?
|
||||
canceledAt DateTime?
|
||||
createdById String?
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
@@ -737,6 +788,7 @@ model SmsBatchTask {
|
||||
receiptRecords SmsReceiptRecord[]
|
||||
|
||||
@@index([tenantId, status, createdAt])
|
||||
@@index([status, scheduledAt])
|
||||
@@index([applicationId, createdAt])
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user