✨ Update dependencies, enhance NATS consumer configuration, and improve error handling in message processing. Introduce telemetry support with OpenTelemetry for tracing and metrics. Refactor README to include new configuration options and update tests for improved coverage of error scenarios.
This commit is contained in:
@@ -1,60 +0,0 @@
|
||||
package di
|
||||
|
||||
import (
|
||||
"caatsm/internal/adapter/parser"
|
||||
"caatsm/internal/app"
|
||||
"caatsm/internal/infra/config"
|
||||
"caatsm/internal/infra/log"
|
||||
"caatsm/internal/infra/nats"
|
||||
"caatsm/internal/infra/postgres"
|
||||
"errors"
|
||||
)
|
||||
|
||||
// InitializeAppWithConfig wires dependencies using the provided config.
|
||||
func InitializeAppWithConfig(cfg *config.Config) (*app.MessageProcessor, *nats.Consumer, error) {
|
||||
if cfg == nil {
|
||||
return nil, nil, errors.New("config is required")
|
||||
}
|
||||
|
||||
logger, err := log.ProvideLogger(cfg)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
pool, err := postgres.ProvideDB(cfg)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
repo, err := postgres.ProvideRepository(pool, logger)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
conn, err := nats.ProvideNATSConn(cfg, logger)
|
||||
{
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
}
|
||||
|
||||
js, err := nats.ProvideJetStream(conn, cfg, logger)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
publisher, err := nats.ProvidePublisher(js, cfg, logger)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
messageParser := parser.ProvideParser()
|
||||
processor := app.NewMessageProcessor(messageParser, repo, publisher, logger)
|
||||
|
||||
consumer, err := nats.ProvideConsumer(conn, js, processor, cfg, logger)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
return processor, consumer, nil
|
||||
}
|
||||
+52
-19
@@ -16,30 +16,63 @@ import (
|
||||
|
||||
// InitializeApp initializes the application with all dependencies
|
||||
func InitializeApp() (*app.MessageProcessor, *nats.Consumer, error) {
|
||||
wire.Build(
|
||||
// Config
|
||||
config.ProvideConfig,
|
||||
comps, err := buildAppComponents()
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
return comps.Processor, comps.Consumer, nil
|
||||
}
|
||||
|
||||
// InitializeAppWithConfig wires dependencies using a pre-loaded configuration.
|
||||
func InitializeAppWithConfig(cfg *config.Config) (*app.MessageProcessor, *nats.Consumer, error) {
|
||||
comps, err := buildAppComponentsWithConfig(cfg)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
return comps.Processor, comps.Consumer, nil
|
||||
}
|
||||
|
||||
var runtimeSet = wire.NewSet(
|
||||
// Logger
|
||||
log.ProvideLogger,
|
||||
|
||||
// Database
|
||||
postgres.ProvideDB,
|
||||
postgres.ProvideRepository,
|
||||
|
||||
// Logger
|
||||
log.ProvideLogger,
|
||||
// NATS
|
||||
nats.ProvideNATSConn,
|
||||
nats.ProvideJetStream,
|
||||
nats.ProvidePublisher,
|
||||
|
||||
// Database
|
||||
postgres.ProvideDB,
|
||||
postgres.ProvideRepository,
|
||||
// Parser
|
||||
parser.ProvideParser,
|
||||
|
||||
// NATS
|
||||
nats.ProvideNATSConn,
|
||||
nats.ProvideJetStream,
|
||||
nats.ProvidePublisher,
|
||||
// App
|
||||
app.NewMessageProcessor,
|
||||
|
||||
// Parser
|
||||
parser.ProvideParser,
|
||||
// Consumer
|
||||
nats.ProvideConsumer,
|
||||
)
|
||||
|
||||
// App
|
||||
app.NewMessageProcessor,
|
||||
func buildAppComponents() (*appComponents, error) {
|
||||
wire.Build(
|
||||
config.ProvideConfig,
|
||||
runtimeSet,
|
||||
wire.Struct(new(appComponents), "*"),
|
||||
)
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
// Consumer
|
||||
nats.ProvideConsumer,
|
||||
func buildAppComponentsWithConfig(cfg *config.Config) (*appComponents, error) {
|
||||
wire.Build(
|
||||
runtimeSet,
|
||||
wire.Struct(new(appComponents), "*"),
|
||||
)
|
||||
return nil, nil, nil
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
type appComponents struct {
|
||||
Processor *app.MessageProcessor
|
||||
Consumer *nats.Consumer
|
||||
}
|
||||
|
||||
+103
-32
@@ -1,5 +1,6 @@
|
||||
// Code generated by Wire. DO NOT EDIT.
|
||||
|
||||
//go:generate go run -mod=mod github.com/google/wire/cmd/wire
|
||||
//go:build !wireinject
|
||||
// +build !wireinject
|
||||
|
||||
@@ -12,44 +13,114 @@ import (
|
||||
"caatsm/internal/infra/log"
|
||||
"caatsm/internal/infra/nats"
|
||||
"caatsm/internal/infra/postgres"
|
||||
"github.com/google/wire"
|
||||
)
|
||||
|
||||
// Injectors from wire.go:
|
||||
|
||||
func buildAppComponents() (*appComponents, error) {
|
||||
parserParser := parser.ProvideParser()
|
||||
configConfig, err := config.ProvideConfig()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
pool, err := postgres.ProvideDB(configConfig)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
logger, err := log.ProvideLogger(configConfig)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
repository, err := postgres.ProvideRepository(pool, logger)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
conn, err := nats.ProvideNATSConn(configConfig, logger)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
jetStreamContext, err := nats.ProvideJetStream(conn, configConfig, logger)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
publisher, err := nats.ProvidePublisher(jetStreamContext, configConfig, logger)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
messageProcessor := app.NewMessageProcessor(parserParser, repository, publisher, logger)
|
||||
consumer, err := nats.ProvideConsumer(conn, jetStreamContext, messageProcessor, configConfig, logger)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
diAppComponents := &appComponents{
|
||||
Processor: messageProcessor,
|
||||
Consumer: consumer,
|
||||
}
|
||||
return diAppComponents, nil
|
||||
}
|
||||
|
||||
func buildAppComponentsWithConfig(cfg *config.Config) (*appComponents, error) {
|
||||
parserParser := parser.ProvideParser()
|
||||
pool, err := postgres.ProvideDB(cfg)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
logger, err := log.ProvideLogger(cfg)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
repository, err := postgres.ProvideRepository(pool, logger)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
conn, err := nats.ProvideNATSConn(cfg, logger)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
jetStreamContext, err := nats.ProvideJetStream(conn, cfg, logger)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
publisher, err := nats.ProvidePublisher(jetStreamContext, cfg, logger)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
messageProcessor := app.NewMessageProcessor(parserParser, repository, publisher, logger)
|
||||
consumer, err := nats.ProvideConsumer(conn, jetStreamContext, messageProcessor, cfg, logger)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
diAppComponents := &appComponents{
|
||||
Processor: messageProcessor,
|
||||
Consumer: consumer,
|
||||
}
|
||||
return diAppComponents, nil
|
||||
}
|
||||
|
||||
// wire.go:
|
||||
|
||||
// InitializeApp initializes the application with all dependencies
|
||||
func InitializeApp() (*app.MessageProcessor, *nats.Consumer, error) {
|
||||
configConfig, err := config.ProvideConfig()
|
||||
comps, err := buildAppComponents()
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
zapLogger, err := log.ProvideLogger(configConfig)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
pgxpoolPool, err := postgres.ProvideDB(configConfig)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
adapterRepository, err := postgres.ProvideRepository(pgxpoolPool, zapLogger)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
natsConn, err := nats.ProvideNATSConn(configConfig, zapLogger)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
natsJetStreamContext, err := nats.ProvideJetStream(natsConn, configConfig, zapLogger)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
adapterPublisher, err := nats.ProvidePublisher(natsJetStreamContext, configConfig, zapLogger)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
parserParser := parser.ProvideParser()
|
||||
appMessageProcessor := app.NewMessageProcessor(parserParser, adapterRepository, adapterPublisher, zapLogger)
|
||||
natsConsumer, err := nats.ProvideConsumer(natsConn, natsJetStreamContext, appMessageProcessor, configConfig, zapLogger)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
return appMessageProcessor, natsConsumer, nil
|
||||
return comps.Processor, comps.Consumer, nil
|
||||
}
|
||||
|
||||
// InitializeAppWithConfig wires dependencies using a pre-loaded configuration.
|
||||
func InitializeAppWithConfig(cfg *config.Config) (*app.MessageProcessor, *nats.Consumer, error) {
|
||||
comps, err := buildAppComponentsWithConfig(cfg)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
return comps.Processor, comps.Consumer, nil
|
||||
}
|
||||
|
||||
var runtimeSet = wire.NewSet(log.ProvideLogger, postgres.ProvideDB, postgres.ProvideRepository, nats.ProvideNATSConn, nats.ProvideJetStream, nats.ProvidePublisher, parser.ProvideParser, app.NewMessageProcessor, nats.ProvideConsumer)
|
||||
|
||||
type appComponents struct {
|
||||
Processor *app.MessageProcessor
|
||||
Consumer *nats.Consumer
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user