init: web_hgdjc_server
This commit is contained in:
@@ -0,0 +1,113 @@
|
||||
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
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package playlettopicgroupmod
|
||||
|
||||
import "time"
|
||||
|
||||
// PlayletTopicGroup 专题页区块
|
||||
type PlayletTopicGroup struct {
|
||||
Id int64 `json:"id" bson:"_id,omitempty"` // 专题区块ID
|
||||
Name string `json:"name" bson:"name"` // 专题区块名称
|
||||
Desc string `json:"desc" bson:"desc"` // 专题区块描述
|
||||
TopicIds []int64 `json:"topicIds" bson:"topicIds"` // 关联专题ID,数组顺序即展示顺序
|
||||
Rank int64 `json:"rank" bson:"rank"` // 区块排序,越大越靠前
|
||||
Status bool `json:"status" bson:"status"` // 是否启用
|
||||
CreatedAt time.Time `json:"createdAt" bson:"createdAt"` // 创建时间
|
||||
UpdatedAt time.Time `json:"updatedAt" bson:"updatedAt"` // 更新时间
|
||||
}
|
||||
|
||||
type PlayletTopicGroupList []*PlayletTopicGroup
|
||||
Reference in New Issue
Block a user