Added: message status response

This commit is contained in:
Aleksandr Soloshenko 2023-09-18 23:59:08 +07:00
parent 4e93f67828
commit 38ff76cdaf
5 changed files with 28 additions and 10 deletions

View File

@ -1,4 +1,4 @@
@baseUrl=http://sms.capcom.me
@baseUrl=http://localhost:3000
###
POST {{baseUrl}}/api/mobile/v1/device HTTP/1.1

View File

@ -47,7 +47,10 @@
],
"responses": {
"201": {
"description": "Сообщение поставлено в очередь"
"description": "Сообщение поставлено в очередь",
"schema": {
"$ref": "#/definitions/smsgateway.MessageState"
}
},
"400": {
"description": "Некорректный запрос",

View File

@ -162,6 +162,8 @@ paths:
responses:
"201":
description: Сообщение поставлено в очередь
schema:
$ref: '#/definitions/smsgateway.MessageState'
"400":
description: Некорректный запрос
schema:

View File

@ -26,7 +26,7 @@ type thirdPartyHandler struct {
// @Accept json
// @Produce json
// @Param request body smsgateway.Message true "Сообщение"
// @Success 201 {object} nil "Сообщение поставлено в очередь"
// @Success 201 {object} smsgateway.MessageState "Сообщение поставлено в очередь"
// @Failure 401 {object} smsgateway.ErrorResponse "Ошибка авторизации"
// @Failure 400 {object} smsgateway.ErrorResponse "Некорректный запрос"
// @Failure 500 {object} smsgateway.ErrorResponse "Внутренняя ошибка сервера"
@ -42,7 +42,8 @@ func (h *thirdPartyHandler) postMessage(user models.User, c *fiber.Ctx) error {
}
device := user.Devices[0]
if err := h.messagesSvc.Enqeue(device, req); err != nil {
state, err := h.messagesSvc.Enqeue(device, req)
if err != nil {
if errors.Is(err, services.ErrValidation) {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
}
@ -50,7 +51,7 @@ func (h *thirdPartyHandler) postMessage(user models.User, c *fiber.Ctx) error {
return err
}
return c.SendStatus(fiber.StatusCreated)
return c.Status(fiber.StatusCreated).JSON(state)
}
func (h *thirdPartyHandler) authorize(handler func(models.User, *fiber.Ctx) error) fiber.Handler {

View File

@ -63,13 +63,24 @@ func (s *MessagesService) UpdateState(deviceID string, message smsgateway.Messag
return s.Messages.UpdateState(&existing)
}
func (s *MessagesService) Enqeue(device models.Device, message smsgateway.Message) error {
func (s *MessagesService) Enqeue(device models.Device, message smsgateway.Message) (smsgateway.MessageState, error) {
state := smsgateway.MessageState{
ID: "",
State: smsgateway.MessageStatePending,
Recipients: make([]smsgateway.RecipientState, len(message.PhoneNumbers)),
}
for i, v := range message.PhoneNumbers {
phone, err := filters.FilterPhone(v, false)
if err != nil {
return fmt.Errorf("invalid phone number in row %d: %w", i+1, err)
return state, fmt.Errorf("invalid phone number in row %d: %w", i+1, err)
}
message.PhoneNumbers[i] = phone
state.Recipients[i] = smsgateway.RecipientState{
PhoneNumber: phone,
State: smsgateway.MessageStatePending,
}
}
msg := models.Message{
@ -81,13 +92,14 @@ func (s *MessagesService) Enqeue(device models.Device, message smsgateway.Messag
if msg.ExtID == "" {
msg.ExtID = s.idgen()
}
state.ID = msg.ExtID
if err := s.Messages.Insert(&msg); err != nil {
return err
return state, err
}
if device.PushToken == nil {
return nil
return state, nil
}
go func(token string) {
@ -99,7 +111,7 @@ func (s *MessagesService) Enqeue(device models.Device, message smsgateway.Messag
}
}(*device.PushToken)
return nil
return state, nil
}
func (s *MessagesService) recipientsToDomain(input []models.MessageRecipient) []string {