Files
go-caatsm/internal/nats/handler.go
T

64 lines
1.8 KiB
Go
Raw Normal View History

2024-08-12 17:47:34 +08:00
package nats
2024-07-30 10:25:59 +08:00
import (
"caatsm/internal/config"
"caatsm/internal/domain"
2024-08-14 11:48:18 +08:00
"caatsm/internal/iface"
2024-07-30 10:25:59 +08:00
"caatsm/internal/parsers"
"caatsm/pkg/utils"
"fmt"
"sync"
)
type MessageHandler struct {
2024-07-30 10:25:59 +08:00
mu sync.Mutex
config *config.Config
2024-08-14 11:48:18 +08:00
repository iface.MessageRepository
publisher iface.MessagePublisher
2024-07-30 10:25:59 +08:00
}
2024-08-14 11:48:18 +08:00
func NewHandler(config *config.Config, publisher iface.MessagePublisher, repository iface.MessageRepository) *MessageHandler {
return &MessageHandler{
config: config,
2024-08-14 11:48:18 +08:00
repository: repository,
publisher: publisher,
}
2024-07-30 10:25:59 +08:00
}
2024-08-14 11:48:18 +08:00
func (handler *MessageHandler) HandleMessage(msg []byte, uuid []byte) error {
handler.mu.Lock()
defer handler.mu.Unlock()
2024-07-30 10:25:59 +08:00
log := utils.GetSugaredLogger()
2024-08-14 11:48:18 +08:00
if msg == nil {
2024-07-30 10:25:59 +08:00
log.Error("empty message")
return fmt.Errorf("empty message")
}
2024-08-14 11:48:18 +08:00
payload := string(msg)
2024-07-30 10:25:59 +08:00
var parsed *domain.ParsedMessage
if parsed = parsers.Parse(payload); !parsed.Parsed {
2024-08-14 11:48:18 +08:00
log.Infof("not parsed: [%s] : {%s} \n", uuid, payload)
2024-07-30 10:25:59 +08:00
} else {
2024-08-14 11:48:18 +08:00
log.Infof("parsed [%s]: %v\n", uuid, parsed.ToString())
2024-07-30 10:25:59 +08:00
}
2024-08-14 11:48:18 +08:00
handler.repository.CreateNew(parsed, uuid)
handler.publisher.Publish(parsed)
2024-07-30 10:25:59 +08:00
return nil
}
2024-08-14 11:48:18 +08:00
// 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})
// }
// }
2024-07-30 10:25:59 +08:00
2024-08-14 11:48:18 +08:00
// 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})
// }
// }