Fixed: response code and header

This commit is contained in:
Aleksandr Soloshenko 2024-02-01 09:26:57 +07:00
parent 29fc8bb3c9
commit 32ea8f0762
3 changed files with 49 additions and 5 deletions

View File

@ -97,10 +97,16 @@
}
],
"responses": {
"201": {
"202": {
"description": "Сообщение поставлено в очередь",
"schema": {
"$ref": "#/definitions/smsgateway.MessageState"
},
"headers": {
"Location": {
"type": "string",
"description": "URL для получения состояния сообщения"
}
}
},
"400": {
@ -340,6 +346,11 @@
"maxLength": 36,
"example": "PyDmBQZZXYmyxMwED8Fzy"
},
"isEncrypted": {
"description": "Зашифровано",
"type": "boolean",
"example": true
},
"message": {
"description": "Текст сообщения",
"type": "string",
@ -390,6 +401,11 @@
"maxLength": 36,
"example": "PyDmBQZZXYmyxMwED8Fzy"
},
"isEncrypted": {
"description": "Зашифровано",
"type": "boolean",
"example": false
},
"isHashed": {
"description": "Хэшировано",
"type": "boolean",
@ -511,6 +527,7 @@
"phoneNumber": {
"description": "Номер телефона или первые 16 символов SHA256",
"type": "string",
"maxLength": 128,
"minLength": 10,
"example": "79990001234"
},

View File

@ -19,6 +19,10 @@ definitions:
example: PyDmBQZZXYmyxMwED8Fzy
maxLength: 36
type: string
isEncrypted:
description: Зашифровано
example: true
type: boolean
message:
description: Текст сообщения
example: Hello World!
@ -58,6 +62,10 @@ definitions:
example: PyDmBQZZXYmyxMwED8Fzy
maxLength: 36
type: string
isEncrypted:
description: Зашифровано
example: false
type: boolean
isHashed:
description: Хэшировано
example: false
@ -150,6 +158,7 @@ definitions:
phoneNumber:
description: Номер телефона или первые 16 символов SHA256
example: "79990001234"
maxLength: 128
minLength: 10
type: string
state:
@ -219,8 +228,12 @@ paths:
produces:
- application/json
responses:
"201":
"202":
description: Сообщение поставлено в очередь
headers:
Location:
description: URL для получения состояния сообщения
type: string
schema:
$ref: '#/definitions/smsgateway.MessageState'
"400":

View File

@ -13,6 +13,10 @@ import (
"go.uber.org/zap"
)
const (
route3rdPartyGetMessage = "3rdparty.get.message"
)
type thirdPartyHandler struct {
Handler
@ -27,10 +31,11 @@ type thirdPartyHandler struct {
// @Accept json
// @Produce json
// @Param request body smsgateway.Message true "Сообщение"
// @Success 201 {object} smsgateway.MessageState "Сообщение поставлено в очередь"
// @Success 202 {object} smsgateway.MessageState "Сообщение поставлено в очередь"
// @Failure 401 {object} smsgateway.ErrorResponse "Ошибка авторизации"
// @Failure 400 {object} smsgateway.ErrorResponse "Некорректный запрос"
// @Failure 500 {object} smsgateway.ErrorResponse "Внутренняя ошибка сервера"
// @Header 202 {string} Location "URL для получения состояния сообщения"
// @Router /3rdparty/v1/message [post]
//
// Поставить сообщение в очередь
@ -55,7 +60,16 @@ func (h *thirdPartyHandler) postMessage(user models.User, c *fiber.Ctx) error {
return err
}
return c.Status(fiber.StatusCreated).JSON(state)
location, err := c.GetRouteURL(route3rdPartyGetMessage, fiber.Map{
"id": state.ID,
})
if err != nil {
h.Logger.Error("Failed to get route URL", zap.String("route", route3rdPartyGetMessage), zap.Error(err))
} else {
c.Location(location)
}
return c.Status(fiber.StatusAccepted).JSON(state)
}
// @Summary Получить состояние сообщения
@ -111,7 +125,7 @@ func (h *thirdPartyHandler) Register(router fiber.Router) {
}))
router.Post("/message", h.authorize(h.postMessage))
router.Get("/message/:id", h.authorize(h.getMessage))
router.Get("/message/:id", h.authorize(h.getMessage)).Name(route3rdPartyGetMessage)
}
func newThirdPartyHandler(logger *zap.Logger, validator *validator.Validate, authSvc *services.AuthService, messagesSvc *services.MessagesService) *thirdPartyHandler {