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 }