feat(v2): 一次性收款管线 CreateOrder/GetOrder/Retry/Cancel + DBProductResolver
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
package gateway
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"gorm.io/gorm"
|
||||
|
||||
"github.com/wangjia/pay/internal/model"
|
||||
"github.com/wangjia/pay/internal/money"
|
||||
)
|
||||
|
||||
// DBProductResolver resolves a SKU (product biz_code) against the products table.
|
||||
// v1 Product.Price is a "元" string; we parse it into int64 minor units for the
|
||||
// given settlement currency. 加币种维度到 product 是 P3+ 的事;P2 用单一默认币种。
|
||||
type DBProductResolver struct {
|
||||
db *gorm.DB
|
||||
currency string
|
||||
}
|
||||
|
||||
func NewDBProductResolver(db *gorm.DB, currency string) *DBProductResolver {
|
||||
if currency == "" {
|
||||
currency = "CNY"
|
||||
}
|
||||
return &DBProductResolver{db: db, currency: currency}
|
||||
}
|
||||
|
||||
func (r *DBProductResolver) Resolve(sku string) (int64, string, string, string, error) {
|
||||
var p model.Product
|
||||
err := r.db.Where("biz_code = ? AND active = ?", sku, true).First(&p).Error
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
return 0, "", "", "", ErrProductNotFound
|
||||
}
|
||||
if err != nil {
|
||||
return 0, "", "", "", err
|
||||
}
|
||||
minor, err := money.Parse(p.Price, r.currency)
|
||||
if err != nil {
|
||||
return 0, "", "", "", err
|
||||
}
|
||||
return minor, r.currency, p.Name, p.BizCode, nil
|
||||
}
|
||||
Reference in New Issue
Block a user