From c1cf3ed761ac52dfce53ff344ee9619a07a16a38 Mon Sep 17 00:00:00 2001 From: summer <> Date: Thu, 16 Oct 2025 17:55:25 +0800 Subject: [PATCH] =?UTF-8?q?feat(1.0):=20=E6=96=B0=E5=A2=9E=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E5=8F=91=E9=80=81=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/docs.go | 81 +++++++++++++++++++++++ docs/swagger.json | 81 +++++++++++++++++++++++ docs/swagger.yaml | 56 ++++++++++++++++ internal/api/message/message_list.go | 2 +- internal/api/message/message_send_user.go | 69 +++++++++++++++++++ internal/router/router.go | 3 +- 6 files changed, 290 insertions(+), 2 deletions(-) create mode 100644 internal/api/message/message_send_user.go diff --git a/docs/docs.go b/docs/docs.go index 9d4ad9e..2376ad0 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -768,6 +768,46 @@ const docTemplate = `{ } } } + }, + "/app/send_message": { + "post": { + "description": "用户发送消息", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "消息" + ], + "summary": "用户发送消息", + "parameters": [ + { + "description": "请求参数", + "name": "RequestBody", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/message.userSendMessageRequest" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/message.userSendMessageResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/code.Failure" + } + } + } + } } }, "definitions": { @@ -1296,6 +1336,47 @@ const docTemplate = `{ } } }, + "message.userSendMessageRequest": { + "type": "object", + "required": [ + "app_id", + "content", + "from_user_id", + "from_user_name", + "msg_type" + ], + "properties": { + "app_id": { + "description": "小程序ID", + "type": "string" + }, + "content": { + "description": "内容", + "type": "string" + }, + "from_user_id": { + "description": "发送用户的ID", + "type": "string" + }, + "from_user_name": { + "description": "发送用户的昵称", + "type": "string" + }, + "msg_type": { + "description": "消息类型(1:文本 2:图片)", + "type": "integer" + } + } + }, + "message.userSendMessageResponse": { + "type": "object", + "properties": { + "message": { + "description": "提示信息", + "type": "string" + } + } + }, "upload.uploadImageResponse": { "type": "object", "properties": { diff --git a/docs/swagger.json b/docs/swagger.json index 93d9631..443c3bd 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -760,6 +760,46 @@ } } } + }, + "/app/send_message": { + "post": { + "description": "用户发送消息", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "消息" + ], + "summary": "用户发送消息", + "parameters": [ + { + "description": "请求参数", + "name": "RequestBody", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/message.userSendMessageRequest" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/message.userSendMessageResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/code.Failure" + } + } + } + } } }, "definitions": { @@ -1288,6 +1328,47 @@ } } }, + "message.userSendMessageRequest": { + "type": "object", + "required": [ + "app_id", + "content", + "from_user_id", + "from_user_name", + "msg_type" + ], + "properties": { + "app_id": { + "description": "小程序ID", + "type": "string" + }, + "content": { + "description": "内容", + "type": "string" + }, + "from_user_id": { + "description": "发送用户的ID", + "type": "string" + }, + "from_user_name": { + "description": "发送用户的昵称", + "type": "string" + }, + "msg_type": { + "description": "消息类型(1:文本 2:图片)", + "type": "integer" + } + } + }, + "message.userSendMessageResponse": { + "type": "object", + "properties": { + "message": { + "description": "提示信息", + "type": "string" + } + } + }, "upload.uploadImageResponse": { "type": "object", "properties": { diff --git a/docs/swagger.yaml b/docs/swagger.yaml index b329b99..b962bcc 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -370,6 +370,36 @@ definitions: description: 发送人昵称 type: string type: object + message.userSendMessageRequest: + properties: + app_id: + description: 小程序ID + type: string + content: + description: 内容 + type: string + from_user_id: + description: 发送用户的ID + type: string + from_user_name: + description: 发送用户的昵称 + type: string + msg_type: + description: 消息类型(1:文本 2:图片) + type: integer + required: + - app_id + - content + - from_user_id + - from_user_name + - msg_type + type: object + message.userSendMessageResponse: + properties: + message: + description: 提示信息 + type: string + type: object upload.uploadImageResponse: properties: preview_image_url: @@ -870,6 +900,32 @@ paths: summary: 获取消息日志 tags: - 消息 + /app/send_message: + post: + consumes: + - application/json + description: 用户发送消息 + parameters: + - description: 请求参数 + in: body + name: RequestBody + required: true + schema: + $ref: '#/definitions/message.userSendMessageRequest' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/message.userSendMessageResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/code.Failure' + summary: 用户发送消息 + tags: + - 消息 securityDefinitions: LoginVerifyToken: in: header diff --git a/internal/api/message/message_list.go b/internal/api/message/message_list.go index e980efc..b2c3f84 100644 --- a/internal/api/message/message_list.go +++ b/internal/api/message/message_list.go @@ -80,7 +80,7 @@ func (h *handler) AppMessagePageList() core.HandlerFunc { query := h.readDB.AppMessageLog.WithContext(ctx.RequestContext()). Where(h.readDB.AppMessageLog.AppID.Eq(req.AppID)). - Where(h.readDB.AppMessageLog.SenderID.Eq(req.UserID)) + Where(h.readDB.AppMessageLog.SenderID.Eq(req.UserID)).Or(h.readDB.AppMessageLog.ReceiverID.Eq(req.UserID)) listQueryDB := query.Session(&gorm.Session{}) countQueryDB := query.Session(&gorm.Session{}) diff --git a/internal/api/message/message_send_user.go b/internal/api/message/message_send_user.go new file mode 100644 index 0000000..96208f8 --- /dev/null +++ b/internal/api/message/message_send_user.go @@ -0,0 +1,69 @@ +package message + +import ( + "fmt" + "net/http" + "time" + + "mini-chat/internal/code" + "mini-chat/internal/pkg/core" + "mini-chat/internal/pkg/validation" + "mini-chat/internal/repository/mysql/model" +) + +type userSendMessageRequest struct { + AppID string `json:"app_id" binding:"required"` // 小程序ID + FormUserID string `json:"from_user_id" binding:"required"` // 发送用户的ID + FormUserName string `json:"from_user_name" binding:"required"` // 发送用户的昵称 + MsgType int32 `json:"msg_type" binding:"required"` // 消息类型(1:文本 2:图片) + Content string `json:"content" binding:"required"` // 内容 +} + +type userSendMessageResponse struct { + Message string `json:"message"` // 提示信息 +} + +// UserSendMessage 用户发送消息 +// @Summary 用户发送消息 +// @Description 用户发送消息 +// @Tags 消息 +// @Accept json +// @Produce json +// @Param RequestBody body userSendMessageRequest true "请求参数" +// @Success 200 {object} userSendMessageResponse +// @Failure 400 {object} code.Failure +// @Router /app/send_message [post] +func (h *handler) UserSendMessage() core.HandlerFunc { + return func(ctx core.Context) { + req := new(userSendMessageRequest) + res := new(userSendMessageResponse) + if err := ctx.ShouldBindJSON(req); err != nil { + ctx.AbortWithError(core.Error( + http.StatusBadRequest, + code.ParamBindError, + validation.Error(err)), + ) + return + } + + createData := new(model.AppMessageLog) + createData.AppID = req.AppID + createData.SenderID = req.FormUserID + createData.SenderName = req.FormUserName + createData.Content = req.Content + createData.ReceiverID = "888888" + createData.MsgType = req.MsgType + createData.SendTime = time.Now() + createData.CreatedAt = time.Now() + if err := h.writeDB.AppMessageLog.WithContext(ctx.RequestContext()).Create(createData); err != nil { + ctx.AbortWithError(core.Error( + http.StatusBadRequest, + code.SendMessageError, + fmt.Sprintf("%s: %s", code.Text(code.SendMessageError), err.Error()), + )) + } + + res.Message = "操作成功" + ctx.Payload(res) + } +} diff --git a/internal/router/router.go b/internal/router/router.go index fd77f7f..169bef5 100644 --- a/internal/router/router.go +++ b/internal/router/router.go @@ -61,7 +61,8 @@ func NewHTTPMux(logger logger.CustomLogger, db mysql.Repo, cron cron.Server) (co appNonAuthApiRouter := mux.Group("/app") { - appNonAuthApiRouter.GET("/messages", messageHandler.AppMessagePageList()) // 消息列表 + appNonAuthApiRouter.GET("/messages", messageHandler.AppMessagePageList()) // 消息列表 + appNonAuthApiRouter.POST("/send_message", messageHandler.UserSendMessage()) // 发送消息 } // 管理端认证接口路由组