package activitymod import ( "errors" "fmt" "time" "91porn-server/common/db" "91porn-server/common/log" "91porn-server/models" "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" ) var userFreeDB *db.MongoDB func collUserFree(t *db.MongoTool) *db.MongoTool { if t == nil { return userFreeDB.Coll(models.ActivityUserFree) } return t.Coll(models.ActivityUserFree) } // initUserFreeIndex 索引设置 func initUserFreeIndex() { many := []mongo.IndexModel{ //batch set indexes //value is the type 1 or -1 { Keys: bson.D{{Key: "activityId", Value: 1}, {Key: "uid", Value: 1}}, Options: options.Index().SetUnique(true), }, { Keys: bson.D{{Key: "createTime", Value: -1}}, }, } if _, err := collUserFree(nil).CreateIndex(many); err != nil { panic(fmt.Sprintf("%s model set index err ==>[%+v]", table, err)) } } func GetUserFree(activityID primitive.ObjectID, uid uint64) (*UserFree, error) { var out *UserFree if err := collUserFree(nil).FindOne(&out, bson.M{"activityId": activityID, "uid": uid}); err != nil { log.Error(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "AddUserFree", models.ActivityUserFree, "InsertOne", err), log.Any("activityID", activityID), log.Any("uid", uid), ) return nil, err } return out, nil } func AddUserFree(activityID primitive.ObjectID, uid uint64, freeCount int32) error { if _, err := collUserFree(nil).InsertOne(&UserFree{ ActivityID: activityID, UID: uid, FreeCount: freeCount, UpdateTime: time.Now(), CreateTime: time.Now(), }); err != nil { log.Error(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "AddUserFree", models.ActivityUserFree, "InsertOne", err), log.Any("activityID", activityID), log.Any("uid", uid), log.Any("freeCount", freeCount), ) return err } return nil } func UpdateOneUserFreeInc(t *db.MongoTool, activityID primitive.ObjectID, uid uint64, freeCount int32) error { result, err := collUserFree(t).UpdateOne(bson.M{"activityId": activityID, "uid": uid}, bson.M{"$inc": bson.M{"freeCount": freeCount}, "$set": bson.M{"updateTime": time.Now()}}) if err != nil { log.Error(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "UpdateOneInc", models.ActivityUserFree, "UpdateOne", err), log.Any("activityID", activityID), log.Any("uid", uid), log.Any("freeCount", freeCount), ) return err } if result.ModifiedCount == 0 { err = errors.New("activity UpdateOne ModifiedCount err") log.Warn(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "UpdateOneInc", models.ActivityUserFree, "result.ModifiedCount == 0", err), log.Any("activityID", activityID), log.Any("uid", uid), log.Any("freeCount", freeCount), ) return err } return nil } func UpdateOneSet(activityID primitive.ObjectID, uid uint64, freeCount int32) error { result, err := collUserFree(nil).UpdateOne(bson.M{"activityId": activityID, "uid": uid}, bson.M{"$set": bson.M{"freeCount": freeCount, "updateTime": time.Now()}}) if err != nil { log.Error(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "UpdateOneSet", models.ActivityUserFree, "UpdateOne", err), log.Any("activityID", activityID), log.Any("uid", uid), log.Any("freeCount", freeCount), ) return err } if result.ModifiedCount == 0 { err = errors.New("activity UpdateOne ModifiedCount err") log.Warn(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "UpdateOneSet", models.ActivityUserFree, "result.ModifiedCount == 0", err), log.Any("activityID", activityID), log.Any("uid", uid), log.Any("freeCount", freeCount), ) return err } return nil }