package controller
import (
"com.zhangmeng/go-wechat/common"
"com.zhangmeng/go-wechat/models"
"com.zhangmeng/go-wechat/service"
"com.zhangmeng/go-wechat/service/impl"
"github.com/gin-gonic/gin"
)
type MessageController struct {
messageService service.IMessageService
}
func NewMessageController() *MessageController {
return &MessageController{
messageService: &impl.MessageService{},
}
}
func RegisterMessageRoute(r *gin.RouterGroup) {
mc := NewMessageController()
apiGroup := r.Group("/api")
apiGroup.Use(common.JWTAuth())
{
apiGroup.GET("/conversations", mc.GetConversationList)
apiGroup.GET("/messages/history", mc.GetMessageHistory)
}
}
func (mc *MessageController) GetConversationList(c *gin.Context) {
userID := c.MustGet("userID").(uint64)
conversations, err := mc.messageService.GetConversationList(userID)
if err != nil {
c.JSON(200, common.Fail(err.Error()))
return
}
c.JSON(200, common.Success(conversations))
}
func (mc *MessageController) GetMessageHistory(c *gin.Context) {
var req models.GetHistoryRequest
if err := c.ShouldBindQuery(&req); err != nil {
c.JSON(200, common.Fail("参数错误: "+err.Error()))
return
}
if req.Page < 1 {
req.Page = 1
}
if req.PageSize < 1 || req.PageSize > 100 {
req.PageSize = 20
}
userID := c.MustGet("userID").(uint64)
var messages []models.ChatMessage
var total int64
var err error
if req.Type == 1 {
messages, total, err = mc.messageService.GetPrivateMessages(userID, req.TargetID, req.Page, req.PageSize)
} else {
messages, total, err = mc.messageService.GetGroupMessages(userID, req.TargetID, req.Page, req.PageSize)
}
if err != nil {
c.JSON(200, common.Fail(err.Error()))
return
}
c.JSON(200, common.Success(gin.H{
"list": messages,
"total": total,
"page": req.Page,
"page_size": req.PageSize,
}))
}