package playlettopicgroupmod import ( "context" "fmt" "time" "videoweb/pub/common/log" "videoweb/pub/common/srvdef" "videoweb/pub/mongos" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" ) var coll *mongos.Collection // Init 初始化专题区块集合 func Init(ctx context.Context) { coll = mongos.Shop.Coll("playlet_topic_group") _, err := coll.CreateIndex(ctx, []mongo.IndexModel{{Keys: bson.D{ {Key: "status", Value: 1}, {Key: "rank", Value: -1}, {Key: "_id", Value: -1}, }}}) if err != nil { panic(fmt.Sprintf("playlettopicgroupmod.Init index failed: %v", err)) } } // Insert 新增专题区块 func Insert(ctx context.Context, doc *PlayletTopicGroup) *srvdef.SrvErr { doc.Id = mongos.Lid.PlayletTopicGroup.Get() now := time.Now() doc.CreatedAt, doc.UpdatedAt = now, now if _, err := coll.InsertOne(ctx, doc); err != nil { log.Warn("playlettopicgroupmod.Insert failed", log.E(err)) return srvdef.New(srvdef.ErrDbInsertError, "", "") } return nil } // FindOne 按ID查询专题区块 func FindOne(ctx context.Context, id int64) (*PlayletTopicGroup, *srvdef.SrvErr) { var doc PlayletTopicGroup if err := coll.FindOneEx(ctx, &doc, bson.M{"_id": id}); err != nil { if err == mongo.ErrNoDocuments { return nil, srvdef.New(srvdef.ErrNoData, "专题区块不存在", "") } log.Warn("playlettopicgroupmod.FindOne failed", log.E(err)) return nil, srvdef.New(srvdef.ErrDbQueryError, "", "") } return &doc, nil } // FindMany 查询专题区块列表 func FindMany(ctx context.Context, filter bson.M, opts ...*options.FindOptions) (PlayletTopicGroupList, *srvdef.SrvErr) { list := make(PlayletTopicGroupList, 0) opt := options.Find().SetSort(bson.D{ {Key: "rank", Value: -1}, {Key: "_id", Value: -1}, }) for _, extra := range opts { if extra == nil { continue } if extra.Skip != nil { opt.SetSkip(*extra.Skip) } if extra.Limit != nil { opt.SetLimit(*extra.Limit) } } if err := coll.Find(ctx, &list, filter, opt); err != nil { log.Warn("playlettopicgroupmod.FindMany failed", log.E(err)) return nil, srvdef.New(srvdef.ErrDbQueryError, "", "") } return list, nil } // Count 统计符合条件的专题区块数量 func Count(ctx context.Context, filter bson.M) (int64, *srvdef.SrvErr) { count, err := coll.Count(ctx, filter) if err != nil { log.Warn("playlettopicgroupmod.Count failed", log.E(err)) return 0, srvdef.New(srvdef.ErrDbQueryError, "", "") } return count, nil } // Update 更新专题区块 func Update(ctx context.Context, id int64, set bson.M) *srvdef.SrvErr { set["updatedAt"] = time.Now() result, err := coll.UpdateOne(ctx, bson.M{"_id": id}, bson.M{"$set": set}) if err != nil { log.Warn("playlettopicgroupmod.Update failed", log.E(err)) return srvdef.New(srvdef.ErrDbUpdateError, "", "") } if result.MatchedCount == 0 { return srvdef.New(srvdef.ErrNoData, "专题区块不存在", "") } return nil } // Delete 删除专题区块 func Delete(ctx context.Context, id int64) *srvdef.SrvErr { count, err := coll.DeleteOne(ctx, bson.M{"_id": id}) if err != nil { log.Warn("playlettopicgroupmod.Delete failed", log.E(err)) return srvdef.New(srvdef.ErrDbDeleteError, "", "") } if count == 0 { return srvdef.New(srvdef.ErrNoData, "专题区块不存在", "") } return nil }