mirror of
https://github.com/makayabou/asg-server.git
synced 2026-05-02 17:43:36 +02:00
Merge pull request #33 from capcom6/feature/valid-until
ValidUntil support
This commit is contained in:
commit
13b434ecfe
@ -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,
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
|
||||
@ -387,6 +387,11 @@
|
||||
"minimum": 5,
|
||||
"example": 86400
|
||||
},
|
||||
"validUntil": {
|
||||
"description": "Время окончания жизни сообщения",
|
||||
"type": "string",
|
||||
"example": "2020-01-01T00:00:00Z"
|
||||
},
|
||||
"withDeliveryReport": {
|
||||
"description": "Запрашивать отчет о доставке",
|
||||
"type": "boolean",
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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)
|
||||
|
||||
|
||||
@ -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,
|
||||
}
|
||||
}
|
||||
|
||||
@ -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))
|
||||
}
|
||||
|
||||
@ -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
7
pkg/smsgateway/types.go
Normal file
@ -0,0 +1,7 @@
|
||||
package smsgateway
|
||||
|
||||
import "errors"
|
||||
|
||||
type ProcessState string
|
||||
|
||||
var ErrConflictFields = errors.New("conflict fields")
|
||||
Loading…
x
Reference in New Issue
Block a user