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

50 lines
1.1 KiB
Go

package nats
import (
"caatsm/internal/config"
"caatsm/internal/domain"
"caatsm/internal/iface"
"caatsm/internal/parsers"
"caatsm/pkg/utils"
"fmt"
"sync"
)
type MessageHandler struct {
mu sync.Mutex
config *config.Config
repository iface.MessageRepository
publisher iface.MessagePublisher
}
func NewHandler(config *config.Config, publisher iface.MessagePublisher, repository iface.MessageRepository) *MessageHandler {
return &MessageHandler{
config: config,
repository: repository,
publisher: publisher,
}
}
func (handler *MessageHandler) HandleMessage(msg []byte, id string) error {
handler.mu.Lock()
defer handler.mu.Unlock()
log := utils.GetSugaredLogger()
if msg == nil {
log.Error("empty message")
return fmt.Errorf("empty message")
}
payload := string(msg)
var parsed *domain.ParsedMessage
if parsed = parsers.Parse(payload); !parsed.Parsed {
log.Infof("not parsed: [%s] : {%s} \n", id, payload)
} else {
parsed.Uuid = id
log.Infof("parsed [%s]: %v\n", id, parsed.ToString())
}
handler.repository.CreateNew(parsed)
handler.publisher.Publish(parsed)
return nil
}