Files
go-caatsm/pkg/di/wire.go
T

91 lines
2.0 KiB
Go
Raw Normal View History

//go:build wireinject
package di
import (
"caatsm/internal/adapter/parser"
weatherparser "caatsm/internal/adapter/parser/weather"
"caatsm/internal/app"
"caatsm/internal/infra/config"
"caatsm/internal/infra/log"
"caatsm/internal/infra/monitoring"
"caatsm/internal/infra/nats"
"caatsm/internal/infra/postgres"
"caatsm/internal/infra/telemetry"
"github.com/google/wire"
)
// InitializeApp initializes the application with all dependencies
func InitializeApp() (*app.MessageProcessor, *nats.Consumer, *monitoring.Server, error) {
comps, err := buildAppComponents()
if err != nil {
return nil, nil, nil, err
}
return comps.Processor, comps.Consumer, comps.Monitoring, nil
}
// InitializeAppWithConfig wires dependencies using a pre-loaded configuration.
func InitializeAppWithConfig(cfg *config.Config) (*app.MessageProcessor, *nats.Consumer, *monitoring.Server, error) {
comps, err := buildAppComponentsWithConfig(cfg)
if err != nil {
return nil, nil, nil, err
}
return comps.Processor, comps.Consumer, comps.Monitoring, nil
}
var runtimeSet = wire.NewSet(
// Logger
log.ProvideLogger,
// Database
postgres.ProvideDB,
postgres.ProvideRepository,
// NATS
nats.ProvideNATSConn,
nats.ProvideJetStream,
nats.ProvidePublisher,
// Weather Parser
weatherparser.NewWeatherParser,
// Parser (composite, depends on weather parser)
parser.ProvideParser,
// Telemetry
telemetry.ProvideRecorder,
// App
app.NewMessageProcessor,
// Consumer
nats.ProvideConsumer,
// Monitoring HTTP server
monitoring.ProvideServer,
)
func buildAppComponents() (*appComponents, error) {
wire.Build(
config.ProvideConfig,
runtimeSet,
wire.Struct(new(appComponents), "*"),
)
return nil, nil
}
func buildAppComponentsWithConfig(cfg *config.Config) (*appComponents, error) {
wire.Build(
runtimeSet,
wire.Struct(new(appComponents), "*"),
)
return nil, nil
}
type appComponents struct {
Processor *app.MessageProcessor
Consumer *nats.Consumer
Monitoring *monitoring.Server
}