Added: errors logging

This commit is contained in:
Aleksandr Soloshenko 2023-11-27 23:57:10 +07:00 committed by Aleksandr Soloshenko
parent ff97795706
commit 6cddeb33ab
7 changed files with 29 additions and 1 deletions

View File

@ -493,6 +493,11 @@
"state"
],
"properties": {
"error": {
"description": "Ошибка",
"type": "string",
"example": "timeout"
},
"phoneNumber": {
"description": "Номер телефона",
"type": "string",

View File

@ -135,6 +135,10 @@ definitions:
- MessageStateFailed
smsgateway.RecipientState:
properties:
error:
description: Ошибка
example: timeout
type: string
phoneNumber:
description: Номер телефона
example: "79990001234"

View File

@ -0,0 +1,10 @@
-- +goose Up
-- +goose StatementBegin
ALTER TABLE `message_recipients`
ADD `error` varchar(256);
-- +goose StatementEnd
---
-- +goose Down
-- +goose StatementBegin
ALTER TABLE `message_recipients` DROP `error`;
-- +goose StatementEnd

View File

@ -60,4 +60,5 @@ type MessageRecipient struct {
MessageID uint64 `gorm:"primaryKey;type:BIGINT UNSIGNED"`
PhoneNumber string `gorm:"primaryKey;type:varchar(16)"`
State MessageState `gorm:"not null;type:enum('Pending','Sent','Processed','Delivered','Failed');default:Pending"`
Error *string `gorm:"type:varchar(256)"`
}

View File

@ -57,7 +57,7 @@ func (r *MessagesRepository) UpdateState(message *models.Message) error {
}
for _, v := range message.Recipients {
if err := tx.Model(&v).Where("message_id = ? AND phone_number = ?", message.ID, v.PhoneNumber).Update("state", v.State).Error; err != nil {
if err := tx.Model(&v).Where("message_id = ?", message.ID).Select("State", "Error").Updates(&v).Error; err != nil {
return err
}
}

View File

@ -16,6 +16,10 @@ import (
"github.com/nyaruka/phonenumbers"
)
const (
ErrorTTLExpired = "TTL expired"
)
var ErrValidation error = errors.New("validation error")
type MessagesService struct {
@ -166,6 +170,7 @@ func (s *MessagesService) filterTimeouted(messages []models.Message) []models.Me
v.State = models.MessageStateFailed
for i := range v.Recipients {
v.Recipients[i].State = models.MessageStateFailed
v.Recipients[i].Error = types.AsPointer(ErrorTTLExpired)
}
s.Messages.UpdateState(&v)
}
@ -211,6 +216,7 @@ func (s *MessagesService) recipientsStateToModel(input []smsgateway.RecipientSta
output[i] = models.MessageRecipient{
PhoneNumber: phoneNumber,
State: models.MessageState(v.State),
Error: v.Error,
}
}
@ -229,6 +235,7 @@ func modelToRecipientState(input models.MessageRecipient) smsgateway.RecipientSt
return smsgateway.RecipientState{
PhoneNumber: input.PhoneNumber,
State: smsgateway.ProcessState(input.State),
Error: input.Error,
}
}

View File

@ -30,4 +30,5 @@ type MessageState struct {
type RecipientState struct {
PhoneNumber string `json:"phoneNumber" validate:"required,min=10" example:"79990001234"` // Номер телефона
State ProcessState `json:"state" validate:"required" example:"Pending"` // Состояние
Error *string `json:"error,omitempty" example:"timeout"` // Ошибка
}