Skip to content

Commit

Permalink
Merge pull request #33 from capcom6/feature/valid-until
Browse files Browse the repository at this point in the history
ValidUntil support
  • Loading branch information
capcom6 authored Feb 20, 2024
2 parents 53c09a2 + 9f8c787 commit 13b434e
Show file tree
Hide file tree
Showing 8 changed files with 54 additions and 7 deletions.
16 changes: 15 additions & 1 deletion api/local.http
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ Authorization: Basic {{localCredentials}}

{
"message": "{{$localDatetime iso8601}}",
"ttl": 600,
"validUntil": "2024-02-10T12:00:00+00:00",
"phoneNumbers": [
"{{phone}}"
],
Expand All @@ -22,6 +22,20 @@ POST {{localUrl}}/message HTTP/1.1
Content-Type: application/json
Authorization: Basic {{localCredentials}}

{
"message": "{{$localDatetime iso8601}}",
"ttl": 86400,
"phoneNumbers": [
"{{phone}}"
],
"withDeliveryReport": true
}

###
POST {{localUrl}}/message HTTP/1.1
Content-Type: application/json
Authorization: Basic {{localCredentials}}

{
"message": "17wc9/ZRf1l84LHkEK3hgA==.aH1XrMHAeMyF4PeiavV3dk8o2fP0nSo92IqseLQfg14=",
"ttl": 600,
Expand Down
4 changes: 2 additions & 2 deletions api/requests.http
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,11 @@ Authorization: Basic {{credentials}}

{
"message": "{{$localDatetime iso8601}}",
"ttl": 600,
"validUntil": "2024-02-10T12:00:00+07:00",
"phoneNumbers": [
"{{phone}}"
],
"simNumber": 1,
"simNumber": {{$randomInt 1 2}},
"withDeliveryReport": true
}

Expand Down
5 changes: 5 additions & 0 deletions api/swagger.json
Original file line number Diff line number Diff line change
Expand Up @@ -387,6 +387,11 @@
"minimum": 5,
"example": 86400
},
"validUntil": {
"description": "Время окончания жизни сообщения",
"type": "string",
"example": "2020-01-01T00:00:00Z"
},
"withDeliveryReport": {
"description": "Запрашивать отчет о доставке",
"type": "boolean",
Expand Down
4 changes: 4 additions & 0 deletions api/swagger.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,10 @@ definitions:
example: 86400
minimum: 5
type: integer
validUntil:
description: Время окончания жизни сообщения
example: "2020-01-01T00:00:00Z"
type: string
withDeliveryReport:
description: Запрашивать отчет о доставке
example: true
Expand Down
3 changes: 3 additions & 0 deletions internal/sms-gateway/handlers/3rdparty.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,9 @@ func (h *thirdPartyHandler) postMessage(user models.User, c *fiber.Ctx) error {
if err := h.BodyParserValidator(c, &req); err != nil {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
}
if err := req.Validate(); err != nil {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
}

skipPhoneValidation := c.QueryBool("skipPhoneValidation", false)

Expand Down
5 changes: 3 additions & 2 deletions internal/sms-gateway/services/messages.go
Original file line number Diff line number Diff line change
Expand Up @@ -83,11 +83,12 @@ func (s *MessagesService) SelectPending(deviceID string) ([]smsgateway.Message,
result[i] = smsgateway.Message{
ID: v.ExtID,
Message: v.Message,
TTL: ttl,
SimNumber: v.SimNumber,
WithDeliveryReport: types.AsPointer[bool](v.WithDeliveryReport),
IsEncrypted: v.IsEncrypted,
PhoneNumbers: s.recipientsToDomain(v.Recipients),
TTL: ttl,
ValidUntil: v.ValidUntil,
}
}

Expand Down Expand Up @@ -149,7 +150,7 @@ func (s *MessagesService) Enqeue(device models.Device, message smsgateway.Messag
}
}

var validUntil *time.Time = nil
var validUntil *time.Time = message.ValidUntil
if message.TTL != nil && *message.TTL > 0 {
validUntil = types.AsPointer(time.Now().Add(time.Duration(*message.TTL) * time.Second))
}
Expand Down
17 changes: 15 additions & 2 deletions pkg/smsgateway/domain.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package smsgateway

type ProcessState string
import (
"fmt"
"time"
)

const (
MessageStatePending ProcessState = "Pending" // В ожидании
Expand All @@ -14,11 +17,21 @@ const (
type Message struct {
ID string `json:"id,omitempty" validate:"omitempty,max=36" example:"PyDmBQZZXYmyxMwED8Fzy"` // Идентификатор
Message string `json:"message" validate:"required,max=65535" example:"Hello World!"` // Текст сообщения
TTL *uint64 `json:"ttl,omitempty" validate:"omitempty,min=5" example:"86400"` // Время жизни сообщения в секундах
SimNumber *uint8 `json:"simNumber,omitempty" validate:"omitempty,max=3" example:"1"` // Номер сим-карты
WithDeliveryReport *bool `json:"withDeliveryReport,omitempty" example:"true"` // Запрашивать отчет о доставке
IsEncrypted bool `json:"isEncrypted,omitempty" example:"true"` // Зашифровано
PhoneNumbers []string `json:"phoneNumbers" validate:"required,min=1,max=100,dive,required,min=10,max=128" example:"79990001234"` // Получатели

TTL *uint64 `json:"ttl,omitempty" validate:"omitempty,min=5" example:"86400"` // Время жизни сообщения в секундах
ValidUntil *time.Time `json:"validUntil,omitempty" example:"2020-01-01T00:00:00Z"` // Время окончания жизни сообщения
}

func (m Message) Validate() error {
if m.TTL != nil && m.ValidUntil != nil {
return fmt.Errorf("%w: ttl and validUntil", ErrConflictFields)
}

return nil
}

// Состояние сообщения
Expand Down
7 changes: 7 additions & 0 deletions pkg/smsgateway/types.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package smsgateway

import "errors"

type ProcessState string

var ErrConflictFields = errors.New("conflict fields")

0 comments on commit 13b434e

Please sign in to comment.