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) }