Files
goalfylearning-admin/internal/api/handlers/message_push_handler.go

135 lines
3.0 KiB
Go

package handlers
import (
"strconv"
"goalfymax-admin/internal/models"
"goalfymax-admin/internal/services"
"goalfymax-admin/pkg/utils"
"github.com/gin-gonic/gin"
)
// MessagePushHandler 消息推送处理器
type MessagePushHandler struct {
service services.MessagePushService
response *utils.Response
}
// NewMessagePushHandler 创建消息推送处理器
func NewMessagePushHandler(service services.MessagePushService) *MessagePushHandler {
return &MessagePushHandler{
service: service,
response: utils.NewResponse(),
}
}
// SendMessage 发送消息
func (h *MessagePushHandler) SendMessage(c *gin.Context) {
var req models.MessagePushRequest
if err := c.ShouldBindJSON(&req); err != nil {
h.response.ValidateError(c, err)
return
}
// 获取当前用户信息
userID, exists := c.Get("user_id")
if !exists {
h.response.Unauthorized(c, "无法获取用户信息")
return
}
// 处理用户ID类型
var senderID int
switch v := userID.(type) {
case int:
senderID = v
case uint:
senderID = int(v)
case string:
var err error
senderID, err = strconv.Atoi(v)
if err != nil {
h.response.InternalServerError(c, "用户ID格式错误")
return
}
default:
h.response.InternalServerError(c, "用户ID格式错误")
return
}
// 获取发送人姓名(从用户信息中获取)
senderName := "系统管理员"
if user, exists := c.Get("user"); exists {
if userInfo, ok := user.(map[string]interface{}); ok {
if name, ok := userInfo["name"].(string); ok {
senderName = name
}
}
}
result, err := h.service.SendMessage(c.Request.Context(), &req, senderID, senderName)
if err != nil {
h.response.InternalServerError(c, err.Error())
return
}
h.response.Success(c, result)
}
// GetPushLogs 获取推送记录列表
func (h *MessagePushHandler) GetPushLogs(c *gin.Context) {
var req models.MessagePushListRequest
if err := c.ShouldBindQuery(&req); err != nil {
h.response.ValidateError(c, err)
return
}
result, err := h.service.GetPushLogs(c.Request.Context(), &req)
if err != nil {
h.response.InternalServerError(c, err.Error())
return
}
h.response.Success(c, result)
}
// GetPushLogByID 根据ID获取推送记录
func (h *MessagePushHandler) GetPushLogByID(c *gin.Context) {
idStr := c.Param("id")
id, err := strconv.ParseInt(idStr, 10, 64)
if err != nil {
h.response.BadRequest(c, "无效的推送记录ID")
return
}
log, err := h.service.GetPushLogByID(c.Request.Context(), id)
if err != nil {
if err.Error() == "推送记录不存在" {
h.response.NotFound(c, "推送记录不存在")
return
}
h.response.InternalServerError(c, err.Error())
return
}
h.response.Success(c, log)
}
// SearchUsers 搜索用户
func (h *MessagePushHandler) SearchUsers(c *gin.Context) {
var req models.UserSearchRequest
if err := c.ShouldBindQuery(&req); err != nil {
h.response.ValidateError(c, err)
return
}
result, err := h.service.SearchUsers(c.Request.Context(), &req)
if err != nil {
h.response.InternalServerError(c, err.Error())
return
}
h.response.Success(c, result)
}