99 lines
3.9 KiB
Go
99 lines
3.9 KiB
Go
package entities
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/google/uuid"
|
|
"github.com/shopspring/decimal"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
const (
|
|
// QuotaLedgerChangeTypePurchaseForSub 主账号为子账号购买额度
|
|
QuotaLedgerChangeTypePurchaseForSub = "purchase_for_sub"
|
|
// QuotaLedgerChangeTypeConsumeAPI 用户调用API消耗额度
|
|
QuotaLedgerChangeTypeConsumeAPI = "api_consume"
|
|
)
|
|
|
|
// SubordinateQuotaPurchase 主账号为子账号购买额度记录
|
|
type SubordinateQuotaPurchase struct {
|
|
ID string `gorm:"primaryKey;type:varchar(36)" json:"id"`
|
|
ParentUserID string `gorm:"type:varchar(36);not null;index" json:"parent_user_id"`
|
|
ChildUserID string `gorm:"type:varchar(36);not null;index" json:"child_user_id"`
|
|
ProductID string `gorm:"type:varchar(36);not null;index" json:"product_id"`
|
|
CallCount int64 `gorm:"type:bigint;not null" json:"call_count"`
|
|
UnitPrice decimal.Decimal `gorm:"type:decimal(20,8);not null" json:"unit_price"`
|
|
TotalAmount decimal.Decimal `gorm:"type:decimal(20,8);not null" json:"total_amount"`
|
|
BusinessRef string `gorm:"type:varchar(64);not null;uniqueIndex" json:"business_ref"`
|
|
OperatorUserID string `gorm:"type:varchar(36);not null" json:"operator_user_id"`
|
|
|
|
CreatedAt time.Time `gorm:"autoCreateTime" json:"created_at"`
|
|
UpdatedAt time.Time `gorm:"autoUpdateTime" json:"updated_at"`
|
|
DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`
|
|
}
|
|
|
|
func (SubordinateQuotaPurchase) TableName() string {
|
|
return "subordinate_quota_purchases"
|
|
}
|
|
|
|
func (q *SubordinateQuotaPurchase) BeforeCreate(tx *gorm.DB) error {
|
|
if q.ID == "" {
|
|
q.ID = uuid.New().String()
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// UserProductQuotaAccount 用户产品额度账户(通用模型,适配所有用户)
|
|
type UserProductQuotaAccount struct {
|
|
ID string `gorm:"primaryKey;type:varchar(36)" json:"id"`
|
|
UserID string `gorm:"type:varchar(36);not null;index:idx_user_product,unique" json:"user_id"`
|
|
ProductID string `gorm:"type:varchar(36);not null;index:idx_user_product,unique" json:"product_id"`
|
|
TotalQuota int64 `gorm:"type:bigint;not null;default:0" json:"total_quota"`
|
|
UsedQuota int64 `gorm:"type:bigint;not null;default:0" json:"used_quota"`
|
|
AvailableQuota int64 `gorm:"type:bigint;not null;default:0" json:"available_quota"`
|
|
|
|
CreatedAt time.Time `gorm:"autoCreateTime" json:"created_at"`
|
|
UpdatedAt time.Time `gorm:"autoUpdateTime" json:"updated_at"`
|
|
DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`
|
|
}
|
|
|
|
func (UserProductQuotaAccount) TableName() string {
|
|
return "user_product_quota_accounts"
|
|
}
|
|
|
|
func (a *UserProductQuotaAccount) BeforeCreate(tx *gorm.DB) error {
|
|
if a.ID == "" {
|
|
a.ID = uuid.New().String()
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// UserProductQuotaLedger 用户产品额度流水(通用模型,适配所有用户)
|
|
type UserProductQuotaLedger struct {
|
|
ID string `gorm:"primaryKey;type:varchar(36)" json:"id"`
|
|
UserID string `gorm:"type:varchar(36);not null;index" json:"user_id"`
|
|
ProductID string `gorm:"type:varchar(36);not null;index" json:"product_id"`
|
|
ChangeType string `gorm:"type:varchar(50);not null;index" json:"change_type"`
|
|
DeltaQuota int64 `gorm:"type:bigint;not null" json:"delta_quota"`
|
|
BeforeQuota int64 `gorm:"type:bigint;not null" json:"before_quota"`
|
|
AfterQuota int64 `gorm:"type:bigint;not null" json:"after_quota"`
|
|
SourceID string `gorm:"type:varchar(36);index" json:"source_id"`
|
|
OperatorID string `gorm:"type:varchar(36);not null" json:"operator_id"`
|
|
Remark string `gorm:"type:varchar(255)" json:"remark"`
|
|
|
|
CreatedAt time.Time `gorm:"autoCreateTime" json:"created_at"`
|
|
UpdatedAt time.Time `gorm:"autoUpdateTime" json:"updated_at"`
|
|
DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`
|
|
}
|
|
|
|
func (UserProductQuotaLedger) TableName() string {
|
|
return "user_product_quota_ledgers"
|
|
}
|
|
|
|
func (l *UserProductQuotaLedger) BeforeCreate(tx *gorm.DB) error {
|
|
if l.ID == "" {
|
|
l.ID = uuid.New().String()
|
|
}
|
|
return nil
|
|
}
|