samba/util/model/clubResource.go
2025-06-04 09:51:39 +08:00

94 lines
2.3 KiB
Go

package model
import (
"context"
"fmt"
"github.com/go-redis/redis/v8"
"gorm.io/gorm"
"samba/pkg/log"
"samba/util/rdbkey"
)
const (
//ResClubCoin = "coin" // 俱乐部币
ResClubScore = "score" // 俱乐部自身积分,非玩家积分
)
var clubResMap = map[string]int{
//ResClubCoin: 1005,
ResClubScore: 1006,
}
func ClubResToInt(res string) (int, error) {
resInt, ok := clubResMap[res]
if !ok {
return -1, fmt.Errorf("has not resource:%v", res)
}
return resInt, nil
}
func ClubIntToRes(res int) (string, error) {
for k, v := range clubResMap {
if v == res {
return k, nil
}
}
return "", fmt.Errorf("has not resource:%v", res)
}
type ClubResourceOp struct {
rdb *redis.Client
db *gorm.DB
}
func NewClubResourceOp() *ClubResourceOp {
return &ClubResourceOp{rdb: rdbMoney, db: userDB}
}
func (op *ClubResourceOp) loadClubRes(clubId int) (*ClubInfo, error) {
return NewClubInfoOp().Load(clubId)
}
func (op *ClubResourceOp) Get(resType string, clubId int) (int64, error) {
res, err := op.loadClubRes(clubId)
if err != nil {
return 0, err
}
switch resType {
//case ResClubCoin:
// return res.Coin, nil
case ResClubScore:
return res.Score, nil
default:
log.Error(fmt.Sprintf("club:%v get resType:%v", clubId, resType))
return 0, nil
}
}
func (op *ClubResourceOp) Add(clubId int, add int64, resType string) (int64, error) {
res, err := op.Get(resType, clubId)
if err != nil {
err = fmt.Errorf("club:%v add res:%v value:%v fail.err:%v", clubId, resType, add, err.Error())
log.Error(err.Error())
return 0, err
}
//if res+add < 0 {
// err = fmt.Errorf("club:%v add res:%v add value:%v + current value:%v<0", clubId, resType, add, res)
// log.Error(err.Error())
// return 0, err
//}
res, err = op.rdb.HIncrBy(context.Background(), rdbkey.ClubKey(clubId), resType, add).Result()
if err != nil {
err = fmt.Errorf("key:%v add res:%v value:%v fail.err:%v", rdbkey.ClubKey(clubId), resType, add, err.Error())
log.Error(err.Error())
return 0, err
}
expr := fmt.Sprintf("%v + ?", resType)
err = op.db.Model(&ClubInfo{}).Where("id = ?", clubId).Update(resType, gorm.Expr(expr, add)).Error
if err != nil {
err = fmt.Errorf("club:%v add res:%v value:%v fail.err:%v", clubId, resType, add, err.Error())
log.Error(err.Error())
}
return res, err
}