Skip to content

Commit 13b434e

Browse files
authored
Merge pull request #33 from capcom6/feature/valid-until
ValidUntil support
2 parents 53c09a2 + 9f8c787 commit 13b434e

File tree

8 files changed

+54
-7
lines changed

8 files changed

+54
-7
lines changed

api/local.http

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ Authorization: Basic {{localCredentials}}
99

1010
{
1111
"message": "{{$localDatetime iso8601}}",
12-
"ttl": 600,
12+
"validUntil": "2024-02-10T12:00:00+00:00",
1313
"phoneNumbers": [
1414
"{{phone}}"
1515
],
@@ -22,6 +22,20 @@ POST {{localUrl}}/message HTTP/1.1
2222
Content-Type: application/json
2323
Authorization: Basic {{localCredentials}}
2424

25+
{
26+
"message": "{{$localDatetime iso8601}}",
27+
"ttl": 86400,
28+
"phoneNumbers": [
29+
"{{phone}}"
30+
],
31+
"withDeliveryReport": true
32+
}
33+
34+
###
35+
POST {{localUrl}}/message HTTP/1.1
36+
Content-Type: application/json
37+
Authorization: Basic {{localCredentials}}
38+
2539
{
2640
"message": "17wc9/ZRf1l84LHkEK3hgA==.aH1XrMHAeMyF4PeiavV3dk8o2fP0nSo92IqseLQfg14=",
2741
"ttl": 600,

api/requests.http

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@ Authorization: Basic {{credentials}}
1919

2020
{
2121
"message": "{{$localDatetime iso8601}}",
22-
"ttl": 600,
22+
"validUntil": "2024-02-10T12:00:00+07:00",
2323
"phoneNumbers": [
2424
"{{phone}}"
2525
],
26-
"simNumber": 1,
26+
"simNumber": {{$randomInt 1 2}},
2727
"withDeliveryReport": true
2828
}
2929

api/swagger.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -387,6 +387,11 @@
387387
"minimum": 5,
388388
"example": 86400
389389
},
390+
"validUntil": {
391+
"description": "Время окончания жизни сообщения",
392+
"type": "string",
393+
"example": "2020-01-01T00:00:00Z"
394+
},
390395
"withDeliveryReport": {
391396
"description": "Запрашивать отчет о доставке",
392397
"type": "boolean",

api/swagger.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,10 @@ definitions:
4747
example: 86400
4848
minimum: 5
4949
type: integer
50+
validUntil:
51+
description: Время окончания жизни сообщения
52+
example: "2020-01-01T00:00:00Z"
53+
type: string
5054
withDeliveryReport:
5155
description: Запрашивать отчет о доставке
5256
example: true

internal/sms-gateway/handlers/3rdparty.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@ func (h *thirdPartyHandler) postMessage(user models.User, c *fiber.Ctx) error {
4545
if err := h.BodyParserValidator(c, &req); err != nil {
4646
return fiber.NewError(fiber.StatusBadRequest, err.Error())
4747
}
48+
if err := req.Validate(); err != nil {
49+
return fiber.NewError(fiber.StatusBadRequest, err.Error())
50+
}
4851

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

internal/sms-gateway/services/messages.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,11 +83,12 @@ func (s *MessagesService) SelectPending(deviceID string) ([]smsgateway.Message,
8383
result[i] = smsgateway.Message{
8484
ID: v.ExtID,
8585
Message: v.Message,
86-
TTL: ttl,
8786
SimNumber: v.SimNumber,
8887
WithDeliveryReport: types.AsPointer[bool](v.WithDeliveryReport),
8988
IsEncrypted: v.IsEncrypted,
9089
PhoneNumbers: s.recipientsToDomain(v.Recipients),
90+
TTL: ttl,
91+
ValidUntil: v.ValidUntil,
9192
}
9293
}
9394

@@ -149,7 +150,7 @@ func (s *MessagesService) Enqeue(device models.Device, message smsgateway.Messag
149150
}
150151
}
151152

152-
var validUntil *time.Time = nil
153+
var validUntil *time.Time = message.ValidUntil
153154
if message.TTL != nil && *message.TTL > 0 {
154155
validUntil = types.AsPointer(time.Now().Add(time.Duration(*message.TTL) * time.Second))
155156
}

pkg/smsgateway/domain.go

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package smsgateway
22

3-
type ProcessState string
3+
import (
4+
"fmt"
5+
"time"
6+
)
47

58
const (
69
MessageStatePending ProcessState = "Pending" // В ожидании
@@ -14,11 +17,21 @@ const (
1417
type Message struct {
1518
ID string `json:"id,omitempty" validate:"omitempty,max=36" example:"PyDmBQZZXYmyxMwED8Fzy"` // Идентификатор
1619
Message string `json:"message" validate:"required,max=65535" example:"Hello World!"` // Текст сообщения
17-
TTL *uint64 `json:"ttl,omitempty" validate:"omitempty,min=5" example:"86400"` // Время жизни сообщения в секундах
1820
SimNumber *uint8 `json:"simNumber,omitempty" validate:"omitempty,max=3" example:"1"` // Номер сим-карты
1921
WithDeliveryReport *bool `json:"withDeliveryReport,omitempty" example:"true"` // Запрашивать отчет о доставке
2022
IsEncrypted bool `json:"isEncrypted,omitempty" example:"true"` // Зашифровано
2123
PhoneNumbers []string `json:"phoneNumbers" validate:"required,min=1,max=100,dive,required,min=10,max=128" example:"79990001234"` // Получатели
24+
25+
TTL *uint64 `json:"ttl,omitempty" validate:"omitempty,min=5" example:"86400"` // Время жизни сообщения в секундах
26+
ValidUntil *time.Time `json:"validUntil,omitempty" example:"2020-01-01T00:00:00Z"` // Время окончания жизни сообщения
27+
}
28+
29+
func (m Message) Validate() error {
30+
if m.TTL != nil && m.ValidUntil != nil {
31+
return fmt.Errorf("%w: ttl and validUntil", ErrConflictFields)
32+
}
33+
34+
return nil
2235
}
2336

2437
// Состояние сообщения

pkg/smsgateway/types.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package smsgateway
2+
3+
import "errors"
4+
5+
type ProcessState string
6+
7+
var ErrConflictFields = errors.New("conflict fields")

0 commit comments

Comments
 (0)