Skip to content

Commit 3248c1e

Browse files
authored
Merge pull request #10 from capcom6/feature/errors-logging
Added: errors logging
2 parents ff97795 + d1c8e46 commit 3248c1e

File tree

8 files changed

+32
-5
lines changed

8 files changed

+32
-5
lines changed

api/requests.http

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
@baseUrl=http://localhost:3000
2-
@cloudUrl=https://sms.capcom.me
1+
@baseUrl={{$dotenv CLOUD__URL}}
32
@credentials={{$dotenv CLOUD__CREDENTIALS}}
43
@mobileToken={{$dotenv MOBILE__TOKEN}}
54
@phone={{$dotenv PHONE}}
@@ -24,11 +23,11 @@ Authorization: Basic {{credentials}}
2423
"phoneNumbers": [
2524
"{{phone}}"
2625
],
27-
"simNumber": 2
26+
"simNumber": 3
2827
}
2928

3029
###
31-
GET {{cloudUrl}}/api/3rdparty/v1/message/Cao6mzuIRrjBB7TtlWnZ- HTTP/1.1
30+
GET {{baseUrl}}/api/3rdparty/v1/message/IyJP8Iexf55XFhYFHMjcs HTTP/1.1
3231
Authorization: Basic {{credentials}}
3332

3433
###

api/swagger.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -493,6 +493,11 @@
493493
"state"
494494
],
495495
"properties": {
496+
"error": {
497+
"description": "Ошибка",
498+
"type": "string",
499+
"example": "timeout"
500+
},
496501
"phoneNumber": {
497502
"description": "Номер телефона",
498503
"type": "string",

api/swagger.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,10 @@ definitions:
135135
- MessageStateFailed
136136
smsgateway.RecipientState:
137137
properties:
138+
error:
139+
description: Ошибка
140+
example: timeout
141+
type: string
138142
phoneNumber:
139143
description: Номер телефона
140144
example: "79990001234"
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
-- +goose Up
2+
-- +goose StatementBegin
3+
ALTER TABLE `message_recipients`
4+
ADD `error` varchar(256);
5+
-- +goose StatementEnd
6+
---
7+
-- +goose Down
8+
-- +goose StatementBegin
9+
ALTER TABLE `message_recipients` DROP `error`;
10+
-- +goose StatementEnd

internal/sms-gateway/models/models.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,4 +60,5 @@ type MessageRecipient struct {
6060
MessageID uint64 `gorm:"primaryKey;type:BIGINT UNSIGNED"`
6161
PhoneNumber string `gorm:"primaryKey;type:varchar(16)"`
6262
State MessageState `gorm:"not null;type:enum('Pending','Sent','Processed','Delivered','Failed');default:Pending"`
63+
Error *string `gorm:"type:varchar(256)"`
6364
}

internal/sms-gateway/repositories/messages.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ func (r *MessagesRepository) UpdateState(message *models.Message) error {
5757
}
5858

5959
for _, v := range message.Recipients {
60-
if err := tx.Model(&v).Where("message_id = ? AND phone_number = ?", message.ID, v.PhoneNumber).Update("state", v.State).Error; err != nil {
60+
if err := tx.Model(&v).Where("message_id = ?", message.ID).Select("State", "Error").Updates(&v).Error; err != nil {
6161
return err
6262
}
6363
}

internal/sms-gateway/services/messages.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ import (
1616
"github.com/nyaruka/phonenumbers"
1717
)
1818

19+
const (
20+
ErrorTTLExpired = "TTL expired"
21+
)
22+
1923
var ErrValidation error = errors.New("validation error")
2024

2125
type MessagesService struct {
@@ -166,6 +170,7 @@ func (s *MessagesService) filterTimeouted(messages []models.Message) []models.Me
166170
v.State = models.MessageStateFailed
167171
for i := range v.Recipients {
168172
v.Recipients[i].State = models.MessageStateFailed
173+
v.Recipients[i].Error = types.AsPointer(ErrorTTLExpired)
169174
}
170175
s.Messages.UpdateState(&v)
171176
}
@@ -211,6 +216,7 @@ func (s *MessagesService) recipientsStateToModel(input []smsgateway.RecipientSta
211216
output[i] = models.MessageRecipient{
212217
PhoneNumber: phoneNumber,
213218
State: models.MessageState(v.State),
219+
Error: v.Error,
214220
}
215221
}
216222

@@ -229,6 +235,7 @@ func modelToRecipientState(input models.MessageRecipient) smsgateway.RecipientSt
229235
return smsgateway.RecipientState{
230236
PhoneNumber: input.PhoneNumber,
231237
State: smsgateway.ProcessState(input.State),
238+
Error: input.Error,
232239
}
233240
}
234241

pkg/smsgateway/domain.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,5 @@ type MessageState struct {
3030
type RecipientState struct {
3131
PhoneNumber string `json:"phoneNumber" validate:"required,min=10" example:"79990001234"` // Номер телефона
3232
State ProcessState `json:"state" validate:"required" example:"Pending"` // Состояние
33+
Error *string `json:"error,omitempty" example:"timeout"` // Ошибка
3334
}

0 commit comments

Comments
 (0)