Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
111 lines
2.8 KiB
Go
111 lines
2.8 KiB
Go
package srv_detailnav
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
"videoweb/pub/common/srvdef"
|
|
"videoweb/pub/models/detailnavmod"
|
|
|
|
"go.mongodb.org/mongo-driver/bson"
|
|
"go.mongodb.org/mongo-driver/bson/primitive"
|
|
"go.mongodb.org/mongo-driver/mongo/options"
|
|
)
|
|
|
|
// GetDetailNavList 获取详情页导航列表
|
|
func GetDetailNavList(ctx context.Context, req *GetDetailNavListReq) (*GetDetailNavListResp, *srvdef.SrvErr) {
|
|
filter := bson.M{}
|
|
|
|
count, serr := detailnavmod.CountDetailNav(ctx, filter)
|
|
if serr != nil {
|
|
return nil, serr
|
|
}
|
|
if count == 0 {
|
|
return &GetDetailNavListResp{
|
|
Total: 0,
|
|
List: make(detailnavmod.DetailNavModelList, 0),
|
|
}, nil
|
|
}
|
|
|
|
opts := options.FindOptions{}
|
|
opts.SetSort(bson.D{
|
|
{Key: detailnavmod.FN.DetailNavModel.Sort, Value: 1},
|
|
{Key: detailnavmod.FN.DetailNavModel.CreatedAt, Value: -1},
|
|
})
|
|
opts.SetLimit(req.PageSize)
|
|
opts.SetSkip((req.PageNum - 1) * req.PageSize)
|
|
|
|
list, serr := detailnavmod.FindManyDetailNav(ctx, filter, &opts)
|
|
if serr != nil {
|
|
return nil, serr
|
|
}
|
|
|
|
return &GetDetailNavListResp{
|
|
Total: count,
|
|
List: list,
|
|
}, nil
|
|
}
|
|
|
|
// AddDetailNav 添加详情页导航
|
|
func AddDetailNav(ctx context.Context, req *AddDetailNavReq) *srvdef.SrvErr {
|
|
now := time.Now()
|
|
status := true
|
|
if req.Status != nil {
|
|
status = *req.Status
|
|
}
|
|
doc := &detailnavmod.DetailNavModel{
|
|
ID: primitive.NewObjectID(),
|
|
Name: req.Name,
|
|
Url: req.Url,
|
|
Sort: req.Sort,
|
|
Status: status,
|
|
CreatedAt: now,
|
|
UpdatedAt: now,
|
|
}
|
|
return detailnavmod.InsertOneDetailNav(ctx, doc)
|
|
}
|
|
|
|
// UpdateDetailNav 更新详情页导航
|
|
func UpdateDetailNav(ctx context.Context, req *UpdateDetailNavReq) *srvdef.SrvErr {
|
|
objId, err := primitive.ObjectIDFromHex(req.Id)
|
|
if err != nil {
|
|
return srvdef.New(srvdef.ErrParamError, "", "")
|
|
}
|
|
|
|
filter := bson.M{detailnavmod.FN.DetailNavModel.ID: objId}
|
|
updateFields := bson.M{
|
|
detailnavmod.FN.DetailNavModel.UpdatedAt: time.Now(),
|
|
}
|
|
if req.Param.Name != nil {
|
|
updateFields[detailnavmod.FN.DetailNavModel.Name] = *req.Param.Name
|
|
}
|
|
if req.Param.Url != nil {
|
|
updateFields[detailnavmod.FN.DetailNavModel.Url] = *req.Param.Url
|
|
}
|
|
if req.Param.Sort != nil {
|
|
updateFields[detailnavmod.FN.DetailNavModel.Sort] = *req.Param.Sort
|
|
}
|
|
if req.Param.Status != nil {
|
|
updateFields[detailnavmod.FN.DetailNavModel.Status] = *req.Param.Status
|
|
}
|
|
|
|
return detailnavmod.UpdateOneDetailNav(ctx, filter, bson.M{"$set": updateFields})
|
|
}
|
|
|
|
// DelDetailNav 删除详情页导航
|
|
func DelDetailNav(ctx context.Context, req *DelDetailNavReq) *srvdef.SrvErr {
|
|
objId, err := primitive.ObjectIDFromHex(req.Id)
|
|
if err != nil {
|
|
return srvdef.New(srvdef.ErrParamError, "", "")
|
|
}
|
|
|
|
filter := bson.M{detailnavmod.FN.DetailNavModel.ID: objId}
|
|
count, serr := detailnavmod.DelOneDetailNav(ctx, filter)
|
|
if serr != nil {
|
|
return serr
|
|
}
|
|
if count == 0 {
|
|
return srvdef.New(srvdef.ErrNoData, "", "")
|
|
}
|
|
return nil
|
|
}
|