114 lines
3.3 KiB
Go
114 lines
3.3 KiB
Go
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
|
|
}
|