Files
mce/internal/controller/message_controller.go

87 lines
2.2 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package controller
import (
"net/http"
"strconv"
"metazone.cc/mce/internal/common"
"metazone.cc/mce/internal/model"
"github.com/gin-gonic/gin"
)
// notifProvider MessageController 所需的通知服务接口ISP5 个方法)
type notifProvider interface {
List(userID uint, page, pageSize int) (*model.NotificationListResult, error)
ListByCategory(userID uint, category string, page, pageSize int) (*model.NotificationListResult, error)
CountUnread(userID uint) (int64, error)
MarkRead(id, userID uint) error
MarkAllRead(userID uint) error
}
// MessageController 消息中心控制器
type MessageController struct {
notifService notifProvider
}
// NewMessageController 构造函数
func NewMessageController(notifService notifProvider) *MessageController {
return &MessageController{notifService: notifService}
}
// UnreadCount 获取未读消息数API供导航栏轮询
func (mc *MessageController) UnreadCount(c *gin.Context) {
uidVal, exists := c.Get("uid")
if !exists {
common.Ok(c, gin.H{"unread": 0})
return
}
count, err := mc.notifService.CountUnread(uidVal.(uint))
if err != nil {
common.Ok(c, gin.H{"unread": 0})
return
}
common.Ok(c, gin.H{"unread": count})
}
// MarkRead 标记单条消息已读API
func (mc *MessageController) MarkRead(c *gin.Context) {
uidVal, exists := c.Get("uid")
if !exists {
common.Error(c, http.StatusUnauthorized, "请先登录")
return
}
idStr := c.Param("id")
id, err := strconv.ParseUint(idStr, 10, 64)
if err != nil {
common.Error(c, http.StatusBadRequest, "消息 ID 无效")
return
}
if err := mc.notifService.MarkRead(uint(id), uidVal.(uint)); err != nil {
common.Error(c, http.StatusInternalServerError, "操作失败")
return
}
common.OkMessage(c, "已标记为已读")
}
// MarkAllRead 一键全部已读API
func (mc *MessageController) MarkAllRead(c *gin.Context) {
uidVal, exists := c.Get("uid")
if !exists {
common.Error(c, http.StatusUnauthorized, "请先登录")
return
}
if err := mc.notifService.MarkAllRead(uidVal.(uint)); err != nil {
common.Error(c, http.StatusInternalServerError, "操作失败")
return
}
common.OkMessage(c, "已全部标为已读")
}