135 lines
3.0 KiB
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)
|
|
}
|