init: 初始化 web_hgdjb_server 项目

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-11-07 10:47:32 +08:00
co-authored by Claude Opus 4.7
commit f13d33af4d
707 changed files with 147705 additions and 0 deletions
+125
View File
@@ -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
}