diff --git a/api/swagger.json b/api/swagger.json index 8258851..bb35043 100644 --- a/api/swagger.json +++ b/api/swagger.json @@ -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" }, diff --git a/api/swagger.yaml b/api/swagger.yaml index 8a0a0c2..589b454 100644 --- a/api/swagger.yaml +++ b/api/swagger.yaml @@ -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": diff --git a/internal/sms-gateway/handlers/3rdparty.go b/internal/sms-gateway/handlers/3rdparty.go index 67b73bf..1273cd9 100644 --- a/internal/sms-gateway/handlers/3rdparty.go +++ b/internal/sms-gateway/handlers/3rdparty.go @@ -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 {