✨ Refactor uuid to id in message handling & processing. (#6)
This commit is contained in:
@@ -6,7 +6,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type MessageHandler interface {
|
type MessageHandler interface {
|
||||||
HandleMessage(msg []byte, uuid []byte) error
|
HandleMessage(msg []byte, id string) error
|
||||||
}
|
}
|
||||||
|
|
||||||
type MessagePublisher interface {
|
type MessagePublisher interface {
|
||||||
@@ -18,5 +18,5 @@ type MessageSubscriber interface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type MessageRepository interface {
|
type MessageRepository interface {
|
||||||
CreateNew(message *domain.ParsedMessage, uuid []byte) error
|
CreateNew(message *domain.ParsedMessage) error
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ func NewHandler(config *config.Config, publisher iface.MessagePublisher, reposit
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (handler *MessageHandler) HandleMessage(msg []byte, uuid []byte) error {
|
func (handler *MessageHandler) HandleMessage(msg []byte, id string) error {
|
||||||
handler.mu.Lock()
|
handler.mu.Lock()
|
||||||
defer handler.mu.Unlock()
|
defer handler.mu.Unlock()
|
||||||
log := utils.GetSugaredLogger()
|
log := utils.GetSugaredLogger()
|
||||||
@@ -36,28 +36,14 @@ func (handler *MessageHandler) HandleMessage(msg []byte, uuid []byte) error {
|
|||||||
payload := string(msg)
|
payload := string(msg)
|
||||||
var parsed *domain.ParsedMessage
|
var parsed *domain.ParsedMessage
|
||||||
if parsed = parsers.Parse(payload); !parsed.Parsed {
|
if parsed = parsers.Parse(payload); !parsed.Parsed {
|
||||||
log.Infof("not parsed: [%s] : {%s} \n", uuid, payload)
|
log.Infof("not parsed: [%s] : {%s} \n", id, payload)
|
||||||
} else {
|
} else {
|
||||||
log.Infof("parsed [%s]: %v\n", uuid, parsed.ToString())
|
parsed.Uuid = id
|
||||||
|
log.Infof("parsed [%s]: %v\n", id, parsed.ToString())
|
||||||
}
|
}
|
||||||
handler.repository.CreateNew(parsed, uuid)
|
handler.repository.CreateNew(parsed)
|
||||||
|
|
||||||
handler.publisher.Publish(parsed)
|
handler.publisher.Publish(parsed)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// func (n *MessageHandler) SaveMessage(parsed *domain.ParsedMessage, uuid string) {
|
|
||||||
// logger := watermill.NewStdLogger(false, false)
|
|
||||||
// if parsed != nil {
|
|
||||||
// parsed.Uuid = uuid
|
|
||||||
// if err := n.hasuraRepo.CreateNew(parsed); err != nil {
|
|
||||||
// logger.Error("error inserting message", err, map[string]interface{}{"message": parsed})
|
|
||||||
// }
|
|
||||||
// logger.Info("message inserted", map[string]interface{}{"message": parsed.Uuid})
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// func (n *MessageHandler) Publish(parsed *domain.ParsedMessage) {
|
|
||||||
// if err := Publish(n.config, parsed); err != nil {
|
|
||||||
// utils.GetSugaredLogger().Error("error publishing message", err, map[string]interface{}{"message": parsed})
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|||||||
@@ -50,5 +50,6 @@ func (n *NatsPublisher) Publish(parsedMessage interface{}) error {
|
|||||||
logger.Errorf("Failed to publish message: %v", err)
|
logger.Errorf("Failed to publish message: %v", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
logger.Infof("Message published: %s", msg.UUID)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -55,10 +55,11 @@ func (n *NatsSubscriber) Subscribe(config *config.Config, handlers iface.Message
|
|||||||
}
|
}
|
||||||
|
|
||||||
for msg := range messages {
|
for msg := range messages {
|
||||||
if err := handlers.HandleMessage(msg.Payload, []byte(msg.UUID)); err == nil {
|
if err := handlers.HandleMessage(msg.Payload, msg.UUID); err == nil {
|
||||||
|
logger.Infof("Message handled: %s", msg.UUID)
|
||||||
msg.Ack()
|
msg.Ack()
|
||||||
} else {
|
} else {
|
||||||
logger.Error("Failed to handle message", err, map[string]interface{}{"message": msg})
|
logger.Errorf("Failed to handle message [%s]: %v", msg.UUID, err)
|
||||||
msg.Nack()
|
msg.Nack()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/google/uuid"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@@ -211,6 +213,7 @@ func Parse(rawText string) *domain.ParsedMessage {
|
|||||||
}
|
}
|
||||||
message.Parsed = true
|
message.Parsed = true
|
||||||
message.BodyData = bodyData
|
message.BodyData = bodyData
|
||||||
|
message.Uuid = uuid.New().String()
|
||||||
return &message
|
return &message
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ import (
|
|||||||
"caatsm/pkg/utils"
|
"caatsm/pkg/utils"
|
||||||
|
|
||||||
"github.com/Khan/genqlient/graphql"
|
"github.com/Khan/genqlient/graphql"
|
||||||
"github.com/google/uuid"
|
|
||||||
"golang.org/x/oauth2"
|
"golang.org/x/oauth2"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -34,10 +33,12 @@ func NewHasura(config *config.Config) *HasuraRepository {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// InsertParsedMessage inserts a new ParsedMessage into the Hasura GraphQL API
|
// InsertParsedMessage inserts a new ParsedMessage into the Hasura GraphQL API
|
||||||
func (hr *HasuraRepository) CreateNew(pm *domain.ParsedMessage, msg_uuid []byte) error {
|
func (hr *HasuraRepository) CreateNew(pm *domain.ParsedMessage) error {
|
||||||
log := utils.GetSugaredLogger()
|
log := utils.GetSugaredLogger()
|
||||||
bodyString, _ := json.Marshal(pm.BodyData)
|
bodyString, _ := json.Marshal(pm.BodyData)
|
||||||
secondAddress, _ := json.Marshal(pm.SecondaryAddresses)
|
secondAddress, _ := json.Marshal(pm.SecondaryAddresses)
|
||||||
|
var err error
|
||||||
|
msgUuid := utils.GetUuid(pm.Uuid)
|
||||||
variables := Aviation_telegrams_insert_input{
|
variables := Aviation_telegrams_insert_input{
|
||||||
Message_id: pm.MessageID,
|
Message_id: pm.MessageID,
|
||||||
Priority_indicator: pm.PriorityIndicator,
|
Priority_indicator: pm.PriorityIndicator,
|
||||||
@@ -48,7 +49,7 @@ func (hr *HasuraRepository) CreateNew(pm *domain.ParsedMessage, msg_uuid []byte)
|
|||||||
Category: pm.Category,
|
Category: pm.Category,
|
||||||
Date_time: pm.DateTime,
|
Date_time: pm.DateTime,
|
||||||
Dispatched_at: pm.DispatchedAt,
|
Dispatched_at: pm.DispatchedAt,
|
||||||
Uuid: uuid.Must(uuid.FromBytes(msg_uuid)),
|
Uuid: msgUuid,
|
||||||
Received_at: pm.ReceivedAt,
|
Received_at: pm.ReceivedAt,
|
||||||
Originator: pm.Originator,
|
Originator: pm.Originator,
|
||||||
Originator_date_time: pm.OriginatorDateTime,
|
Originator_date_time: pm.OriginatorDateTime,
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package utils
|
||||||
|
|
||||||
|
import "github.com/google/uuid"
|
||||||
|
|
||||||
|
func GetUuid(uuidString string) uuid.UUID {
|
||||||
|
log := GetSugaredLogger()
|
||||||
|
result, err := uuid.Parse(uuidString)
|
||||||
|
if err != nil {
|
||||||
|
log.Warnf("invalid uuid: %s", uuidString)
|
||||||
|
return uuid.New()
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user