fix: make SMS retry side effects idempotent

This commit is contained in:
hectorzhao
2026-07-26 22:31:30 +08:00
parent 04f78695ed
commit e0f6eed0d4
11 changed files with 516 additions and 105 deletions
+28 -23
View File
@@ -318,6 +318,7 @@ model AccountTransaction {
id String @id @default(cuid())
tenantId String
transactionType String
idempotencyKey String? @unique
amountCents BigInt @default(0)
balanceAfter BigInt @default(0)
relatedType String?
@@ -1441,30 +1442,33 @@ model CmppSubmitSession {
}
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")
costUnitPrice BigInt @default(0)
costAmountCents BigInt @default(0)
errorCode String?
errorMessage String?
submittedAt DateTime?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
id String @id @default(cuid())
tenantId String?
batchTaskId String?
messageRecordId String
channelId String
sessionId String?
retryOfSubmitRecordId String? @unique
submitId String @unique
sequenceId Int?
gatewayMessageId String?
submitStatus String @default("queued")
costUnitPrice BigInt @default(0)
costAmountCents BigInt @default(0)
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])
segmentAudits SmsMessageSegmentAudit[]
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])
retryOfSubmitRecord SmsSubmitRecord? @relation("SmsSubmitRetry", fields: [retryOfSubmitRecordId], references: [id])
retrySubmit SmsSubmitRecord? @relation("SmsSubmitRetry")
segmentAudits SmsMessageSegmentAudit[]
@@index([tenantId, createdAt])
@@index([messageRecordId])
@@ -1728,6 +1732,7 @@ model CmppDownstreamDelivery {
applicationId String
messageRecordId String?
messageId String?
dedupeKey String? @unique
deliveryType String
status String @default("pending")
payload Json