Added: ValidUntil support

This commit is contained in:
Aleksandr Soloshenko 2024-02-09 17:52:05 +07:00
parent 468f969fb6
commit 9f8c787634
8 changed files with 54 additions and 7 deletions

View File

@ -9,7 +9,7 @@ Authorization: Basic {{localCredentials}}
{
"message": "{{$localDatetime iso8601}}",
"ttl": 600,
"validUntil": "2024-02-10T12:00:00+00:00",
"phoneNumbers": [
"{{phone}}"
],
@ -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,

View File

@ -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
}

View File

@ -381,6 +381,11 @@
"minimum": 5,
"example": 86400
},
"validUntil": {
"description": "Время окончания жизни сообщения",
"type": "string",
"example": "2020-01-01T00:00:00Z"
},
"withDeliveryReport": {
"description": "Запрашивать отчет о доставке",
"type": "boolean",

View File

@ -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

View File

@ -44,6 +44,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())
}
if len(user.Devices) < 1 {
return fiber.NewError(fiber.StatusBadRequest, "Нет ни одного устройства в учетной записи")

View File

@ -79,11 +79,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,
}
}
@ -145,7 +146,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))
}

View File

@ -1,6 +1,9 @@
package smsgateway
type ProcessState string
import (
"fmt"
"time"
)
const (
MessageStatePending ProcessState = "Pending" // В ожидании
@ -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
}
// Состояние сообщения

7
pkg/smsgateway/types.go Normal file
View File

@ -0,0 +1,7 @@
package smsgateway
import "errors"
type ProcessState string
var ErrConflictFields = errors.New("conflict fields")