Files
huangguo_server/models/v/currencymod/currency.go
T
rootandClaude Opus 5 8679200f41 Initial commit
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-15 13:57:10 +08:00

113 lines
3.2 KiB
Go

package currencymod
import (
"encoding/json"
"errors"
"fmt"
"91porn-server/common/constant/redisconst"
"91porn-server/common/db"
"91porn-server/common/log"
"91porn-server/common/redis"
"91porn-server/models/commod"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
func currencyColl(t *db.MongoTool) *db.MongoTool {
if t == nil {
return currencyDB.Coll(currencyTable)
}
return t.Coll(currencyTable)
}
func currencyIndex() {
many := []mongo.IndexModel{
{
Keys: bson.D{{Key: "type", Value: 1}, {Key: "isActive", Value: 1}, {Key: "coins", Value: -1}},
},
}
if _, err := currencyColl(nil).CreateIndex(many); err != nil {
panic(fmt.Sprintf("currency model set index err ==>[%+v]", err))
}
}
// Get 获取单个货币配置
func Get(id primitive.ObjectID) (Currency, error) {
var item Currency
return item, currencyColl(nil).FindOne(&item, bson.M{"_id": id})
}
// List 获取货币配置列表
func List(t commod.CurrencyType) ([]Currency, error) {
var items []Currency
return items, currencyColl(nil).Find(&items, bson.M{"isActive": true, "type": t}, options.Find().SetSort(bson.M{"coins": 1}))
}
// Add 新增
func Add(document interface{}) error {
_, err := currencyColl(nil).InsertOne(&document)
return err
}
// Edit 编辑
func Edit(filter primitive.M, update primitive.M) error {
result, err := currencyColl(nil).UpdateOne(filter, update)
if err != nil {
log.Warn("currency edit err", log.Any("filter", filter), log.Any("update", update), log.E(err))
return err
}
if result.ModifiedCount == 0 {
log.Warn("currency edit fail", log.Any("filter", filter), log.Any("update", update), log.E(err))
return errors.New("ModifiedCount is nil")
}
return nil
}
// QueryAll 查询
func QueryAll(filter primitive.M, opts ...*options.FindOptions) ([]*Currency, error) {
var out []*Currency
return out, currencyColl(nil).Find(&out, filter, opts...)
}
// QueryCount 查询条目
func QueryCount(filter primitive.M) (int64, error) {
return currencyColl(nil).Count(filter)
}
// GetCurrencyListByRedis 条件获取金币配置表,缓存拿
func GetCurrencyListByRedis(t commod.CurrencyType) ([]*Currency, error) {
var back []*Currency
redisKey := redisconst.DataCachKey(currencyTable, "trueList")
var redisc *redis.Client
if redisc == nil || !redisc.Exists(redisKey) {
opts := options.FindOptions{}
opts.SetSort(bson.D{{Key: "coins", Value: 1}})
if err := currencyColl(nil).Find(&back, bson.M{"isActive": true, "type": t}, &opts); err != nil {
log.ZapLog.Warn("currencymod GetCurrencyListByRedis Find fail", log.E(err))
return nil, err
}
if redisc == nil {
return back, nil
}
jsonBytes, err := json.Marshal(back)
if err != nil {
return back, err
}
_ = redisc.Set(redisKey, string(jsonBytes), redisconst.EmailCaptchaExpire)
return back, err
}
str, err := redisc.Get(redisKey)
if err != nil {
log.Warn(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "GetCurrencyListByRedis", currencyTable, "Find", err))
return nil, err
}
if str == nil {
return back, errors.New("redis key is null")
}
return back, json.Unmarshal([]byte(*str), &back)
}