mirror of
https://github.com/makayabou/asg-server.git
synced 2026-05-02 17:43:36 +02:00
Added: message state update
This commit is contained in:
parent
cad991d442
commit
7b9316f64d
@ -1,10 +1,12 @@
|
||||
package handlers
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"bitbucket.org/capcom6/smsgatewaybackend/internal/smsgateway/models"
|
||||
"bitbucket.org/capcom6/smsgatewaybackend/internal/smsgateway/repositories"
|
||||
"bitbucket.org/capcom6/smsgatewaybackend/internal/smsgateway/services"
|
||||
"bitbucket.org/capcom6/smsgatewaybackend/pkg/smsgateway"
|
||||
"bitbucket.org/soft-c/gohelpers/pkg/fiber/middleware/apikey"
|
||||
@ -71,7 +73,14 @@ func (h *mobileHandler) patchMessage(device models.Device, c *fiber.Ctx) error {
|
||||
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
||||
}
|
||||
|
||||
return fiber.ErrNotImplemented
|
||||
for _, v := range req {
|
||||
err := h.messagesSvc.UpdateState(device.ID, v)
|
||||
if err != nil && !errors.Is(err, repositories.ErrMessageNotFound) {
|
||||
errorLog.Printf("Can't update message status: %s\n", err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
return c.SendStatus(fiber.StatusNoContent)
|
||||
}
|
||||
|
||||
func (h *mobileHandler) authorize(handler func(models.Device, *fiber.Ctx) error) fiber.Handler {
|
||||
|
||||
@ -5,6 +5,10 @@ import (
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
var (
|
||||
ErrMessageNotFound = gorm.ErrRecordNotFound
|
||||
)
|
||||
|
||||
type MessagesRepository struct {
|
||||
db *gorm.DB
|
||||
}
|
||||
@ -20,6 +24,28 @@ func (r *MessagesRepository) SelectPending(deviceID string) (messages []models.M
|
||||
return
|
||||
}
|
||||
|
||||
func (r *MessagesRepository) Get(deviceID, ID string) (message models.Message, err error) {
|
||||
err = r.db.Where("device_id = ? AND ext_id = ?", deviceID, ID).Take(&message).Error
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (r *MessagesRepository) UpdateState(message *models.Message) error {
|
||||
return r.db.Transaction(func(tx *gorm.DB) error {
|
||||
if err := tx.Model(message).Select("State").Updates(message).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
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 {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
func NewMessagesRepository(db *gorm.DB) *MessagesRepository {
|
||||
return &MessagesRepository{
|
||||
db: db,
|
||||
|
||||
@ -31,6 +31,18 @@ func (s *MessagesService) SelectPending(deviceID string) ([]smsgateway.Message,
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (s *MessagesService) UpdateState(deviceID string, message smsgateway.MessageState) error {
|
||||
existing, err := s.messages.Get(deviceID, message.ID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
existing.State = models.MessageState(message.State)
|
||||
existing.Recipients = s.recipientsStateToModel(message.Recipients)
|
||||
|
||||
return s.messages.UpdateState(&existing)
|
||||
}
|
||||
|
||||
func (s *MessagesService) recipientsToDomain(input []models.MessageRecipient) []string {
|
||||
output := make([]string, len(input))
|
||||
|
||||
@ -41,6 +53,19 @@ func (s *MessagesService) recipientsToDomain(input []models.MessageRecipient) []
|
||||
return output
|
||||
}
|
||||
|
||||
func (s *MessagesService) recipientsStateToModel(input []smsgateway.RecipientState) []models.MessageRecipient {
|
||||
output := make([]models.MessageRecipient, len(input))
|
||||
|
||||
for i, v := range input {
|
||||
output[i] = models.MessageRecipient{
|
||||
PhoneNumber: v.PhoneNumber,
|
||||
State: models.MessageState(v.State),
|
||||
}
|
||||
}
|
||||
|
||||
return output
|
||||
}
|
||||
|
||||
func NewMessagesService(messages *repositories.MessagesRepository) *MessagesService {
|
||||
idgen, _ := nanoid.Standard(21)
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user