feat: add sms send chain phase
This commit is contained in:
@@ -29,6 +29,12 @@ model Tenant {
|
||||
riskRules RiskRule[]
|
||||
smsSendTasks SmsSendTask[]
|
||||
riskHitRecords RiskHitRecord[]
|
||||
smsBatchTasks SmsBatchTask[]
|
||||
smsMessageRecords SmsMessageRecord[]
|
||||
smsApiRequests SmsApiRequest[]
|
||||
smsSubmitRecords SmsSubmitRecord[]
|
||||
smsReceiptRecords SmsReceiptRecord[]
|
||||
smsUplinkMessages SmsUplinkMessage[]
|
||||
}
|
||||
|
||||
model User {
|
||||
@@ -47,6 +53,7 @@ model User {
|
||||
auditRecords AuditRecord[]
|
||||
createdSmsSendTasks SmsSendTask[] @relation("SmsSendTaskCreator")
|
||||
reviewedSmsSendTasks SmsSendTask[] @relation("SmsSendTaskReviewer")
|
||||
createdSmsBatchTasks SmsBatchTask[] @relation("SmsBatchTaskCreator")
|
||||
}
|
||||
|
||||
model Role {
|
||||
@@ -299,6 +306,8 @@ model SmsApplication {
|
||||
signatures SmsSignature[]
|
||||
templates SmsTemplate[]
|
||||
sendTasks SmsSendTask[]
|
||||
batchTasks SmsBatchTask[]
|
||||
messageRecords SmsMessageRecord[]
|
||||
|
||||
@@index([tenantId, status])
|
||||
}
|
||||
@@ -370,6 +379,8 @@ model SmsTemplate {
|
||||
signature SmsSignature? @relation(fields: [signatureId], references: [id])
|
||||
variables TemplateVariable[]
|
||||
sendTasks SmsSendTask[]
|
||||
batchTasks SmsBatchTask[]
|
||||
messageRecords SmsMessageRecord[]
|
||||
|
||||
@@index([tenantId, auditStatus])
|
||||
@@index([applicationId])
|
||||
@@ -433,6 +444,11 @@ model SmsChannel {
|
||||
reportFields ChannelReportField[]
|
||||
reportTasks ChannelSignatureReportTask[]
|
||||
reportRecords ChannelSignatureReportRecord[]
|
||||
messageRecords SmsMessageRecord[]
|
||||
submitSessions CmppSubmitSession[]
|
||||
submitRecords SmsSubmitRecord[]
|
||||
receiptRecords SmsReceiptRecord[]
|
||||
uplinkMessages SmsUplinkMessage[]
|
||||
|
||||
@@index([status])
|
||||
}
|
||||
@@ -685,3 +701,189 @@ model RiskHitRecord {
|
||||
@@index([taskId])
|
||||
@@index([ruleCode])
|
||||
}
|
||||
|
||||
model SmsBatchTask {
|
||||
id String @id @default(cuid())
|
||||
tenantId String
|
||||
applicationId String?
|
||||
templateId String?
|
||||
taskNo String @unique
|
||||
sourceType String @default("client")
|
||||
content String
|
||||
category String?
|
||||
phoneTotal Int
|
||||
status String @default("created")
|
||||
riskTaskId String?
|
||||
auditStatus String @default("approved")
|
||||
reviewReason String?
|
||||
rejectReason String?
|
||||
progressTotal Int @default(0)
|
||||
submittedTotal Int @default(0)
|
||||
successTotal Int @default(0)
|
||||
failedTotal Int @default(0)
|
||||
unknownTotal Int @default(0)
|
||||
timeoutTotal Int @default(0)
|
||||
createdById String?
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
tenant Tenant @relation(fields: [tenantId], references: [id])
|
||||
application SmsApplication? @relation(fields: [applicationId], references: [id])
|
||||
template SmsTemplate? @relation(fields: [templateId], references: [id])
|
||||
createdBy User? @relation("SmsBatchTaskCreator", fields: [createdById], references: [id])
|
||||
apiRequests SmsApiRequest[]
|
||||
messages SmsMessageRecord[]
|
||||
submitRecords SmsSubmitRecord[]
|
||||
receiptRecords SmsReceiptRecord[]
|
||||
|
||||
@@index([tenantId, status, createdAt])
|
||||
@@index([applicationId, createdAt])
|
||||
}
|
||||
|
||||
model SmsApiRequest {
|
||||
id String @id @default(cuid())
|
||||
tenantId String
|
||||
batchTaskId String
|
||||
requestId String @unique
|
||||
sourceIp String?
|
||||
userAgent String?
|
||||
payloadSummary Json?
|
||||
status String @default("accepted")
|
||||
createdAt DateTime @default(now())
|
||||
|
||||
tenant Tenant @relation(fields: [tenantId], references: [id])
|
||||
batchTask SmsBatchTask @relation(fields: [batchTaskId], references: [id], onDelete: Cascade)
|
||||
|
||||
@@index([tenantId, createdAt])
|
||||
@@index([batchTaskId])
|
||||
}
|
||||
|
||||
model SmsMessageRecord {
|
||||
id String @id @default(cuid())
|
||||
tenantId String
|
||||
batchTaskId String
|
||||
applicationId String?
|
||||
templateId String?
|
||||
messageId String @unique
|
||||
phoneNumber String
|
||||
content String
|
||||
billingUnits Int @default(1)
|
||||
unitPrice Int @default(0)
|
||||
amountCents Int @default(0)
|
||||
channelId String?
|
||||
submitId String?
|
||||
gatewayMessageId String?
|
||||
status String @default("queued")
|
||||
submitStatus String?
|
||||
receiptStatus String?
|
||||
errorCode String?
|
||||
errorMessage String?
|
||||
queuedAt DateTime @default(now())
|
||||
submittedAt DateTime?
|
||||
deliveredAt DateTime?
|
||||
timeoutAt DateTime?
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
tenant Tenant @relation(fields: [tenantId], references: [id])
|
||||
batchTask SmsBatchTask @relation(fields: [batchTaskId], references: [id], onDelete: Cascade)
|
||||
application SmsApplication? @relation(fields: [applicationId], references: [id])
|
||||
template SmsTemplate? @relation(fields: [templateId], references: [id])
|
||||
channel SmsChannel? @relation(fields: [channelId], references: [id])
|
||||
submitRecords SmsSubmitRecord[]
|
||||
receiptRecords SmsReceiptRecord[]
|
||||
|
||||
@@index([tenantId, status, queuedAt])
|
||||
@@index([batchTaskId, status])
|
||||
@@index([phoneNumber])
|
||||
@@index([gatewayMessageId])
|
||||
}
|
||||
|
||||
model CmppSubmitSession {
|
||||
id String @id @default(cuid())
|
||||
channelId String
|
||||
sessionNo String @unique
|
||||
status String @default("open")
|
||||
submitTotal Int @default(0)
|
||||
acceptedTotal Int @default(0)
|
||||
rejectedTotal Int @default(0)
|
||||
startedAt DateTime @default(now())
|
||||
endedAt DateTime?
|
||||
|
||||
channel SmsChannel @relation(fields: [channelId], references: [id])
|
||||
submitRecords SmsSubmitRecord[]
|
||||
|
||||
@@index([channelId, status])
|
||||
}
|
||||
|
||||
model SmsSubmitRecord {
|
||||
id String @id @default(cuid())
|
||||
tenantId String
|
||||
batchTaskId String
|
||||
messageRecordId String
|
||||
channelId String
|
||||
sessionId String?
|
||||
submitId String @unique
|
||||
sequenceId Int?
|
||||
gatewayMessageId String?
|
||||
submitStatus String @default("queued")
|
||||
errorCode String?
|
||||
errorMessage String?
|
||||
submittedAt DateTime?
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
tenant Tenant @relation(fields: [tenantId], references: [id])
|
||||
batchTask SmsBatchTask @relation(fields: [batchTaskId], references: [id], onDelete: Cascade)
|
||||
messageRecord SmsMessageRecord @relation(fields: [messageRecordId], references: [id], onDelete: Cascade)
|
||||
channel SmsChannel @relation(fields: [channelId], references: [id])
|
||||
session CmppSubmitSession? @relation(fields: [sessionId], references: [id])
|
||||
|
||||
@@index([tenantId, createdAt])
|
||||
@@index([messageRecordId])
|
||||
@@index([gatewayMessageId])
|
||||
}
|
||||
|
||||
model SmsReceiptRecord {
|
||||
id String @id @default(cuid())
|
||||
tenantId String
|
||||
batchTaskId String?
|
||||
messageRecordId String?
|
||||
channelId String?
|
||||
messageId String
|
||||
gatewayMessageId String
|
||||
sequenceId Int?
|
||||
receiptStatus String
|
||||
rawStatus String
|
||||
errorCode String?
|
||||
deliveredAt DateTime
|
||||
createdAt DateTime @default(now())
|
||||
|
||||
tenant Tenant @relation(fields: [tenantId], references: [id])
|
||||
batchTask SmsBatchTask? @relation(fields: [batchTaskId], references: [id])
|
||||
messageRecord SmsMessageRecord? @relation(fields: [messageRecordId], references: [id])
|
||||
channel SmsChannel? @relation(fields: [channelId], references: [id])
|
||||
|
||||
@@index([tenantId, createdAt])
|
||||
@@index([messageId])
|
||||
@@index([gatewayMessageId])
|
||||
}
|
||||
|
||||
model SmsUplinkMessage {
|
||||
id String @id @default(cuid())
|
||||
tenantId String?
|
||||
channelId String
|
||||
messageId String?
|
||||
sequenceId Int?
|
||||
phoneNumber String
|
||||
destId String
|
||||
content String
|
||||
receivedAt DateTime
|
||||
createdAt DateTime @default(now())
|
||||
|
||||
tenant Tenant? @relation(fields: [tenantId], references: [id])
|
||||
channel SmsChannel @relation(fields: [channelId], references: [id])
|
||||
|
||||
@@index([tenantId, createdAt])
|
||||
@@index([channelId, receivedAt])
|
||||
@@index([phoneNumber])
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user