Refactor uuid to id in message handling & processing. (#6)

This commit is contained in:
windyboy
2024-08-14 14:29:24 +08:00
committed by GitHub
parent 8538153cfe
commit bafbbf470c
7 changed files with 33 additions and 28 deletions
+2 -2
View File
@@ -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
} }
+7 -21
View File
@@ -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})
// }
// }
+1
View File
@@ -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
} }
+3 -2
View File
@@ -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()
} }
} }
+3
View File
@@ -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
} }
+4 -3
View File
@@ -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,
+13
View File
@@ -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
}