Merge pull request #10 from capcom6/feature/errors-logging

Added: errors logging
This commit is contained in:
capcom6 2023-11-29 22:45:12 +07:00 committed by GitHub
commit 3248c1e93e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 32 additions and 5 deletions

View File

@ -1,5 +1,4 @@
@baseUrl=http://localhost:3000 @baseUrl={{$dotenv CLOUD__URL}}
@cloudUrl=https://sms.capcom.me
@credentials={{$dotenv CLOUD__CREDENTIALS}} @credentials={{$dotenv CLOUD__CREDENTIALS}}
@mobileToken={{$dotenv MOBILE__TOKEN}} @mobileToken={{$dotenv MOBILE__TOKEN}}
@phone={{$dotenv PHONE}} @phone={{$dotenv PHONE}}
@ -24,11 +23,11 @@ Authorization: Basic {{credentials}}
"phoneNumbers": [ "phoneNumbers": [
"{{phone}}" "{{phone}}"
], ],
"simNumber": 2 "simNumber": 3
} }
### ###
GET {{cloudUrl}}/api/3rdparty/v1/message/Cao6mzuIRrjBB7TtlWnZ- HTTP/1.1 GET {{baseUrl}}/api/3rdparty/v1/message/IyJP8Iexf55XFhYFHMjcs HTTP/1.1
Authorization: Basic {{credentials}} Authorization: Basic {{credentials}}
### ###

View File

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

View File

@ -135,6 +135,10 @@ definitions:
- MessageStateFailed - MessageStateFailed
smsgateway.RecipientState: smsgateway.RecipientState:
properties: properties:
error:
description: Ошибка
example: timeout
type: string
phoneNumber: phoneNumber:
description: Номер телефона description: Номер телефона
example: "79990001234" 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"` MessageID uint64 `gorm:"primaryKey;type:BIGINT UNSIGNED"`
PhoneNumber string `gorm:"primaryKey;type:varchar(16)"` PhoneNumber string `gorm:"primaryKey;type:varchar(16)"`
State MessageState `gorm:"not null;type:enum('Pending','Sent','Processed','Delivered','Failed');default:Pending"` 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 { 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 return err
} }
} }

View File

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

View File

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