init: web_hgdjc_server
This commit is contained in:
@@ -0,0 +1,125 @@
|
||||
package srv_playlet
|
||||
|
||||
import (
|
||||
"context"
|
||||
"strings"
|
||||
"videoweb/pub/common/srvdef"
|
||||
"videoweb/pub/models/playletthememod"
|
||||
"videoweb/pub/models/playlettopicgroupmod"
|
||||
"videoweb/web/api/proto"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/mongo/options"
|
||||
)
|
||||
|
||||
// ListPlayletTopicGroups 查询后台专题区块
|
||||
func ListPlayletTopicGroups(ctx context.Context, req *proto.PlayletTopicGroupListReq) (*proto.PlayletTopicGroupListResp, *srvdef.SrvErr) {
|
||||
if req == nil {
|
||||
return nil, srvdef.New(srvdef.ErrParamError, "", "")
|
||||
}
|
||||
pageNum, pageSize := normalizePage(req.PageNum, req.PageSize)
|
||||
filter := bson.M{}
|
||||
if req.Status != nil {
|
||||
filter["status"] = *req.Status
|
||||
}
|
||||
totalCount, err := playlettopicgroupmod.Count(ctx, filter)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
resp := &proto.PlayletTopicGroupListResp{
|
||||
TotalCount: totalCount, PageNum: int(pageNum), PageSize: int(pageSize),
|
||||
List: make(playlettopicgroupmod.PlayletTopicGroupList, 0),
|
||||
}
|
||||
if totalCount == 0 || (pageNum-1)*pageSize >= totalCount {
|
||||
return resp, nil
|
||||
}
|
||||
list, err := playlettopicgroupmod.FindMany(ctx, filter, options.Find().SetSkip((pageNum-1)*pageSize).SetLimit(pageSize))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
resp.List = list
|
||||
return resp, nil
|
||||
}
|
||||
|
||||
// AddPlayletTopicGroup 新增专题区块
|
||||
func AddPlayletTopicGroup(ctx context.Context, req *proto.PlayletTopicGroupAddReq) (*proto.PlayletTopicGroupAddResp, *srvdef.SrvErr) {
|
||||
if req == nil || strings.TrimSpace(req.Name) == "" || req.Status == nil {
|
||||
return nil, srvdef.New(srvdef.ErrParamError, "专题区块参数无效", "")
|
||||
}
|
||||
ids, err := validateTopicGroupIDs(ctx, req.TopicIds)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
doc := &playlettopicgroupmod.PlayletTopicGroup{
|
||||
Name: strings.TrimSpace(req.Name), Desc: strings.TrimSpace(req.Desc),
|
||||
TopicIds: ids, Rank: req.Rank, Status: *req.Status,
|
||||
}
|
||||
if err := playlettopicgroupmod.Insert(ctx, doc); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &proto.PlayletTopicGroupAddResp{Id: doc.Id}, nil
|
||||
}
|
||||
|
||||
// UpdatePlayletTopicGroup 更新专题区块
|
||||
func UpdatePlayletTopicGroup(ctx context.Context, req *proto.PlayletTopicGroupUpdateReq) *srvdef.SrvErr {
|
||||
if req == nil || req.Id <= 0 {
|
||||
return srvdef.New(srvdef.ErrParamError, "专题区块ID无效", "")
|
||||
}
|
||||
set := bson.M{}
|
||||
if req.Name != nil {
|
||||
name := strings.TrimSpace(*req.Name)
|
||||
if name == "" {
|
||||
return srvdef.New(srvdef.ErrParamError, "专题区块名称不能为空", "")
|
||||
}
|
||||
set["name"] = name
|
||||
}
|
||||
if req.Desc != nil {
|
||||
set["desc"] = strings.TrimSpace(*req.Desc)
|
||||
}
|
||||
if req.TopicIds != nil {
|
||||
ids, err := validateTopicGroupIDs(ctx, *req.TopicIds)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
set["topicIds"] = ids
|
||||
}
|
||||
if req.Rank != nil {
|
||||
set["rank"] = *req.Rank
|
||||
}
|
||||
if req.Status != nil {
|
||||
set["status"] = *req.Status
|
||||
}
|
||||
if len(set) == 0 {
|
||||
return srvdef.New(srvdef.ErrParamError, "没有可更新字段", "")
|
||||
}
|
||||
return playlettopicgroupmod.Update(ctx, req.Id, set)
|
||||
}
|
||||
|
||||
// DeletePlayletTopicGroup 删除专题区块
|
||||
func DeletePlayletTopicGroup(ctx context.Context, id int64) *srvdef.SrvErr {
|
||||
if id <= 0 {
|
||||
return srvdef.New(srvdef.ErrParamError, "专题区块ID无效", "")
|
||||
}
|
||||
return playlettopicgroupmod.Delete(ctx, id)
|
||||
}
|
||||
|
||||
func validateTopicGroupIDs(ctx context.Context, ids []int64) ([]int64, *srvdef.SrvErr) {
|
||||
if len(ids) == 0 {
|
||||
return []int64{}, nil
|
||||
}
|
||||
seen := make(map[int64]bool, len(ids))
|
||||
for _, id := range ids {
|
||||
if id <= 0 || seen[id] {
|
||||
return nil, srvdef.New(srvdef.ErrParamError, "专题ID无效或重复", "")
|
||||
}
|
||||
seen[id] = true
|
||||
}
|
||||
count, err := playletthememod.CountPlayletTheme(ctx, bson.M{playletthememod.FN.PlayletTheme.Id: bson.M{"$in": ids}})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if count != int64(len(ids)) {
|
||||
return nil, srvdef.New(srvdef.ErrParamError, "专题不存在", "")
|
||||
}
|
||||
return ids, nil
|
||||
}
|
||||
Reference in New Issue
Block a user