diff --git a/go.mod b/go.mod index ef50397..8455999 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module bitbucket.org/capcom6/smsgatewaybackend go 1.18 require ( - bitbucket.org/soft-c/gohelpers v1.0.3-0.20221006072847-aee2524b5192 + bitbucket.org/soft-c/gohelpers v1.0.3-0.20221007032455-694a304f5909 bitbucket.org/soft-c/gomicrobase v1.1.2-0.20221006080527-7eeddcd13770 github.com/go-playground/validator/v10 v10.11.0 github.com/gofiber/fiber/v2 v2.38.1 diff --git a/go.sum b/go.sum index 7d25c7c..6c0d804 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,5 @@ -bitbucket.org/soft-c/gohelpers v1.0.3-0.20221006072847-aee2524b5192 h1:Mmoyu4csqhWcxCQc0qhSyd9dIt1BCxJ1OYOZA4D/S2U= -bitbucket.org/soft-c/gohelpers v1.0.3-0.20221006072847-aee2524b5192/go.mod h1:AlZzQ1xftfS8rWSwjwTj3/MPMFFfgfNCP3b7xLoEeKM= +bitbucket.org/soft-c/gohelpers v1.0.3-0.20221007032455-694a304f5909 h1:SwG69J+r+YOkcHnOUYFmsdvRyeEnvMs2KHTf+4L+4f4= +bitbucket.org/soft-c/gohelpers v1.0.3-0.20221007032455-694a304f5909/go.mod h1:AlZzQ1xftfS8rWSwjwTj3/MPMFFfgfNCP3b7xLoEeKM= bitbucket.org/soft-c/gomicrobase v1.1.2-0.20221006080527-7eeddcd13770 h1:IAEOe5Uv9+zQEaOuT8eHJPUfS64Nc0I9ufq7afFXKUk= bitbucket.org/soft-c/gomicrobase v1.1.2-0.20221006080527-7eeddcd13770/go.mod h1:Pvv07ulIXfDG5us/ZG5Of7vvjY+tq3fkcrY/MmJUEiE= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= diff --git a/internal/smsgateway/handlers/3rdparty.go b/internal/smsgateway/handlers/3rdparty.go index 477c3a8..bdcd8d4 100644 --- a/internal/smsgateway/handlers/3rdparty.go +++ b/internal/smsgateway/handlers/3rdparty.go @@ -3,6 +3,7 @@ package handlers import ( "bitbucket.org/capcom6/smsgatewaybackend/internal/smsgateway/models" "bitbucket.org/capcom6/smsgatewaybackend/internal/smsgateway/services" + "bitbucket.org/capcom6/smsgatewaybackend/pkg/smsgateway" microbase "bitbucket.org/soft-c/gomicrobase" "github.com/go-playground/validator/v10" "github.com/gofiber/fiber/v2" @@ -17,7 +18,18 @@ type thirdPartyHandler struct { } func (h *thirdPartyHandler) postMessage(user models.User, c *fiber.Ctx) error { - return fiber.ErrNotImplemented + req := smsgateway.Message{} + if err := h.BodyParserValidator(c, &req); err != nil { + return fiber.NewError(fiber.StatusBadRequest, err.Error()) + } + + if len(user.Devices) < 1 { + return fiber.NewError(fiber.StatusBadRequest, "Нет ни одного устройтсва в учетной записи") + } + + device := user.Devices[0] + + return h.messagesSvc.Enqeue(device.ID, req) } func (h *thirdPartyHandler) authorize(handler func(models.User, *fiber.Ctx) error) fiber.Handler { diff --git a/internal/smsgateway/services/messages.go b/internal/smsgateway/services/messages.go index c860956..7c92530 100644 --- a/internal/smsgateway/services/messages.go +++ b/internal/smsgateway/services/messages.go @@ -1,9 +1,12 @@ package services import ( + "fmt" + "bitbucket.org/capcom6/smsgatewaybackend/internal/smsgateway/models" "bitbucket.org/capcom6/smsgatewaybackend/internal/smsgateway/repositories" "bitbucket.org/capcom6/smsgatewaybackend/pkg/smsgateway" + "bitbucket.org/soft-c/gohelpers/pkg/filters" "github.com/jaevor/go-nanoid" ) @@ -44,6 +47,14 @@ func (s *MessagesService) UpdateState(deviceID string, message smsgateway.Messag } func (s *MessagesService) Enqeue(deviceID string, message smsgateway.Message) error { + for i, v := range message.PhoneNumbers { + phone, err := filters.FilterPhone(v, false) + if err != nil { + return fmt.Errorf("некорректный номер телефона в строке %d: %w", i+1, err) + } + message.PhoneNumbers[i] = phone + } + msg := models.Message{ DeviceID: deviceID, ExtID: message.ID, diff --git a/pkg/smsgateway/domain.go b/pkg/smsgateway/domain.go index faeabec..ea9dd34 100644 --- a/pkg/smsgateway/domain.go +++ b/pkg/smsgateway/domain.go @@ -12,7 +12,7 @@ const ( type Message struct { ID string `json:"id,omitempty" validate:"omitempty,max=36"` Message string `json:"message" validate:"required,max=256"` - PhoneNumbers []string `json:"phoneNumbers" validate:"required,min=1,max=100"` + PhoneNumbers []string `json:"phoneNumbers" validate:"required,min=1,max=100,dive,required,min=10"` } type MessageState struct {