feat: 实时消息与管理端运营能力
新增群聊/私信与公共 WebSocket 总线,站长用户内容档案,并将通知与待审角标改为推送驱动;同步精简管理仪表盘并修复主题换肤 DOM 冲突。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -158,9 +158,9 @@ func (s *ModerationService) PendingCounts(actor *Actor) (posts int64, comments i
|
||||
return
|
||||
}
|
||||
|
||||
// ApprovePost 帖子审核通过
|
||||
func (s *ModerationService) ApprovePost(actor *Actor, id uint) error {
|
||||
return s.db.Transaction(func(tx *gorm.DB) error {
|
||||
// ApprovePost 帖子审核通过;成功时返回板块 ID 供 feed 广播
|
||||
func (s *ModerationService) ApprovePost(actor *Actor, id uint) (boardID uint, err error) {
|
||||
err = s.db.Transaction(func(tx *gorm.DB) error {
|
||||
var post model.Post
|
||||
if err := tx.First(&post, id).Error; err != nil {
|
||||
return err
|
||||
@@ -174,10 +174,12 @@ func (s *ModerationService) ApprovePost(actor *Actor, id uint) error {
|
||||
if err := tx.Model(&post).Update("status", model.ContentStatusPublished).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
boardID = post.BoardID
|
||||
s.notif.Create(post.UserID, actor.ID, model.NotificationTypeApproved, post.ID, 0,
|
||||
"你的帖子《"+post.Title+"》已通过审核")
|
||||
return nil
|
||||
})
|
||||
return boardID, err
|
||||
}
|
||||
|
||||
// RejectPost 帖子审核拒绝(标记 rejected,不物理删除;作者仍可在详情页看到结果)
|
||||
@@ -202,15 +204,15 @@ func (s *ModerationService) RejectPost(actor *Actor, id uint) error {
|
||||
})
|
||||
}
|
||||
|
||||
// ApproveComment 评论审核通过(通过时才计入帖子评论数)
|
||||
func (s *ModerationService) ApproveComment(actor *Actor, id uint) error {
|
||||
return s.db.Transaction(func(tx *gorm.DB) error {
|
||||
// ApproveComment 评论审核通过(通过时才计入帖子评论数);成功时返回帖子 ID 与板块 ID
|
||||
func (s *ModerationService) ApproveComment(actor *Actor, id uint) (postID, boardID uint, err error) {
|
||||
err = s.db.Transaction(func(tx *gorm.DB) error {
|
||||
var cm model.Comment
|
||||
if err := tx.First(&cm, id).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
var post model.Post
|
||||
if err := tx.Select("id", "board_id", "title").First(&post, cm.PostID).Error; err != nil {
|
||||
if err := tx.Select("id", "board_id", "title", "user_id").First(&post, cm.PostID).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
if !actor.CanModerateBoard(post.BoardID) {
|
||||
@@ -226,6 +228,8 @@ func (s *ModerationService) ApproveComment(actor *Actor, id uint) error {
|
||||
UpdateColumn("comment_count", gorm.Expr("comment_count + 1")).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
postID = cm.PostID
|
||||
boardID = post.BoardID
|
||||
s.notif.Create(cm.UserID, actor.ID, model.NotificationTypeApproved, cm.PostID, cm.ID,
|
||||
"你在帖子《"+post.Title+"》下的评论已通过审核")
|
||||
// 评论此时才公开,补发送业务通知(以评论者为 actor):
|
||||
@@ -240,6 +244,7 @@ func (s *ModerationService) ApproveComment(actor *Actor, id uint) error {
|
||||
}
|
||||
return nil
|
||||
})
|
||||
return postID, boardID, err
|
||||
}
|
||||
|
||||
// RejectComment 评论审核拒绝
|
||||
|
||||
Reference in New Issue
Block a user