Initial commit

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-23 11:07:42 +08:00
co-authored by Claude Opus 5.5
commit 7974a42301
633 changed files with 120248 additions and 0 deletions
@@ -0,0 +1,101 @@
package srv_announcement
import (
"context"
"time"
"videoweb/pub/common/srvdef"
"videoweb/pub/models/announcementmod"
"videoweb/pub/mongos"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo/options"
)
func GetAnnouncementList(ctx context.Context, req *GetAnnouncementListReq) (*GetAnnouncementListResp, *srvdef.SrvErr) {
filter := bson.M{}
if req.Title != nil && *req.Title != "" {
filter[announcementmod.FN.Announcement.Title] = bson.M{"$regex": *req.Title, "$options": "i"}
}
if req.Status != nil {
filter[announcementmod.FN.Announcement.Status] = *req.Status
}
count, serr := announcementmod.CountAnnouncement(ctx, filter)
if serr != nil {
return nil, serr
}
if count == 0 {
return &GetAnnouncementListResp{
Total: 0,
List: make(announcementmod.AnnouncementList, 0),
}, nil
}
opts := options.FindOptions{}
opts.SetSort(bson.D{
{Key: announcementmod.FN.Announcement.Sort, Value: -1},
{Key: announcementmod.FN.Announcement.CreatedAt, Value: -1},
})
opts.SetLimit(req.PageSize)
opts.SetSkip((req.PageNum - 1) * req.PageSize)
list, serr := announcementmod.FindManyAnnouncement(ctx, filter, &opts)
if serr != nil {
return nil, serr
}
return &GetAnnouncementListResp{
Total: count,
List: list,
}, nil
}
func AddAnnouncement(ctx context.Context, req *AddAnnouncementReq) *srvdef.SrvErr {
now := time.Now()
status := true
if req.Status != nil {
status = *req.Status
}
doc := &announcementmod.Announcement{
Id: mongos.Lid.Announcement.Get(),
Title: req.Title,
Content: req.Content,
Sort: req.Sort,
Status: status,
CreatedAt: now,
UpdatedAt: now,
}
return announcementmod.InsertOneAnnouncement(ctx, doc)
}
func UpdateAnnouncement(ctx context.Context, req *UpdateAnnouncementReq) *srvdef.SrvErr {
filter := bson.M{announcementmod.FN.Announcement.Id: req.Id}
updateFields := bson.M{
announcementmod.FN.Announcement.UpdatedAt: time.Now(),
}
if req.Param.Title != nil {
updateFields[announcementmod.FN.Announcement.Title] = *req.Param.Title
}
if req.Param.Content != nil {
updateFields[announcementmod.FN.Announcement.Content] = *req.Param.Content
}
if req.Param.Sort != nil {
updateFields[announcementmod.FN.Announcement.Sort] = *req.Param.Sort
}
if req.Param.Status != nil {
updateFields[announcementmod.FN.Announcement.Status] = *req.Param.Status
}
return announcementmod.UpdateOneAnnouncement(ctx, filter, bson.M{"$set": updateFields})
}
func DelAnnouncement(ctx context.Context, req *DelAnnouncementReq) *srvdef.SrvErr {
filter := bson.M{announcementmod.FN.Announcement.Id: req.Id}
count, serr := announcementmod.DelOneAnnouncement(ctx, filter)
if serr != nil {
return serr
}
if count == 0 {
return srvdef.New(srvdef.ErrAnnouncementNotExsit, "", "")
}
return nil
}
+40
View File
@@ -0,0 +1,40 @@
package srv_announcement
import (
"videoweb/pub/models/announcementmod"
"videoweb/pub/pubdef"
)
type GetAnnouncementListReq struct {
Title *string `json:"title"` // 标题,模糊搜索
Status *bool `json:"status"` // 是否启用
pubdef.Page
}
type GetAnnouncementListResp struct {
Total int64 `json:"total"`
List announcementmod.AnnouncementList `json:"list"`
}
type AddAnnouncementReq struct {
Title string `json:"title" binding:"required"` // 标题
Content string `json:"content"` // 内容
Sort int64 `json:"sort"` // 排序,越大越靠前
Status *bool `json:"status"` // 是否启用
}
type UpdateAnnouncementReq struct {
Id int64 `json:"id" binding:"required"`
Param UpdateAnnouncementParam `json:"param"`
}
type UpdateAnnouncementParam struct {
Title *string `json:"title"`
Content *string `json:"content"`
Sort *int64 `json:"sort"`
Status *bool `json:"status"`
}
type DelAnnouncementReq struct {
Id int64 `json:"id" binding:"required"`
}