package officialmod import ( "91porn-server/common" "91porn-server/common/db" "91porn-server/common/localcache" "91porn-server/common/log" "91porn-server/models" "encoding/json" "fmt" "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" "time" ) var mdb *db.MongoDB const table = models.OfficialConfig // Coll 获取表名 func coll(t *db.MongoTool) *db.MongoTool { if t == nil { return mdb.Coll(table) } return t.Coll(table) } // InitIndex 初始化索引 func initIndex() { many := []mongo.IndexModel{ { Keys: bson.D{{"officialName", 1}}, }, { Keys: bson.D{{"officialType", 1}}, }, { Keys: bson.D{{"updatedAt", 1}}, }, { Keys: bson.D{{"isActive", 1}}, }, } _, err := coll(nil).CreateIndex(many) if err != nil { panic(fmt.Sprintf("%s model set index err ==>[%+v]", table, err)) } return } // InsertOne 新增 func InsertOne(t *OfficialConfig) (data primitive.ObjectID, err error) { result, err := coll(nil).InsertOne(&t) if err != nil { log.Error(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "InsertOne", table, "InsertOne", err)) return } byteID, err := json.Marshal(result.InsertedID) if err != nil { log.Error(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "InsertOne", table, "Marshal", err)) return } err = data.UnmarshalJSON(byteID) if err != nil { log.Error(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "InsertOne", table, "UnmarshalJSON", err)) return } return } // QueryAll 查询配置列表 func QueryAll(in *QueryAllCond, opts ...*options.FindOptions) ([]*OfficialConfig, error) { var out []*OfficialConfig = []*OfficialConfig{} fliter := bson.M{} if in.Status != nil { fliter["isActive"] = in.Status } if in.OfficialType != "" { fliter["officialType"] = in.OfficialType } if err := coll(nil).Find(&out, fliter, opts...); err != nil { log.Error(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "QueryAll", models.Activity, "Find", err), log.Any("filter", fliter), ) return nil, err } return out, nil } // Count 查询总条数 func Count(filter primitive.M) (int64, error) { if count, err := coll(nil).Count(filter); err != nil { log.Error(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "Count", models.Activity, "Count", err), log.Any("filter", filter), ) return 0, err } else { return count, nil } } // UpdateOneOfficiaByID 编辑标签 func UpdateOneOfficiaByID(id primitive.ObjectID, doc OfficiaUpdateDoc) (err error) { docM, err := common.ToBsonM(doc) if err != nil { log.Error(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "UpdateOneOfficiaByID", table, "ToBsonM", err), log.Any("id", id), log.Any("doc", doc), ) return } update := bson.M{} update["$set"] = docM _, err = coll(nil).UpdateOne(bson.M{"_id": id}, update) if err != nil { log.Error(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "UpdateOneOfficiaByID", table, "UpdateOne", err), log.Any("id", id), log.Any("doc", doc), ) return } return } // DeleteOfficias 删除标签 func DeleteOfficias(ids []primitive.ObjectID) (int64, error) { if ids == nil { ids = []primitive.ObjectID{} } cond := bson.M{"_id": bson.M{"$in": ids}} result, err := coll(nil).DeleteMany(cond) if err != nil { log.Error(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "DeleteOfficias", table, "DeleteMany", err), log.Any("ids", ids)) return 0, err } return result.DeletedCount, nil } // FindTagByID 根据id获取标签信息 func FindOneTagByID(id primitive.ObjectID) (data OfficialConfig, err error) { err = coll(nil).FindOne(&data, bson.M{"_id": id}) if err != nil { log.Error(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "FindOneTagByID", table, "FindOne", err), log.Any("id", id), ) return } return } // 查询配置列表,app使用 func Query(officialType string) ([]*OfficialConfigApp, error) { var out []*OfficialConfigApp = []*OfficialConfigApp{} fliter := bson.M{"officialType": officialType, "isActive": true} opts := (&options.FindOptions{}).SetSort(bson.D{{"sort", -1}}) if err := coll(nil).Find(&out, fliter, opts); err != nil { log.Error(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "Query", models.Activity, "Find", err), log.Any("filter", fliter), ) return nil, err } return out, nil } func QueryOfficeList() ([]*OfficialConfigApp, error) { cfg, ok := localcache.C.Get(GetOfficialList) if ok { return cfg.([]*OfficialConfigApp), nil } var out []*OfficialConfigApp filter := bson.M{"officialType": "1", "isActive": true, "isHomepageAds": true} opts := (&options.FindOptions{}).SetSort(bson.D{{"sort", -1}}) if err := coll(nil).Find(&out, filter, opts); err != nil { log.Error(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "Query", models.Activity, "QueryOfficeList", err), log.Any("filter", filter), ) return nil, err } common.Go(func() { localcache.C.Set(GetOfficialList, out, 5*time.Minute) }) return out, nil }