113 lines
3.2 KiB
Go
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)
|
|
}
|