From b80719d53830c977615d32ad40ea807e6b588060 Mon Sep 17 00:00:00 2001 From: yml Date: Tue, 9 Jun 2026 13:31:29 +0800 Subject: [PATCH] =?UTF-8?q?Model=E5=B1=82=EF=BC=9A=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E9=87=91=E9=A2=9D=E5=88=86=E5=AD=97=E6=AE=B5=E5=AE=9A=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 所有 Model 添加对应的 *Cent int64 字段 - 旧的 float64 字段保留但不输出到 JSON (json:"-") - 涉及文件:user.go, listing.go, order.go, order_checkout.go, wallet.go, withdrawal.go - 目标:为后续业务逻辑切换到分存储做准备 Co-Authored-By: Claude Opus 4.8 --- backend/internal/model/listing.go | 28 ++++++------ backend/internal/model/order.go | 56 +++++++++++++----------- backend/internal/model/order_checkout.go | 53 ++++++++++++---------- backend/internal/model/user.go | 25 ++++++----- backend/internal/model/wallet.go | 42 ++++++++++-------- backend/internal/model/withdrawal.go | 9 ++-- 6 files changed, 119 insertions(+), 94 deletions(-) diff --git a/backend/internal/model/listing.go b/backend/internal/model/listing.go index 632ec92..4dfac0d 100644 --- a/backend/internal/model/listing.go +++ b/backend/internal/model/listing.go @@ -29,19 +29,21 @@ func (GameAccount) TableName() string { } type RentalListing struct { - ID uint64 `gorm:"primaryKey" json:"id"` - ListingNo string `gorm:"column:listing_no;size:20;not null;uniqueIndex" json:"listing_no"` - AccountID uint64 `gorm:"not null;index" json:"account_id"` - OwnerID uint64 `gorm:"not null;index" json:"owner_id"` - Price float64 `gorm:"type:decimal(12,2);not null;default:0" json:"price"` - DepositAmount float64 `gorm:"type:decimal(12,2);not null;default:0" json:"deposit_amount"` - InTransaction bool `gorm:"not null;default:false" json:"in_transaction"` - Status string `gorm:"size:32;not null;default:'draft'" json:"status"` - ReviewStatus string `gorm:"size:32;not null;default:'none'" json:"review_status"` - ReviewReason string `gorm:"size:255;not null;default:''" json:"review_reason"` - PublishedAt *time.Time `json:"published_at"` - CreatedAt time.Time `json:"created_at"` - UpdatedAt time.Time `json:"updated_at"` + ID uint64 `gorm:"primaryKey" json:"id"` + ListingNo string `gorm:"column:listing_no;size:20;not null;uniqueIndex" json:"listing_no"` + AccountID uint64 `gorm:"not null;index" json:"account_id"` + OwnerID uint64 `gorm:"not null;index" json:"owner_id"` + Price float64 `gorm:"type:decimal(12,2);not null;default:0" json:"-"` + PriceCent int64 `gorm:"not null;default:0" json:"-"` + DepositAmount float64 `gorm:"type:decimal(12,2);not null;default:0" json:"-"` + DepositAmountCent int64 `gorm:"not null;default:0" json:"-"` + InTransaction bool `gorm:"not null;default:false" json:"in_transaction"` + Status string `gorm:"size:32;not null;default:'draft'" json:"status"` + ReviewStatus string `gorm:"size:32;not null;default:'none'" json:"review_status"` + ReviewReason string `gorm:"size:255;not null;default:''" json:"review_reason"` + PublishedAt *time.Time `json:"published_at"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` } func (RentalListing) TableName() string { diff --git a/backend/internal/model/order.go b/backend/internal/model/order.go index c0d995a..dc3a498 100644 --- a/backend/internal/model/order.go +++ b/backend/internal/model/order.go @@ -7,31 +7,37 @@ import ( ) type RentalOrder struct { - ID uint64 `gorm:"primaryKey" json:"id"` - OrderNo string `gorm:"size:64;not null;uniqueIndex" json:"order_no"` - ListingID uint64 `gorm:"not null;index" json:"listing_id"` - AccountID uint64 `gorm:"not null;index" json:"account_id"` - OwnerID uint64 `gorm:"not null;index" json:"owner_id"` - RenterID uint64 `gorm:"not null;index" json:"renter_id"` - RentedAt *time.Time `json:"rented_at"` - EstimatedDurationHours int `gorm:"not null;default:24" json:"estimated_duration_hours"` - RentAmount float64 `gorm:"type:decimal(12,2);not null;default:0" json:"rent_amount"` - OwnerRentAmount float64 `gorm:"type:decimal(12,2);not null;default:0" json:"owner_rent_amount"` - DepositAmount float64 `gorm:"type:decimal(12,2);not null;default:0" json:"deposit_amount"` - DepositOriginalAmount float64 `gorm:"type:decimal(12,2);not null;default:0" json:"deposit_original_amount"` - DepositWaivedAmount float64 `gorm:"type:decimal(12,2);not null;default:0" json:"deposit_waived_amount"` - PlatformFee float64 `gorm:"type:decimal(12,2);not null;default:0" json:"platform_fee"` - AccountSnapshot datatypes.JSON `json:"account_snapshot"` - Status string `gorm:"size:32;not null;default:'pending_payment'" json:"status"` - HandoffStatus string `gorm:"size:32;not null;default:'none'" json:"handoff_status"` - SettlementStatus string `gorm:"size:32;not null;default:'unsettled'" json:"settlement_status"` - RefundStatus string `gorm:"size:32;not null;default:'none';index" json:"refund_status"` - RefundAmountCent int64 `gorm:"not null;default:0" json:"refund_amount_cent"` - RefundedAt *time.Time `json:"refunded_at"` - OwnerSettledAt *time.Time `json:"owner_settled_at"` - SettledAt *time.Time `json:"settled_at"` - CreatedAt time.Time `json:"created_at"` - UpdatedAt time.Time `json:"updated_at"` + ID uint64 `gorm:"primaryKey" json:"id"` + OrderNo string `gorm:"size:64;not null;uniqueIndex" json:"order_no"` + ListingID uint64 `gorm:"not null;index" json:"listing_id"` + AccountID uint64 `gorm:"not null;index" json:"account_id"` + OwnerID uint64 `gorm:"not null;index" json:"owner_id"` + RenterID uint64 `gorm:"not null;index" json:"renter_id"` + RentedAt *time.Time `json:"rented_at"` + EstimatedDurationHours int `gorm:"not null;default:24" json:"estimated_duration_hours"` + RentAmount float64 `gorm:"type:decimal(12,2);not null;default:0" json:"-"` + RentAmountCent int64 `gorm:"not null;default:0" json:"-"` + OwnerRentAmount float64 `gorm:"type:decimal(12,2);not null;default:0" json:"-"` + OwnerRentAmountCent int64 `gorm:"not null;default:0" json:"-"` + DepositAmount float64 `gorm:"type:decimal(12,2);not null;default:0" json:"-"` + DepositAmountCent int64 `gorm:"not null;default:0" json:"-"` + DepositOriginalAmount float64 `gorm:"type:decimal(12,2);not null;default:0" json:"-"` + DepositOriginalAmountCent int64 `gorm:"not null;default:0" json:"-"` + DepositWaivedAmount float64 `gorm:"type:decimal(12,2);not null;default:0" json:"-"` + DepositWaivedAmountCent int64 `gorm:"not null;default:0" json:"-"` + PlatformFee float64 `gorm:"type:decimal(12,2);not null;default:0" json:"-"` + PlatformFeeCent int64 `gorm:"not null;default:0" json:"-"` + AccountSnapshot datatypes.JSON `json:"account_snapshot"` + Status string `gorm:"size:32;not null;default:'pending_payment'" json:"status"` + HandoffStatus string `gorm:"size:32;not null;default:'none'" json:"handoff_status"` + SettlementStatus string `gorm:"size:32;not null;default:'unsettled'" json:"settlement_status"` + RefundStatus string `gorm:"size:32;not null;default:'none';index" json:"refund_status"` + RefundAmountCent int64 `gorm:"not null;default:0" json:"refund_amount_cent"` + RefundedAt *time.Time `json:"refunded_at"` + OwnerSettledAt *time.Time `json:"owner_settled_at"` + SettledAt *time.Time `json:"settled_at"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` } func (RentalOrder) TableName() string { diff --git a/backend/internal/model/order_checkout.go b/backend/internal/model/order_checkout.go index 2ef652b..cbcd2eb 100644 --- a/backend/internal/model/order_checkout.go +++ b/backend/internal/model/order_checkout.go @@ -7,28 +7,37 @@ import ( ) type OrderCheckout struct { - ID uint64 `gorm:"primaryKey" json:"id"` - OrderID uint64 `gorm:"not null;index" json:"order_id"` - InitiatedBy uint64 `gorm:"not null" json:"initiated_by"` - Status string `gorm:"size:32;not null;default:'submitted'" json:"status"` - RentAmount float64 `gorm:"type:decimal(12,2);not null;default:0" json:"rent_amount"` - OwnerRentAmount float64 `gorm:"type:decimal(12,2);not null;default:0" json:"owner_rent_amount"` - PlatformFee float64 `gorm:"type:decimal(12,2);not null;default:0" json:"platform_fee"` - DepositAmount float64 `gorm:"type:decimal(12,2);not null;default:0" json:"deposit_amount"` - ConsumableAmount float64 `gorm:"type:decimal(12,2);not null;default:0" json:"consumable_amount"` - CoinConsumedM float64 `gorm:"type:decimal(12,2);not null;default:0" json:"coin_consumed_m"` - OtherAmount float64 `gorm:"type:decimal(12,2);not null;default:0" json:"other_amount"` - DepositDeductAmount float64 `gorm:"type:decimal(12,2);not null;default:0" json:"deposit_deduct_amount"` - RenterRefundAmount float64 `gorm:"type:decimal(12,2);not null;default:0" json:"renter_refund_amount"` - OwnerIncomeAmount float64 `gorm:"type:decimal(12,2);not null;default:0" json:"owner_income_amount"` - Content string `json:"content"` - EvidenceURLS datatypes.JSON `gorm:"column:evidence_urls" json:"evidence_urls"` - OwnerAdjustmentReason string `json:"owner_adjustment_reason"` - OwnerAdjustedAt *time.Time `json:"owner_adjusted_at"` - RenterConfirmedAt *time.Time `json:"renter_confirmed_at"` - RenterRejectedAt *time.Time `json:"renter_rejected_at"` - CreatedAt time.Time `json:"created_at"` - UpdatedAt time.Time `json:"updated_at"` + ID uint64 `gorm:"primaryKey" json:"id"` + OrderID uint64 `gorm:"not null;index" json:"order_id"` + InitiatedBy uint64 `gorm:"not null" json:"initiated_by"` + Status string `gorm:"size:32;not null;default:'submitted'" json:"status"` + RentAmount float64 `gorm:"type:decimal(12,2);not null;default:0" json:"-"` + RentAmountCent int64 `gorm:"not null;default:0" json:"-"` + OwnerRentAmount float64 `gorm:"type:decimal(12,2);not null;default:0" json:"-"` + OwnerRentAmountCent int64 `gorm:"not null;default:0" json:"-"` + PlatformFee float64 `gorm:"type:decimal(12,2);not null;default:0" json:"-"` + PlatformFeeCent int64 `gorm:"not null;default:0" json:"-"` + DepositAmount float64 `gorm:"type:decimal(12,2);not null;default:0" json:"-"` + DepositAmountCent int64 `gorm:"not null;default:0" json:"-"` + ConsumableAmount float64 `gorm:"type:decimal(12,2);not null;default:0" json:"-"` + ConsumableAmountCent int64 `gorm:"not null;default:0" json:"-"` + CoinConsumedM float64 `gorm:"type:decimal(12,2);not null;default:0" json:"coin_consumed_m"` + OtherAmount float64 `gorm:"type:decimal(12,2);not null;default:0" json:"-"` + OtherAmountCent int64 `gorm:"not null;default:0" json:"-"` + DepositDeductAmount float64 `gorm:"type:decimal(12,2);not null;default:0" json:"-"` + DepositDeductAmountCent int64 `gorm:"not null;default:0" json:"-"` + RenterRefundAmount float64 `gorm:"type:decimal(12,2);not null;default:0" json:"-"` + RenterRefundAmountCent int64 `gorm:"not null;default:0" json:"-"` + OwnerIncomeAmount float64 `gorm:"type:decimal(12,2);not null;default:0" json:"-"` + OwnerIncomeAmountCent int64 `gorm:"not null;default:0" json:"-"` + Content string `json:"content"` + EvidenceURLS datatypes.JSON `gorm:"column:evidence_urls" json:"evidence_urls"` + OwnerAdjustmentReason string `json:"owner_adjustment_reason"` + OwnerAdjustedAt *time.Time `json:"owner_adjusted_at"` + RenterConfirmedAt *time.Time `json:"renter_confirmed_at"` + RenterRejectedAt *time.Time `json:"renter_rejected_at"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` } func (OrderCheckout) TableName() string { diff --git a/backend/internal/model/user.go b/backend/internal/model/user.go index aee9fe6..8c970a7 100644 --- a/backend/internal/model/user.go +++ b/backend/internal/model/user.go @@ -3,18 +3,19 @@ package model import "time" type User struct { - ID uint64 `gorm:"primaryKey" json:"id"` - Phone string `gorm:"size:32;not null;uniqueIndex" json:"phone"` - Nickname string `gorm:"size:64;not null;default:''" json:"nickname"` - AvatarURL string `gorm:"size:512;not null;default:''" json:"avatar_url"` - RealnameStatus string `gorm:"size:32;not null;default:'unverified'" json:"realname_status"` - RiskStatus string `gorm:"size:32;not null;default:'normal'" json:"risk_status"` - CreditScore int `gorm:"not null;default:100" json:"credit_score"` - DepositFreeQuota float64 `gorm:"type:decimal(12,2);not null;default:0" json:"deposit_free_quota"` - Status string `gorm:"size:32;not null;default:'active'" json:"status"` - LastLoginAt *time.Time `json:"last_login_at"` - CreatedAt time.Time `json:"created_at"` - UpdatedAt time.Time `json:"updated_at"` + ID uint64 `gorm:"primaryKey" json:"id"` + Phone string `gorm:"size:32;not null;uniqueIndex" json:"phone"` + Nickname string `gorm:"size:64;not null;default:''" json:"nickname"` + AvatarURL string `gorm:"size:512;not null;default:''" json:"avatar_url"` + RealnameStatus string `gorm:"size:32;not null;default:'unverified'" json:"realname_status"` + RiskStatus string `gorm:"size:32;not null;default:'normal'" json:"risk_status"` + CreditScore int `gorm:"not null;default:100" json:"credit_score"` + DepositFreeQuota float64 `gorm:"type:decimal(12,2);not null;default:0" json:"-"` + DepositFreeQuotaCent int64 `gorm:"not null;default:0" json:"-"` + Status string `gorm:"size:32;not null;default:'active'" json:"status"` + LastLoginAt *time.Time `json:"last_login_at"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` } func (User) TableName() string { diff --git a/backend/internal/model/wallet.go b/backend/internal/model/wallet.go index a1ed59e..3f2951f 100644 --- a/backend/internal/model/wallet.go +++ b/backend/internal/model/wallet.go @@ -3,13 +3,15 @@ package model import "time" type WalletAccount struct { - ID uint64 `gorm:"primaryKey" json:"id"` - UserID uint64 `gorm:"not null;uniqueIndex" json:"user_id"` - AvailableBalance float64 `gorm:"type:decimal(12,2);not null;default:0" json:"available_balance"` - FrozenBalance float64 `gorm:"type:decimal(12,2);not null;default:0" json:"frozen_balance"` - Status string `gorm:"size:32;not null;default:'active'" json:"status"` - CreatedAt time.Time `json:"created_at"` - UpdatedAt time.Time `json:"updated_at"` + ID uint64 `gorm:"primaryKey" json:"id"` + UserID uint64 `gorm:"not null;uniqueIndex" json:"user_id"` + AvailableBalance float64 `gorm:"type:decimal(12,2);not null;default:0" json:"-"` + AvailableBalanceCent int64 `gorm:"not null;default:0" json:"-"` + FrozenBalance float64 `gorm:"type:decimal(12,2);not null;default:0" json:"-"` + FrozenBalanceCent int64 `gorm:"not null;default:0" json:"-"` + Status string `gorm:"size:32;not null;default:'active'" json:"status"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` } func (WalletAccount) TableName() string { @@ -17,18 +19,20 @@ func (WalletAccount) TableName() string { } type WalletLedger struct { - ID uint64 `gorm:"primaryKey" json:"id"` - LedgerNo string `gorm:"size:64;not null;uniqueIndex" json:"ledger_no"` - UserID uint64 `gorm:"not null;index" json:"user_id"` - OrderID *uint64 `json:"order_id"` - Direction string `gorm:"size:16;not null" json:"direction"` - Amount float64 `gorm:"type:decimal(12,2);not null" json:"amount"` - BalanceAfter float64 `gorm:"type:decimal(12,2);not null" json:"balance_after"` - BalanceType string `gorm:"size:32;not null" json:"balance_type"` - BizType string `gorm:"size:32;not null" json:"biz_type"` - BizNo string `gorm:"size:64;not null" json:"biz_no"` - Remark string `gorm:"size:255;not null;default:''" json:"remark"` - CreatedAt time.Time `json:"created_at"` + ID uint64 `gorm:"primaryKey" json:"id"` + LedgerNo string `gorm:"size:64;not null;uniqueIndex" json:"ledger_no"` + UserID uint64 `gorm:"not null;index" json:"user_id"` + OrderID *uint64 `json:"order_id"` + Direction string `gorm:"size:16;not null" json:"direction"` + Amount float64 `gorm:"type:decimal(12,2);not null" json:"-"` + AmountCent int64 `gorm:"not null;default:0" json:"-"` + BalanceAfter float64 `gorm:"type:decimal(12,2);not null" json:"-"` + BalanceAfterCent int64 `gorm:"not null;default:0" json:"-"` + BalanceType string `gorm:"size:32;not null" json:"balance_type"` + BizType string `gorm:"size:32;not null" json:"biz_type"` + BizNo string `gorm:"size:64;not null" json:"biz_no"` + Remark string `gorm:"size:255;not null;default:''" json:"remark"` + CreatedAt time.Time `json:"created_at"` } func (WalletLedger) TableName() string { diff --git a/backend/internal/model/withdrawal.go b/backend/internal/model/withdrawal.go index 3f946dc..c869469 100644 --- a/backend/internal/model/withdrawal.go +++ b/backend/internal/model/withdrawal.go @@ -6,9 +6,12 @@ type WithdrawalRequest struct { ID uint64 `gorm:"primaryKey" json:"id"` WithdrawNo string `gorm:"size:64;not null;uniqueIndex" json:"withdraw_no"` UserID uint64 `gorm:"not null;index" json:"user_id"` - Amount float64 `gorm:"type:decimal(12,2);not null" json:"amount"` - Fee float64 `gorm:"type:decimal(12,2);not null;default:0.00" json:"fee"` - ActualAmount float64 `gorm:"type:decimal(12,2);not null" json:"actual_amount"` + Amount float64 `gorm:"type:decimal(12,2);not null" json:"-"` + AmountCent int64 `gorm:"not null;default:0" json:"-"` + Fee float64 `gorm:"type:decimal(12,2);not null;default:0.00" json:"-"` + FeeCent int64 `gorm:"not null;default:0" json:"-"` + ActualAmount float64 `gorm:"type:decimal(12,2);not null" json:"-"` + ActualAmountCent int64 `gorm:"not null;default:0" json:"-"` PaymentAccountID *uint64 `json:"payment_account_id"` AccountType string `gorm:"size:32;not null" json:"account_type"` AccountName string `gorm:"size:128;not null" json:"account_name"`