rwadurian/backend/services/mining-admin-service/prisma/schema.prisma

846 lines
30 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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")
}