846 lines
30 KiB
Plaintext
846 lines
30 KiB
Plaintext
generator client {
|
||
provider = "prisma-client-js"
|
||
}
|
||
|
||
datasource db {
|
||
provider = "postgresql"
|
||
url = env("DATABASE_URL")
|
||
}
|
||
|
||
// =============================================================================
|
||
// 管理员模块
|
||
// =============================================================================
|
||
|
||
model AdminUser {
|
||
id String @id @default(uuid())
|
||
username String @unique
|
||
password String // bcrypt hashed
|
||
name String
|
||
role String // SUPER_ADMIN, ADMIN, OPERATOR
|
||
status String @default("ACTIVE") // ACTIVE, DISABLED
|
||
lastLoginAt DateTime?
|
||
createdAt DateTime @default(now())
|
||
updatedAt DateTime @updatedAt
|
||
|
||
auditLogs AuditLog[]
|
||
|
||
@@map("admin_users")
|
||
}
|
||
|
||
// =============================================================================
|
||
// 系统配置
|
||
// =============================================================================
|
||
|
||
model SystemConfig {
|
||
id String @id @default(uuid())
|
||
category String // MINING, TRADING, CONTRIBUTION, SYSTEM
|
||
key String
|
||
value String
|
||
description String?
|
||
isPublic Boolean @default(false)
|
||
createdAt DateTime @default(now())
|
||
updatedAt DateTime @updatedAt
|
||
|
||
@@unique([category, key])
|
||
@@map("system_configs")
|
||
}
|
||
|
||
// =============================================================================
|
||
// 系统账户(运营/省/市)
|
||
// =============================================================================
|
||
|
||
model SystemAccount {
|
||
id String @id @default(uuid())
|
||
accountType String @unique // OPERATION, PROVINCE, CITY, HEADQUARTERS
|
||
name String
|
||
description String?
|
||
totalContribution Decimal @db.Decimal(30, 8) @default(0)
|
||
createdAt DateTime @default(now())
|
||
updatedAt DateTime @updatedAt
|
||
|
||
@@map("system_accounts")
|
||
}
|
||
|
||
// =============================================================================
|
||
// 初始化记录
|
||
// =============================================================================
|
||
|
||
model InitializationRecord {
|
||
id String @id @default(uuid())
|
||
type String // MINING_CONFIG, BLACK_HOLE, SYSTEM_ACCOUNTS, ACTIVATE_MINING
|
||
status String // PENDING, COMPLETED, FAILED
|
||
config Json
|
||
executedBy String
|
||
executedAt DateTime?
|
||
errorMessage String?
|
||
createdAt DateTime @default(now())
|
||
|
||
@@map("initialization_records")
|
||
}
|
||
|
||
// =============================================================================
|
||
// 审计日志
|
||
// =============================================================================
|
||
|
||
model AuditLog {
|
||
id String @id @default(uuid())
|
||
adminId String
|
||
action String // CREATE, UPDATE, DELETE, LOGIN, LOGOUT, INIT
|
||
resource String // CONFIG, USER, SYSTEM_ACCOUNT, MINING
|
||
resourceId String?
|
||
oldValue Json?
|
||
newValue Json?
|
||
ipAddress String?
|
||
userAgent String?
|
||
createdAt DateTime @default(now())
|
||
|
||
admin AdminUser @relation(fields: [adminId], references: [id])
|
||
|
||
@@index([adminId])
|
||
@@index([action])
|
||
@@index([resource])
|
||
@@index([createdAt(sort: Desc)])
|
||
@@map("audit_logs")
|
||
}
|
||
|
||
// =============================================================================
|
||
// 报表快照
|
||
// =============================================================================
|
||
|
||
model DailyReport {
|
||
id String @id @default(uuid())
|
||
reportDate DateTime @unique @db.Date
|
||
|
||
// 用户统计
|
||
totalUsers Int @default(0)
|
||
newUsers Int @default(0)
|
||
activeUsers Int @default(0)
|
||
|
||
// 认种统计
|
||
totalAdoptions Int @default(0)
|
||
newAdoptions Int @default(0)
|
||
totalTrees Int @default(0)
|
||
|
||
// 算力统计
|
||
totalContribution Decimal @db.Decimal(30, 8) @default(0)
|
||
contributionGrowth Decimal @db.Decimal(30, 8) @default(0)
|
||
|
||
// 挖矿统计
|
||
totalDistributed Decimal @db.Decimal(30, 8) @default(0)
|
||
totalBurned Decimal @db.Decimal(30, 8) @default(0)
|
||
|
||
// 交易统计
|
||
tradingVolume Decimal @db.Decimal(30, 8) @default(0)
|
||
tradingAmount Decimal @db.Decimal(30, 8) @default(0)
|
||
tradeCount Int @default(0)
|
||
|
||
// 价格
|
||
openPrice Decimal @db.Decimal(30, 18) @default(1)
|
||
closePrice Decimal @db.Decimal(30, 18) @default(1)
|
||
highPrice Decimal @db.Decimal(30, 18) @default(1)
|
||
lowPrice Decimal @db.Decimal(30, 18) @default(1)
|
||
|
||
createdAt DateTime @default(now())
|
||
|
||
@@map("daily_reports")
|
||
}
|
||
|
||
// =============================================================================
|
||
// CDC 同步表 - 用户数据 (from auth-service)
|
||
// =============================================================================
|
||
|
||
model SyncedUser {
|
||
id String @id @default(uuid())
|
||
originalUserId String @unique // auth-service 中的原始 ID
|
||
accountSequence String @unique // 账户序列号
|
||
phone String
|
||
nickname String? // 昵称 (from identity-service)
|
||
status String // ACTIVE, DISABLED, DELETED
|
||
kycStatus String // PENDING, SUBMITTED, VERIFIED, REJECTED
|
||
realName String?
|
||
isLegacyUser Boolean @default(false) // 是否为 1.0 迁移用户
|
||
createdAt DateTime
|
||
syncedAt DateTime @default(now())
|
||
updatedAt DateTime @updatedAt
|
||
|
||
// 关联同步表
|
||
contributionAccount SyncedContributionAccount?
|
||
miningAccount SyncedMiningAccount?
|
||
tradingAccount SyncedTradingAccount?
|
||
referral SyncedReferral?
|
||
|
||
@@index([phone])
|
||
@@index([status])
|
||
@@index([kycStatus])
|
||
@@index([createdAt(sort: Desc)])
|
||
@@map("synced_users")
|
||
}
|
||
|
||
// =============================================================================
|
||
// CDC 同步表 - 算力账户 (from contribution-service)
|
||
// =============================================================================
|
||
|
||
model SyncedContributionAccount {
|
||
id String @id @default(uuid())
|
||
accountSequence String @unique
|
||
personalContribution Decimal @db.Decimal(30, 8) @default(0)
|
||
teamLevelContribution Decimal @db.Decimal(30, 8) @default(0)
|
||
teamBonusContribution Decimal @db.Decimal(30, 8) @default(0)
|
||
totalContribution Decimal @db.Decimal(30, 8) @default(0)
|
||
effectiveContribution Decimal @db.Decimal(30, 8) @default(0)
|
||
hasAdopted Boolean @default(false)
|
||
directReferralCount Int @default(0)
|
||
unlockedLevelDepth Int @default(0)
|
||
unlockedBonusTiers Int @default(0)
|
||
syncedAt DateTime @default(now())
|
||
updatedAt DateTime @updatedAt
|
||
|
||
user SyncedUser @relation(fields: [accountSequence], references: [accountSequence])
|
||
|
||
@@map("synced_contribution_accounts")
|
||
}
|
||
|
||
// =============================================================================
|
||
// CDC 同步表 - 推荐关系 (from contribution-service)
|
||
// =============================================================================
|
||
|
||
model SyncedReferral {
|
||
id String @id @default(uuid())
|
||
accountSequence String @unique
|
||
referrerAccountSequence String? // 推荐人账户序列号
|
||
referrerUserId BigInt? // 1.0 的 referrer_id
|
||
originalUserId BigInt? // 1.0 的 user_id
|
||
ancestorPath String? @db.Text // 祖先路径(逗号分隔的 user_id)
|
||
depth Int @default(0)
|
||
syncedAt DateTime @default(now())
|
||
updatedAt DateTime @updatedAt
|
||
|
||
user SyncedUser @relation(fields: [accountSequence], references: [accountSequence])
|
||
|
||
@@index([referrerAccountSequence])
|
||
@@index([depth])
|
||
@@map("synced_referrals")
|
||
}
|
||
|
||
// =============================================================================
|
||
// CDC 同步表 - 认种记录 (from contribution-service)
|
||
// =============================================================================
|
||
|
||
model SyncedAdoption {
|
||
id String @id @default(uuid())
|
||
originalAdoptionId BigInt @unique
|
||
accountSequence String
|
||
treeCount Int
|
||
adoptionDate DateTime @db.Date
|
||
status String? // 认种状态
|
||
contributionPerTree Decimal @db.Decimal(20, 10)
|
||
syncedAt DateTime @default(now())
|
||
updatedAt DateTime @updatedAt
|
||
|
||
@@index([accountSequence])
|
||
@@index([adoptionDate])
|
||
@@map("synced_adoptions")
|
||
}
|
||
|
||
// =============================================================================
|
||
// CDC 同步表 - 算力记录明细 (from contribution-service)
|
||
// =============================================================================
|
||
|
||
model SyncedContributionRecord {
|
||
id String @id @default(uuid())
|
||
originalRecordId BigInt @unique // contribution-service 中的原始 ID
|
||
accountSequence String // 获得算力的账户
|
||
|
||
// 来源信息
|
||
sourceType String // PERSONAL / TEAM_LEVEL / TEAM_BONUS
|
||
sourceAdoptionId BigInt // 来源认种ID
|
||
sourceAccountSequence String // 认种人账号
|
||
|
||
// 计算参数
|
||
treeCount Int // 认种棵数
|
||
baseContribution Decimal @db.Decimal(20, 10) // 基础贡献值/棵
|
||
distributionRate Decimal @db.Decimal(10, 6) // 分配比例
|
||
levelDepth Int? // 层级深度 (1-15)
|
||
bonusTier Int? // 加成档位 (1-3)
|
||
|
||
// 金额
|
||
amount Decimal @db.Decimal(30, 10) // 算力金额
|
||
|
||
// 有效期
|
||
effectiveDate DateTime @db.Date // 生效日期
|
||
expireDate DateTime @db.Date // 过期日期
|
||
isExpired Boolean @default(false)
|
||
|
||
syncedAt DateTime @default(now())
|
||
updatedAt DateTime @updatedAt
|
||
createdAt DateTime // 原始记录创建时间
|
||
|
||
@@index([accountSequence])
|
||
@@index([sourceAccountSequence])
|
||
@@index([sourceAdoptionId])
|
||
@@index([sourceType])
|
||
@@index([createdAt(sort: Desc)])
|
||
@@map("synced_contribution_records")
|
||
}
|
||
|
||
// =============================================================================
|
||
// CDC 同步表 - 全网算力进度 (from contribution-service)
|
||
// =============================================================================
|
||
|
||
model SyncedNetworkProgress {
|
||
id String @id @default(uuid())
|
||
totalTreeCount Int @default(0) // 全网累计认种棵数
|
||
totalAdoptionOrders Int @default(0) // 全网累计认种订单数
|
||
totalAdoptedUsers Int @default(0) // 全网累计认种用户数
|
||
currentUnit Int @default(0) // 当前单位数
|
||
currentMultiplier Decimal @db.Decimal(10, 6) @default(1.0) // 当前系数
|
||
currentContributionPerTree Decimal @db.Decimal(20, 10) @default(22617) // 当前每棵树贡献值
|
||
nextUnitTreeCount Int @default(1000) // 下一个单位触发的棵数
|
||
syncedAt DateTime @default(now())
|
||
updatedAt DateTime @updatedAt
|
||
|
||
@@map("synced_network_progress")
|
||
}
|
||
|
||
// =============================================================================
|
||
// CDC 同步表 - 挖矿账户 (from mining-service)
|
||
// =============================================================================
|
||
|
||
model SyncedMiningAccount {
|
||
id String @id @default(uuid())
|
||
accountSequence String @unique
|
||
totalMined Decimal @db.Decimal(30, 8) @default(0)
|
||
availableBalance Decimal @db.Decimal(30, 8) @default(0)
|
||
frozenBalance Decimal @db.Decimal(30, 8) @default(0)
|
||
totalContribution Decimal @db.Decimal(30, 8) @default(0)
|
||
syncedAt DateTime @default(now())
|
||
updatedAt DateTime @updatedAt
|
||
|
||
user SyncedUser @relation(fields: [accountSequence], references: [accountSequence])
|
||
|
||
@@map("synced_mining_accounts")
|
||
}
|
||
|
||
// =============================================================================
|
||
// CDC 同步表 - 交易账户 (from trading-service)
|
||
// =============================================================================
|
||
|
||
model SyncedTradingAccount {
|
||
id String @id @default(uuid())
|
||
accountSequence String @unique
|
||
shareBalance Decimal @db.Decimal(30, 8) @default(0)
|
||
cashBalance Decimal @db.Decimal(30, 8) @default(0)
|
||
frozenShares Decimal @db.Decimal(30, 8) @default(0)
|
||
frozenCash Decimal @db.Decimal(30, 8) @default(0)
|
||
totalBought Decimal @db.Decimal(30, 8) @default(0)
|
||
totalSold Decimal @db.Decimal(30, 8) @default(0)
|
||
syncedAt DateTime @default(now())
|
||
updatedAt DateTime @updatedAt
|
||
|
||
user SyncedUser @relation(fields: [accountSequence], references: [accountSequence])
|
||
|
||
@@map("synced_trading_accounts")
|
||
}
|
||
|
||
// =============================================================================
|
||
// CDC 同步表 - 挖矿配置 (from mining-service)
|
||
// =============================================================================
|
||
|
||
model SyncedMiningConfig {
|
||
id String @id @default(uuid())
|
||
totalShares Decimal @db.Decimal(30, 8)
|
||
distributionPool Decimal @db.Decimal(30, 8)
|
||
remainingDistribution Decimal @db.Decimal(30, 8)
|
||
halvingPeriodYears Int
|
||
currentEra Int @default(1)
|
||
minuteDistribution Decimal @db.Decimal(30, 8)
|
||
isActive Boolean @default(false)
|
||
activatedAt DateTime?
|
||
syncedAt DateTime @default(now())
|
||
updatedAt DateTime @updatedAt
|
||
|
||
@@map("synced_mining_configs")
|
||
}
|
||
|
||
// =============================================================================
|
||
// CDC 同步表 - 每日挖矿统计 (from mining-service)
|
||
// =============================================================================
|
||
|
||
model SyncedDailyMiningStat {
|
||
id String @id @default(uuid())
|
||
statDate DateTime @unique @db.Date
|
||
totalContribution Decimal @db.Decimal(30, 8) @default(0)
|
||
totalDistributed Decimal @db.Decimal(30, 8) @default(0)
|
||
totalBurned Decimal @db.Decimal(30, 8) @default(0)
|
||
participantCount Int @default(0)
|
||
avgContributionRate Decimal @db.Decimal(30, 18) @default(0)
|
||
syncedAt DateTime @default(now())
|
||
updatedAt DateTime @updatedAt
|
||
|
||
@@map("synced_daily_mining_stats")
|
||
}
|
||
|
||
// =============================================================================
|
||
// CDC 同步表 - 日K线 (from trading-service)
|
||
// =============================================================================
|
||
|
||
model SyncedDayKLine {
|
||
id String @id @default(uuid())
|
||
klineDate DateTime @unique @db.Date
|
||
open Decimal @db.Decimal(30, 18)
|
||
high Decimal @db.Decimal(30, 18)
|
||
low Decimal @db.Decimal(30, 18)
|
||
close Decimal @db.Decimal(30, 18)
|
||
volume Decimal @db.Decimal(30, 8) @default(0)
|
||
amount Decimal @db.Decimal(30, 8) @default(0)
|
||
tradeCount Int @default(0)
|
||
syncedAt DateTime @default(now())
|
||
updatedAt DateTime @updatedAt
|
||
|
||
@@map("synced_day_klines")
|
||
}
|
||
|
||
// =============================================================================
|
||
// CDC 同步表 - 流通池 (from trading-service)
|
||
// =============================================================================
|
||
|
||
model SyncedCirculationPool {
|
||
id String @id @default(uuid())
|
||
totalShares Decimal @db.Decimal(30, 8) @default(0)
|
||
totalCash Decimal @db.Decimal(30, 8) @default(0)
|
||
syncedAt DateTime @default(now())
|
||
updatedAt DateTime @updatedAt
|
||
|
||
@@map("synced_circulation_pools")
|
||
}
|
||
|
||
// =============================================================================
|
||
// CDC 同步表 - 系统账户算力 (from contribution-service)
|
||
// =============================================================================
|
||
|
||
model SyncedSystemContribution {
|
||
id String @id @default(uuid())
|
||
accountType String @unique // OPERATION, PROVINCE, CITY, HEADQUARTERS
|
||
name String
|
||
contributionBalance Decimal @db.Decimal(30, 8) @default(0)
|
||
contributionNeverExpires Boolean @default(false)
|
||
syncedAt DateTime @default(now())
|
||
updatedAt DateTime @updatedAt
|
||
|
||
@@map("synced_system_contributions")
|
||
}
|
||
|
||
// =============================================================================
|
||
// CDC 同步进度跟踪
|
||
// =============================================================================
|
||
|
||
model CdcSyncProgress {
|
||
id String @id @default(uuid())
|
||
sourceTopic String @unique
|
||
sourceService String // auth, contribution, mining, trading
|
||
lastOffset String? // Kafka offset
|
||
lastSequenceNum BigInt @default(0)
|
||
lastSyncedAt DateTime @default(now())
|
||
errorCount Int @default(0)
|
||
lastError String?
|
||
updatedAt DateTime @updatedAt
|
||
|
||
@@index([sourceService])
|
||
@@map("cdc_sync_progress")
|
||
}
|
||
|
||
// =============================================================================
|
||
// 已处理事件(幂等性)
|
||
// =============================================================================
|
||
|
||
model ProcessedEvent {
|
||
id String @id @default(uuid())
|
||
eventId String @unique
|
||
eventType String
|
||
sourceService String
|
||
processedAt DateTime @default(now())
|
||
|
||
@@index([sourceService])
|
||
@@index([processedAt])
|
||
@@map("processed_events")
|
||
}
|
||
|
||
// =============================================================================
|
||
// CDC 同步表 - 区域数据 (from mining-wallet-service)
|
||
// =============================================================================
|
||
|
||
model SyncedProvince {
|
||
id String @id @default(uuid())
|
||
originalId String @unique @map("original_id")
|
||
code String @unique
|
||
name String
|
||
status String @default("ACTIVE")
|
||
syncedAt DateTime @default(now())
|
||
updatedAt DateTime @updatedAt
|
||
|
||
cities SyncedCity[]
|
||
|
||
@@index([code])
|
||
@@map("synced_provinces")
|
||
}
|
||
|
||
model SyncedCity {
|
||
id String @id @default(uuid())
|
||
originalId String @unique @map("original_id")
|
||
provinceId String @map("province_id")
|
||
code String @unique
|
||
name String
|
||
status String @default("ACTIVE")
|
||
syncedAt DateTime @default(now())
|
||
updatedAt DateTime @updatedAt
|
||
|
||
province SyncedProvince @relation(fields: [provinceId], references: [originalId])
|
||
userMappings SyncedUserRegionMapping[]
|
||
|
||
@@index([provinceId])
|
||
@@index([code])
|
||
@@map("synced_cities")
|
||
}
|
||
|
||
model SyncedUserRegionMapping {
|
||
id String @id @default(uuid())
|
||
accountSequence String @unique @map("account_sequence")
|
||
cityId String @map("city_id")
|
||
assignedAt DateTime @map("assigned_at")
|
||
assignedBy String? @map("assigned_by")
|
||
syncedAt DateTime @default(now())
|
||
updatedAt DateTime @updatedAt
|
||
|
||
city SyncedCity @relation(fields: [cityId], references: [originalId])
|
||
|
||
@@index([cityId])
|
||
@@map("synced_user_region_mappings")
|
||
}
|
||
|
||
// =============================================================================
|
||
// CDC 同步表 - 钱包系统账户 (from mining-wallet-service)
|
||
// =============================================================================
|
||
|
||
model SyncedWalletSystemAccount {
|
||
id String @id @default(uuid())
|
||
originalId String @unique @map("original_id")
|
||
accountType String @map("account_type") // HEADQUARTERS, OPERATION, PROVINCE, CITY, FEE, HOT_WALLET, COLD_WALLET
|
||
name String
|
||
code String @unique
|
||
|
||
// 关联区域
|
||
provinceId String? @map("province_id")
|
||
cityId String? @map("city_id")
|
||
|
||
// 余额信息
|
||
shareBalance Decimal @default(0) @map("share_balance") @db.Decimal(30, 8)
|
||
usdtBalance Decimal @default(0) @map("usdt_balance") @db.Decimal(30, 8)
|
||
greenPointBalance Decimal @default(0) @map("green_point_balance") @db.Decimal(30, 8)
|
||
frozenShare Decimal @default(0) @map("frozen_share") @db.Decimal(30, 8)
|
||
frozenUsdt Decimal @default(0) @map("frozen_usdt") @db.Decimal(30, 8)
|
||
|
||
// 累计统计
|
||
totalInflow Decimal @default(0) @map("total_inflow") @db.Decimal(30, 8)
|
||
totalOutflow Decimal @default(0) @map("total_outflow") @db.Decimal(30, 8)
|
||
|
||
// 链上地址
|
||
blockchainAddress String? @map("blockchain_address")
|
||
|
||
isActive Boolean @default(true) @map("is_active")
|
||
syncedAt DateTime @default(now())
|
||
updatedAt DateTime @updatedAt
|
||
|
||
@@index([accountType])
|
||
@@index([provinceId])
|
||
@@index([cityId])
|
||
@@map("synced_wallet_system_accounts")
|
||
}
|
||
|
||
// =============================================================================
|
||
// CDC 同步表 - 池账户 (from mining-wallet-service)
|
||
// =============================================================================
|
||
|
||
model SyncedWalletPoolAccount {
|
||
id String @id @default(uuid())
|
||
originalId String @unique @map("original_id")
|
||
poolType String @unique @map("pool_type") // SHARE_POOL, BLACK_HOLE_POOL, CIRCULATION_POOL
|
||
name String
|
||
|
||
// 余额信息
|
||
balance Decimal @default(0) @db.Decimal(30, 8)
|
||
totalInflow Decimal @default(0) @map("total_inflow") @db.Decimal(30, 8)
|
||
totalOutflow Decimal @default(0) @map("total_outflow") @db.Decimal(30, 8)
|
||
|
||
// 黑洞池特有字段
|
||
targetBurn Decimal? @map("target_burn") @db.Decimal(30, 8)
|
||
remainingBurn Decimal? @map("remaining_burn") @db.Decimal(30, 8)
|
||
|
||
isActive Boolean @default(true) @map("is_active")
|
||
syncedAt DateTime @default(now())
|
||
updatedAt DateTime @updatedAt
|
||
|
||
@@index([poolType])
|
||
@@map("synced_wallet_pool_accounts")
|
||
}
|
||
|
||
// =============================================================================
|
||
// CDC 同步表 - 用户钱包 (from mining-wallet-service)
|
||
// =============================================================================
|
||
|
||
model SyncedUserWallet {
|
||
id String @id @default(uuid())
|
||
originalId String @unique @map("original_id")
|
||
accountSequence String @map("account_sequence")
|
||
walletType String @map("wallet_type") // CONTRIBUTION, TOKEN_STORAGE, GREEN_POINTS
|
||
|
||
// 余额信息
|
||
balance Decimal @default(0) @db.Decimal(30, 8)
|
||
frozenBalance Decimal @default(0) @map("frozen_balance") @db.Decimal(30, 8)
|
||
|
||
// 累计统计
|
||
totalInflow Decimal @default(0) @map("total_inflow") @db.Decimal(30, 8)
|
||
totalOutflow Decimal @default(0) @map("total_outflow") @db.Decimal(30, 8)
|
||
|
||
isActive Boolean @default(true) @map("is_active")
|
||
syncedAt DateTime @default(now())
|
||
updatedAt DateTime @updatedAt
|
||
|
||
@@unique([accountSequence, walletType])
|
||
@@index([accountSequence])
|
||
@@index([walletType])
|
||
@@map("synced_user_wallets")
|
||
}
|
||
|
||
// =============================================================================
|
||
// CDC 同步表 - 提现请求 (from mining-wallet-service)
|
||
// =============================================================================
|
||
|
||
model SyncedWithdrawRequest {
|
||
id String @id @default(uuid())
|
||
originalId String @unique @map("original_id")
|
||
requestNo String @unique @map("request_no")
|
||
accountSequence String @map("account_sequence")
|
||
|
||
// 提现信息
|
||
assetType String @map("asset_type")
|
||
amount Decimal @db.Decimal(30, 8)
|
||
fee Decimal @default(0) @db.Decimal(30, 8)
|
||
netAmount Decimal @map("net_amount") @db.Decimal(30, 8)
|
||
|
||
// 目标地址
|
||
toAddress String @map("to_address")
|
||
|
||
// 状态
|
||
status String // PENDING, PROCESSING, CONFIRMING, COMPLETED, FAILED, CANCELLED
|
||
|
||
// 链上信息
|
||
txHash String? @map("tx_hash")
|
||
blockNumber BigInt? @map("block_number")
|
||
confirmations Int @default(0)
|
||
|
||
// 错误信息
|
||
errorMessage String? @map("error_message")
|
||
|
||
// 审核信息
|
||
approvedBy String? @map("approved_by")
|
||
approvedAt DateTime? @map("approved_at")
|
||
|
||
createdAt DateTime @map("created_at")
|
||
completedAt DateTime? @map("completed_at")
|
||
syncedAt DateTime @default(now())
|
||
updatedAt DateTime @updatedAt
|
||
|
||
@@index([accountSequence])
|
||
@@index([status])
|
||
@@index([txHash])
|
||
@@index([createdAt(sort: Desc)])
|
||
@@map("synced_withdraw_requests")
|
||
}
|
||
|
||
// =============================================================================
|
||
// CDC 同步表 - 充值记录 (from mining-wallet-service)
|
||
// =============================================================================
|
||
|
||
model SyncedDepositRecord {
|
||
id String @id @default(uuid())
|
||
originalId String @unique @map("original_id")
|
||
txHash String @unique @map("tx_hash")
|
||
|
||
// 来源信息
|
||
fromAddress String @map("from_address")
|
||
toAddress String @map("to_address")
|
||
|
||
// 充值信息
|
||
assetType String @map("asset_type")
|
||
amount Decimal @db.Decimal(30, 8)
|
||
|
||
// 链上信息
|
||
blockNumber BigInt @map("block_number")
|
||
confirmations Int @default(0)
|
||
|
||
// 匹配的用户
|
||
matchedAccountSeq String? @map("matched_account_seq")
|
||
isProcessed Boolean @default(false) @map("is_processed")
|
||
processedAt DateTime? @map("processed_at")
|
||
|
||
createdAt DateTime @map("created_at")
|
||
syncedAt DateTime @default(now())
|
||
updatedAt DateTime @updatedAt
|
||
|
||
@@index([fromAddress])
|
||
@@index([toAddress])
|
||
@@index([matchedAccountSeq])
|
||
@@index([isProcessed])
|
||
@@map("synced_deposit_records")
|
||
}
|
||
|
||
// =============================================================================
|
||
// CDC 同步表 - DEX Swap 记录 (from mining-wallet-service)
|
||
// =============================================================================
|
||
|
||
model SyncedDexSwapRecord {
|
||
id String @id @default(uuid())
|
||
originalId String @unique @map("original_id")
|
||
swapNo String @unique @map("swap_no")
|
||
accountSequence String @map("account_sequence")
|
||
|
||
// Swap 信息
|
||
fromAsset String @map("from_asset")
|
||
toAsset String @map("to_asset")
|
||
fromAmount Decimal @map("from_amount") @db.Decimal(30, 8)
|
||
toAmount Decimal @map("to_amount") @db.Decimal(30, 8)
|
||
exchangeRate Decimal @map("exchange_rate") @db.Decimal(30, 18)
|
||
|
||
// 滑点/手续费
|
||
slippage Decimal @default(0) @db.Decimal(10, 4)
|
||
fee Decimal @default(0) @db.Decimal(30, 8)
|
||
|
||
// 状态
|
||
status String // PENDING, PROCESSING, CONFIRMING, COMPLETED, FAILED, CANCELLED
|
||
|
||
// 链上信息
|
||
txHash String? @map("tx_hash")
|
||
blockNumber BigInt? @map("block_number")
|
||
|
||
errorMessage String? @map("error_message")
|
||
|
||
createdAt DateTime @map("created_at")
|
||
completedAt DateTime? @map("completed_at")
|
||
syncedAt DateTime @default(now())
|
||
updatedAt DateTime @updatedAt
|
||
|
||
@@index([accountSequence])
|
||
@@index([status])
|
||
@@index([txHash])
|
||
@@map("synced_dex_swap_records")
|
||
}
|
||
|
||
// =============================================================================
|
||
// CDC 同步表 - 区块链地址绑定 (from mining-wallet-service)
|
||
// =============================================================================
|
||
|
||
model SyncedBlockchainAddressBinding {
|
||
id String @id @default(uuid())
|
||
originalId String @unique @map("original_id")
|
||
accountSequence String @unique @map("account_sequence")
|
||
|
||
// KAVA 地址
|
||
kavaAddress String @unique @map("kava_address")
|
||
|
||
// 验证信息
|
||
isVerified Boolean @default(false) @map("is_verified")
|
||
verifiedAt DateTime? @map("verified_at")
|
||
verificationTxHash String? @map("verification_tx_hash")
|
||
|
||
createdAt DateTime @map("created_at")
|
||
syncedAt DateTime @default(now())
|
||
updatedAt DateTime @updatedAt
|
||
|
||
@@index([kavaAddress])
|
||
@@map("synced_blockchain_address_bindings")
|
||
}
|
||
|
||
// =============================================================================
|
||
// CDC 同步表 - 黑洞合约 (from mining-wallet-service)
|
||
// =============================================================================
|
||
|
||
model SyncedBlackHoleContract {
|
||
id String @id @default(uuid())
|
||
originalId String @unique @map("original_id")
|
||
contractAddress String @unique @map("contract_address")
|
||
name String
|
||
|
||
// 累计销毁
|
||
totalBurned Decimal @default(0) @map("total_burned") @db.Decimal(30, 8)
|
||
targetBurn Decimal @map("target_burn") @db.Decimal(30, 8)
|
||
remainingBurn Decimal @map("remaining_burn") @db.Decimal(30, 8)
|
||
|
||
isActive Boolean @default(true) @map("is_active")
|
||
syncedAt DateTime @default(now())
|
||
updatedAt DateTime @updatedAt
|
||
|
||
@@map("synced_black_hole_contracts")
|
||
}
|
||
|
||
// =============================================================================
|
||
// CDC 同步表 - 销毁到黑洞记录 (from mining-wallet-service)
|
||
// =============================================================================
|
||
|
||
model SyncedBurnToBlackHoleRecord {
|
||
id String @id @default(uuid())
|
||
originalId String @unique @map("original_id")
|
||
blackHoleId String @map("black_hole_id")
|
||
|
||
// 销毁信息
|
||
amount Decimal @db.Decimal(30, 8)
|
||
|
||
// 来源
|
||
sourceType String @map("source_type") // USER, SYSTEM_ACCOUNT, POOL, BLOCKCHAIN, EXTERNAL
|
||
sourceAccountSeq String? @map("source_account_seq")
|
||
sourceUserId String? @map("source_user_id")
|
||
sourcePoolType String? @map("source_pool_type")
|
||
|
||
// 链上信息
|
||
txHash String? @map("tx_hash")
|
||
blockNumber BigInt? @map("block_number")
|
||
|
||
// 备注
|
||
memo String? @db.Text
|
||
|
||
createdAt DateTime @map("created_at")
|
||
syncedAt DateTime @default(now())
|
||
|
||
@@index([blackHoleId])
|
||
@@index([sourceAccountSeq])
|
||
@@index([txHash])
|
||
@@index([createdAt(sort: Desc)])
|
||
@@map("synced_burn_to_black_hole_records")
|
||
}
|
||
|
||
// =============================================================================
|
||
// CDC 同步表 - 手续费配置 (from mining-wallet-service)
|
||
// =============================================================================
|
||
|
||
model SyncedFeeConfig {
|
||
id String @id @default(uuid())
|
||
originalId String @unique @map("original_id")
|
||
feeType String @unique @map("fee_type") // WITHDRAW, TRADE, SWAP, TRANSFER
|
||
|
||
// 费率配置
|
||
feeRate Decimal @map("fee_rate") @db.Decimal(10, 6)
|
||
minFee Decimal @map("min_fee") @db.Decimal(30, 8)
|
||
maxFee Decimal? @map("max_fee") @db.Decimal(30, 8)
|
||
|
||
// 分配比例
|
||
headquartersRate Decimal @map("headquarters_rate") @db.Decimal(10, 6)
|
||
operationRate Decimal @map("operation_rate") @db.Decimal(10, 6)
|
||
provinceRate Decimal @map("province_rate") @db.Decimal(10, 6)
|
||
cityRate Decimal @map("city_rate") @db.Decimal(10, 6)
|
||
|
||
isActive Boolean @default(true) @map("is_active")
|
||
syncedAt DateTime @default(now())
|
||
updatedAt DateTime @updatedAt
|
||
|
||
@@map("synced_fee_configs")
|
||
}
|