53 lines
1.8 KiB
Go
53 lines
1.8 KiB
Go
|
|
package entities
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"time"
|
|||
|
|
|
|||
|
|
"github.com/google/uuid"
|
|||
|
|
"github.com/shopspring/decimal"
|
|||
|
|
"gorm.io/gorm"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
// WalletTransaction 钱包扣款记录
|
|||
|
|
// 记录API调用产生的扣款操作
|
|||
|
|
type WalletTransaction struct {
|
|||
|
|
// 基础标识
|
|||
|
|
ID string `gorm:"primaryKey;type:varchar(36)" json:"id" comment:"交易记录唯一标识"`
|
|||
|
|
UserID string `gorm:"type:varchar(36);not null;index" json:"user_id" comment:"扣款用户ID"`
|
|||
|
|
ApiCallID string `gorm:"type:varchar(64);not null;uniqueIndex" json:"api_call_id" comment:"关联API调用ID"`
|
|||
|
|
TransactionID string `gorm:"type:varchar(64);not null;uniqueIndex" json:"transaction_id" comment:"交易ID"`
|
|||
|
|
ProductID string `gorm:"type:varchar(64);not null;index" json:"product_id" comment:"产品ID"`
|
|||
|
|
|
|||
|
|
// 扣款信息
|
|||
|
|
Amount decimal.Decimal `gorm:"type:decimal(20,8);not null" json:"amount" comment:"扣款金额"`
|
|||
|
|
|
|||
|
|
// 时间戳字段
|
|||
|
|
CreatedAt time.Time `gorm:"autoCreateTime" json:"created_at" comment:"创建时间"`
|
|||
|
|
UpdatedAt time.Time `gorm:"autoUpdateTime" json:"updated_at" comment:"更新时间"`
|
|||
|
|
DeletedAt gorm.DeletedAt `gorm:"index" json:"-" comment:"软删除时间"`
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// TableName 指定数据库表名
|
|||
|
|
func (WalletTransaction) TableName() string {
|
|||
|
|
return "wallet_transactions"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// BeforeCreate GORM钩子:创建前自动生成UUID
|
|||
|
|
func (t *WalletTransaction) BeforeCreate(tx *gorm.DB) error {
|
|||
|
|
if t.ID == "" {
|
|||
|
|
t.ID = uuid.New().String()
|
|||
|
|
}
|
|||
|
|
return nil
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// NewWalletTransaction 工厂方法 - 创建扣款记录
|
|||
|
|
func NewWalletTransaction(userID, apiCallID, transactionID, productID string, amount decimal.Decimal) *WalletTransaction {
|
|||
|
|
return &WalletTransaction{
|
|||
|
|
UserID: userID,
|
|||
|
|
ApiCallID: apiCallID,
|
|||
|
|
TransactionID: transactionID,
|
|||
|
|
ProductID: productID,
|
|||
|
|
Amount: amount,
|
|||
|
|
}
|
|||
|
|
}
|