- auth_controller.go(238→54): 拆出auth_api_login.go(107)+auth_api_register.go(96) - settings_controller.go(289→101): 拆出settings_api_profile(116)+account(59)+error_handlers(41) - message_controller.go(129→85): 拆出message_page_controller.go(55) - 所有拆分后文件均≤120行,符合code-style.md瘦控制器规范
86 lines
2.1 KiB
Go
86 lines
2.1 KiB
Go
package controller
|
||
|
||
import (
|
||
"net/http"
|
||
"strconv"
|
||
|
||
"metazone.cc/metalab/internal/common"
|
||
"metazone.cc/metalab/internal/model"
|
||
|
||
"github.com/gin-gonic/gin"
|
||
)
|
||
|
||
// notifProvider MessageController 所需的通知服务接口(ISP:4 个方法)
|
||
type notifProvider interface {
|
||
List(userID uint, 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, "已全部标为已读")
|
||
}
|