mh_goadmin_server/app/admin/apis/message/user_message.go
chenlin b3569fad57 1、之前部分接口报错时事务没有回滚,有风险,已优化;
2、添加消息中心相关接口(公告消息、用户消息);
2025-06-27 17:39:36 +08:00

111 lines
2.9 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 message
import (
"github.com/gin-gonic/gin"
"go-admin/app/admin/models"
orm "go-admin/common/global"
"go-admin/tools"
"go-admin/tools/app"
"net/http"
"time"
)
// UserMessageList 用户消息列表
// @Summary 用户消息列表
// @Description 获取当前用户的消息记录
// @Tags 消息中心V1.5.0
// @Accept json
// @Produce json
// @Param data body models.UserMessageListReq true "消息查询参数"
// @Success 200 {object} models.UserMessageListResp
// @Router /api/v1/user_message/list [post]
func UserMessageList(c *gin.Context) {
var req models.UserMessageListReq
if err := c.ShouldBindJSON(&req); err != nil {
app.Error(c, http.StatusBadRequest, nil, "参数错误: "+err.Error())
return
}
if req.Page <= 0 {
req.Page = 1
}
if req.PageSize <= 0 {
req.PageSize = 10
}
userID := tools.GetUserId(c)
query := orm.Eloquent.Where("user_id = ? AND is_visible = ?", userID, true)
if req.IsRead != 0 && req.IsRead != 1 {
app.Error(c, http.StatusBadRequest, nil, "不支持的目标状态")
return
} else {
query = query.Where("is_read = ?", req.IsRead)
}
var total int64
if err := query.Model(&models.SystemUserMessage{}).Count(&total).Error; err != nil {
app.Error(c, http.StatusInternalServerError, nil, "查询总数失败: "+err.Error())
return
}
var messages []models.SystemUserMessage
if err := query.Order("created_at desc").
Offset((req.Page - 1) * req.PageSize).
Limit(req.PageSize).
Find(&messages).Error; err != nil {
app.Error(c, http.StatusInternalServerError, nil, "查询列表失败: "+err.Error())
return
}
app.OK(c, models.UserMessageListResp{
List: messages,
Total: total,
Page: req.Page,
PageSize: req.PageSize,
}, "查询成功")
}
// UserMessageSetStatus 设置用户消息为已读(支持单条或全部)
// @Summary 设置用户消息为已读
// @Description 设为单条或全部已读
// @Tags 消息中心V1.5.0
// @Accept json
// @Produce json
// @Param data body models.UserMessageSetStatusReq true "设置参数"
// @Success 200 {object} app.Response
// @Router /api/v1/user_message/set_status [post]
func UserMessageSetStatus(c *gin.Context) {
var req models.UserMessageSetStatusReq
if err := c.ShouldBindJSON(&req); err != nil {
app.Error(c, http.StatusBadRequest, nil, "参数错误: "+err.Error())
return
}
userID := tools.GetUserId(c)
now := time.Now()
query := orm.Eloquent.Model(&models.SystemUserMessage{}).
Where("user_id = ? AND is_read = ?", userID, false)
if req.ReadAll {
// 全部设为已读
} else {
if req.ID == 0 {
app.Error(c, http.StatusBadRequest, nil, "参数错误: 未提供消息ID")
return
}
query = query.Where("id = ?", req.ID)
}
err := query.Updates(map[string]interface{}{
"is_read": true,
"read_time": &now,
}).Error
if err != nil {
app.Error(c, http.StatusInternalServerError, nil, "设置失败: "+err.Error())
return
}
app.OK(c, nil, "设置成功")
}