mirror of
https://github.com/songquanpeng/one-api.git
synced 2025-09-29 22:56:39 +08:00
111 lines
3.0 KiB
Go
111 lines
3.0 KiB
Go
package model
|
|
|
|
import (
|
|
"one-api/common/utils"
|
|
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type CurrencyType string
|
|
|
|
const (
|
|
CurrencyTypeUSD CurrencyType = "USD"
|
|
CurrencyTypeCNY CurrencyType = "CNY"
|
|
)
|
|
|
|
type Payment struct {
|
|
ID int `json:"id"`
|
|
Type string `json:"type" form:"type" gorm:"type:varchar(16)"`
|
|
UUID string `json:"uuid" form:"uuid" gorm:"type:char(32);uniqueIndex"`
|
|
Name string `json:"name" form:"name" gorm:"type:varchar(255); not null"`
|
|
Icon string `json:"icon" form:"icon" gorm:"type:varchar(300)"`
|
|
NotifyDomain string `json:"notify_domain" form:"notify_domain" gorm:"type:varchar(300)"`
|
|
FixedFee float64 `json:"fixed_fee" form:"fixed_fee" gorm:"type:decimal(10,2); default:0.00"`
|
|
PercentFee float64 `json:"percent_fee" form:"percent_fee" gorm:"type:decimal(10,2); default:0.00"`
|
|
Currency CurrencyType `json:"currency" form:"currency" gorm:"type:varchar(5)"`
|
|
Config string `json:"config" form:"config" gorm:"type:text"`
|
|
Sort int `json:"sort" form:"sort" gorm:"default:1"`
|
|
Enable *bool `json:"enable" form:"enable" gorm:"default:true"`
|
|
CreatedAt int64 `json:"created_at" gorm:"bigint"`
|
|
UpdatedAt int64 `json:"-" gorm:"bigint"`
|
|
DeletedAt gorm.DeletedAt `json:"-" gorm:"index"`
|
|
}
|
|
|
|
func GetPaymentByID(id int) (*Payment, error) {
|
|
var payment Payment
|
|
err := DB.First(&payment, id).Error
|
|
return &payment, err
|
|
}
|
|
|
|
func GetPaymentByUUID(uuid string) (*Payment, error) {
|
|
var payment Payment
|
|
err := DB.Where("uuid = ? AND enable = ?", uuid, true).First(&payment).Error
|
|
return &payment, err
|
|
}
|
|
|
|
var allowedPaymentOrderFields = map[string]bool{
|
|
"id": true,
|
|
"uuid": true,
|
|
"name": true,
|
|
"type": true,
|
|
"sort": true,
|
|
"enable": true,
|
|
"created_at": true,
|
|
}
|
|
|
|
type SearchPaymentParams struct {
|
|
Payment
|
|
PaginationParams
|
|
}
|
|
|
|
func GetPanymentList(params *SearchPaymentParams) (*DataResult[Payment], error) {
|
|
var payments []*Payment
|
|
|
|
db := DB.Omit("key")
|
|
|
|
if params.Type != "" {
|
|
db = db.Where("type = ?", params.Type)
|
|
}
|
|
|
|
if params.Name != "" {
|
|
db = db.Where("name LIKE ?", params.Name+"%")
|
|
}
|
|
|
|
if params.UUID != "" {
|
|
db = db.Where("uuid = ?", params.UUID)
|
|
}
|
|
|
|
if params.Currency != "" {
|
|
db = db.Where("currency = ?", params.Currency)
|
|
}
|
|
|
|
return PaginateAndOrder(db, ¶ms.PaginationParams, &payments, allowedPaymentOrderFields)
|
|
}
|
|
|
|
func GetUserPaymentList() ([]*Payment, error) {
|
|
var payments []*Payment
|
|
err := DB.Model(payments).Select("uuid, name, icon, fixed_fee, percent_fee, currency, sort").Where("enable = ?", true).Find(&payments).Error
|
|
return payments, err
|
|
}
|
|
|
|
func (p *Payment) Insert() error {
|
|
p.UUID = utils.GetUUID()
|
|
return DB.Create(p).Error
|
|
}
|
|
|
|
func (p *Payment) Update(overwrite bool) error {
|
|
var err error
|
|
|
|
if overwrite {
|
|
err = DB.Model(p).Select("*").Updates(p).Error
|
|
} else {
|
|
err = DB.Model(p).Updates(p).Error
|
|
}
|
|
|
|
return err
|
|
}
|
|
|
|
func (p *Payment) Delete() error {
|
|
return DB.Delete(p).Error
|
|
}
|