feat: strengthen risk controls and review workflows

This commit is contained in:
hectorzhao
2026-07-26 13:08:12 +08:00
parent b461532075
commit 2ce682c3fc
34 changed files with 2167 additions and 390 deletions
+31 -25
View File
@@ -74,9 +74,9 @@ model EnterpriseCertification {
model User {
id String @id @default(cuid())
tenantId String?
username String @unique
email String? @unique
phone String? @unique
username String
email String?
phone String?
displayName String
passwordHash String
status String @default("active")
@@ -384,32 +384,34 @@ model SmsBillingRecord {
}
model SmsApplication {
id String @id @default(cuid())
id String @id @default(cuid())
tenantId String
name String
scene String?
callbackUrl String?
cmppAccount String @unique
cmppAccount String @unique
cmppEnterpriseCode String
cmppApplicationExtension String?
cmppAccessNumberFillEnabled Boolean @default(false)
cmppAccessNumberFillEnabled Boolean @default(false)
cmppAccessNumberFillPrefix String?
cmppClientSrcId String? @unique
cmppClientSrcId String? @unique
secretHash String
interfaceEnabled Boolean @default(true)
interfaceType String @default("cmpp20")
cmppMaxConnections Int @default(1)
cmppWindowSize Int @default(16)
dailyLimit Int @default(100000)
customerUnitPrice BigInt @default(0)
queuePriority String @default("normal")
maxPhonesPerTask Int @default(10000)
templateMismatchMode String @default("reject")
downstreamReceiptRetryEnabled Boolean @default(true)
downstreamUplinkRetryEnabled Boolean @default(true)
status String @default("active")
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
interfaceEnabled Boolean @default(true)
interfaceType String @default("cmpp20")
cmppMaxConnections Int @default(1)
cmppWindowSize Int @default(16)
dailyLimit Int @default(100000)
customerUnitPrice BigInt @default(0)
queuePriority String @default("normal")
templateMismatchMode String @default("reject")
downstreamReceiptRetryEnabled Boolean @default(true)
downstreamUplinkRetryEnabled Boolean @default(true)
status String @default("active")
disablingAt DateTime?
autoDisableAt DateTime?
disableReason String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
tenant Tenant @relation(fields: [tenantId], references: [id])
ipAllowlist SmsApplicationIpAllowlist[]
@@ -435,8 +437,10 @@ model SmsApplication {
httpWebhookEvents HttpWebhookEvent[]
dailyUsages SmsApplicationDailyUsage[]
inboundLongMessages CmppInboundLongMessage[]
riskRules RiskRule[]
@@index([tenantId, status])
@@index([status, autoDisableAt])
}
model SmsApplicationIpAllowlist {
@@ -1213,6 +1217,7 @@ model ReportReceiptImport {
model RiskRule {
id String @id @default(cuid())
tenantId String?
applicationId String?
code String
name String
description String?
@@ -1225,11 +1230,12 @@ model RiskRule {
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
tenant Tenant? @relation(fields: [tenantId], references: [id])
hits RiskHitRecord[]
tenant Tenant? @relation(fields: [tenantId], references: [id])
application SmsApplication? @relation(fields: [applicationId], references: [id], onDelete: Cascade)
hits RiskHitRecord[]
@@unique([tenantId, code])
@@index([tenantId, status, priority])
@@unique([applicationId, code])
@@index([tenantId, applicationId, status, priority])
}
model SmsSendTask {