Files
platform/web/services/user.go

63 lines
1.3 KiB
Go

package services
import (
"fmt"
"platform/web/core"
m "platform/web/models"
q "platform/web/queries"
"github.com/shopspring/decimal"
)
var User = &userService{}
type userService struct{}
func (s *userService) Get(q *q.Query, uid int32) (*m.User, error) {
user, err := q.User.
Where(q.User.ID.Eq(uid)).Take()
if err != nil {
return nil, core.NewServErr("查询用户失败", err)
}
return user, nil
}
func (s *userService) UpdateBalance(q *q.Query, user *m.User, amount decimal.Decimal) error {
balance := user.Balance.Add(amount)
if balance.IsNegative() {
return core.NewServErr("用户余额不足")
}
_, err := q.User.
Where(
q.User.ID.Eq(user.ID),
q.User.Balance.Eq(user.Balance),
).
UpdateSimple(
q.User.Balance.Value(balance),
)
if err != nil {
return core.NewServErr("更新用户余额失败", err)
}
return nil
}
func userBalanceKey(uid int32) string {
return fmt.Sprintf("user:%d:balance", uid)
}
type UpdateBalanceData struct {
Amount int `json:"amount"`
}
func (c *UpdateBalanceData) TradeDetail() (*TradeDetail, error) {
amount := decimal.NewFromInt(int64(c.Amount)).Div(decimal.NewFromInt(100))
return &TradeDetail{
m.TradeTypeRecharge,
fmt.Sprintf("账户充值 - %s元", amount.StringFixed(2)),
amount, amount,
nil, c,
}, nil
}