package handler import ( "github.com/freefire/jiang13-bbs/config" "github.com/freefire/jiang13-bbs/model" "github.com/freefire/jiang13-bbs/realtime" "github.com/freefire/jiang13-bbs/service" "github.com/gin-gonic/gin" ) // Handlers 聚合所有服务引用 type Handlers struct { Cfg *config.Config Hub *realtime.Hub Auth *service.AuthService Board *service.BoardService Post *service.PostService Comment *service.CommentService Like *service.LikeService Notification *service.NotificationService OverviewSvc *service.OverviewService Checkin *service.CheckinService Announcement *service.AnnouncementService Upload *service.UploadService PostFile *service.PostFileService Points *service.PointsService Setting *service.SettingService AdminUser *service.AdminUserService Moderation *service.ModerationService Chat *service.ChatService } // broadcastFeedChanged 帖子流有公开发布内容时全员广播(三期) func (h *Handlers) broadcastFeedChanged(kind string, postID, boardID, actorID uint) { if h.Hub == nil { return } h.Hub.BroadcastAll(realtime.Envelope{ Type: realtime.EventFeedChanged, Data: gin.H{ "kind": kind, "post_id": postID, "board_id": boardID, "actor_id": actorID, }, }) } // notifyPendingReview 待审内容通知该板可审者(WS 红点由 Notification.OnNotifyNew 统一推送) func (h *Handlers) notifyPendingReview(boardID, actorID, postID, commentID uint, preview string) { ids, err := h.Auth.ListBoardModeratorIDs(boardID) if err != nil || len(ids) == 0 { return } for _, uid := range ids { if uid == actorID { continue } h.Notification.Create(uid, actorID, model.NotificationTypePendingReview, postID, commentID, preview) } h.broadcastModerationChanged() } // broadcastModerationChanged 通知管理团队待审队列有变化(角标由客户端按权限再拉一次) func (h *Handlers) broadcastModerationChanged() { if h.Hub == nil { return } h.Hub.BroadcastRoom(realtime.RoomStaff, realtime.Envelope{ Type: realtime.EventModerationChanged, }) }