mirror of
https://github.com/makayabou/asg-server.git
synced 2026-05-02 17:43:36 +02:00
Added: withDeliveryReport field support
This commit is contained in:
parent
180644a14c
commit
df1a84b27b
@ -8,12 +8,13 @@ Content-Type: application/json
|
||||
Authorization: Basic {{localCredentials}}
|
||||
|
||||
{
|
||||
"message": "Test",
|
||||
"message": "{{$localDatetime iso8601}}",
|
||||
"ttl": 600,
|
||||
"phoneNumbers": [
|
||||
"{{phone}}"
|
||||
],
|
||||
"simNumber": 1
|
||||
"simNumber": 1,
|
||||
"withDeliveryReport": true
|
||||
}
|
||||
|
||||
###
|
||||
|
||||
@ -23,7 +23,8 @@ Authorization: Basic {{credentials}}
|
||||
"phoneNumbers": [
|
||||
"{{phone}}"
|
||||
],
|
||||
"simNumber": 3
|
||||
"simNumber": 1,
|
||||
"withDeliveryReport": true
|
||||
}
|
||||
|
||||
###
|
||||
|
||||
@ -369,6 +369,11 @@
|
||||
"type": "integer",
|
||||
"minimum": 5,
|
||||
"example": 86400
|
||||
},
|
||||
"withDeliveryReport": {
|
||||
"description": "Запрашивать отчет о доставке",
|
||||
"type": "boolean",
|
||||
"example": true
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@ -43,6 +43,10 @@ definitions:
|
||||
example: 86400
|
||||
minimum: 5
|
||||
type: integer
|
||||
withDeliveryReport:
|
||||
description: Запрашивать отчет о доставке
|
||||
example: true
|
||||
type: boolean
|
||||
required:
|
||||
- message
|
||||
- phoneNumbers
|
||||
|
||||
@ -0,0 +1,10 @@
|
||||
-- +goose Up
|
||||
-- +goose StatementBegin
|
||||
ALTER TABLE `messages`
|
||||
ADD `with_delivery_report` tinyint(1) unsigned DEFAULT false;
|
||||
-- +goose StatementEnd
|
||||
---
|
||||
-- +goose Down
|
||||
-- +goose StatementBegin
|
||||
ALTER TABLE `messages` DROP `with_delivery_report`;
|
||||
-- +goose StatementEnd
|
||||
@ -42,13 +42,14 @@ type Device struct {
|
||||
}
|
||||
|
||||
type Message struct {
|
||||
ID uint64 `gorm:"primaryKey;type:BIGINT UNSIGNED;autoIncrement"`
|
||||
DeviceID string `gorm:"not null;type:char(21);uniqueIndex:unq_messages_id_device,priority:2;index:idx_messages_device_state"`
|
||||
ExtID string `gorm:"not null;type:varchar(36);uniqueIndex:unq_messages_id_device,priority:1"`
|
||||
Message string `gorm:"not null;type:tinytext"`
|
||||
State MessageState `gorm:"not null;type:enum('Pending','Sent','Processed','Delivered','Failed');default:Pending;index:idx_messages_device_state"`
|
||||
ValidUntil *time.Time `gorm:"type:datetime"`
|
||||
SimNumber *uint8 `gorm:"type:tinyint(1) unsigned"`
|
||||
ID uint64 `gorm:"primaryKey;type:BIGINT UNSIGNED;autoIncrement"`
|
||||
DeviceID string `gorm:"not null;type:char(21);uniqueIndex:unq_messages_id_device,priority:2;index:idx_messages_device_state"`
|
||||
ExtID string `gorm:"not null;type:varchar(36);uniqueIndex:unq_messages_id_device,priority:1"`
|
||||
Message string `gorm:"not null;type:tinytext"`
|
||||
State MessageState `gorm:"not null;type:enum('Pending','Sent','Processed','Delivered','Failed');default:Pending;index:idx_messages_device_state"`
|
||||
ValidUntil *time.Time `gorm:"type:datetime"`
|
||||
SimNumber *uint8 `gorm:"type:tinyint(1) unsigned"`
|
||||
WithDeliveryReport bool `gorm:"type:tinyint(1) unsigned;default:0"`
|
||||
|
||||
Device Device `gorm:"foreignKey:DeviceID;constraint:OnDelete:CASCADE"`
|
||||
Recipients []MessageRecipient `gorm:"foreignKey:MessageID;constraint:OnDelete:CASCADE"`
|
||||
|
||||
@ -62,11 +62,12 @@ func (s *MessagesService) SelectPending(deviceID string) ([]smsgateway.Message,
|
||||
}
|
||||
|
||||
result[i] = smsgateway.Message{
|
||||
ID: v.ExtID,
|
||||
Message: v.Message,
|
||||
TTL: ttl,
|
||||
PhoneNumbers: s.recipientsToDomain(v.Recipients),
|
||||
SimNumber: v.SimNumber,
|
||||
ID: v.ExtID,
|
||||
Message: v.Message,
|
||||
TTL: ttl,
|
||||
PhoneNumbers: s.recipientsToDomain(v.Recipients),
|
||||
SimNumber: v.SimNumber,
|
||||
WithDeliveryReport: types.AsPointer[bool](v.WithDeliveryReport),
|
||||
}
|
||||
}
|
||||
|
||||
@ -129,12 +130,13 @@ func (s *MessagesService) Enqeue(device models.Device, message smsgateway.Messag
|
||||
}
|
||||
|
||||
msg := models.Message{
|
||||
DeviceID: device.ID,
|
||||
ExtID: message.ID,
|
||||
Message: message.Message,
|
||||
ValidUntil: validUntil,
|
||||
SimNumber: message.SimNumber,
|
||||
Recipients: s.recipientsToModel(message.PhoneNumbers),
|
||||
DeviceID: device.ID,
|
||||
ExtID: message.ID,
|
||||
Message: message.Message,
|
||||
ValidUntil: validUntil,
|
||||
SimNumber: message.SimNumber,
|
||||
WithDeliveryReport: types.OrDefault[bool](message.WithDeliveryReport, true),
|
||||
Recipients: s.recipientsToModel(message.PhoneNumbers),
|
||||
}
|
||||
if msg.ExtID == "" {
|
||||
msg.ExtID = s.idgen()
|
||||
|
||||
@ -12,11 +12,12 @@ const (
|
||||
|
||||
// Сообщение
|
||||
type Message struct {
|
||||
ID string `json:"id,omitempty" validate:"omitempty,max=36" example:"PyDmBQZZXYmyxMwED8Fzy"` // Идентификатор
|
||||
Message string `json:"message" validate:"required,max=256" 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"` // Номер сим-карты
|
||||
PhoneNumbers []string `json:"phoneNumbers" validate:"required,min=1,max=100,dive,required,min=10" example:"79990001234"` // Получатели
|
||||
ID string `json:"id,omitempty" validate:"omitempty,max=36" example:"PyDmBQZZXYmyxMwED8Fzy"` // Идентификатор
|
||||
Message string `json:"message" validate:"required,max=256" 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"` // Запрашивать отчет о доставке
|
||||
PhoneNumbers []string `json:"phoneNumbers" validate:"required,min=1,max=100,dive,required,min=10" example:"79990001234"` // Получатели
|
||||
}
|
||||
|
||||
// Состояние сообщения
|
||||
|
||||
@ -3,3 +3,10 @@ package types
|
||||
func AsPointer[T any](v T) *T {
|
||||
return &v
|
||||
}
|
||||
|
||||
func OrDefault[T any](v *T, def T) T {
|
||||
if v == nil {
|
||||
return def
|
||||
}
|
||||
return *v
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user