fix: ensure database and HTTP server providers execute on startup
- Add fx.Invoke in main.go to force database and HTTP server creation - This ensures all providers execute and their lifecycle hooks are registered - Clean up debug logging statements - Database migrations and HTTP server now start correctly on application startup Fixes issue where database migrations and HTTP server were not starting because FX providers were not being executed (lazy evaluation).
This commit is contained in:
@@ -70,6 +70,7 @@ func ProvideDatabase() fx.Option {
|
||||
return fx.Provide(func(cfg config.ConfigProvider, log logger.Logger, lc fx.Lifecycle) (*database.Client, error) {
|
||||
dsn := cfg.GetString("database.dsn")
|
||||
if dsn == "" {
|
||||
log.Error("ProvideDatabase: DSN is empty")
|
||||
return nil, fmt.Errorf("database DSN is not configured")
|
||||
}
|
||||
|
||||
@@ -93,6 +94,12 @@ func ProvideDatabase() fx.Option {
|
||||
connMaxIdleTime = 10 * time.Minute
|
||||
}
|
||||
|
||||
log.Info("Preparing database connection",
|
||||
logger.String("dsn_mask", maskDSN(dsn)),
|
||||
logger.Int("max_connections", maxConns),
|
||||
)
|
||||
|
||||
log.Info("Connecting to database...")
|
||||
dbClient, err := database.NewClient(database.Config{
|
||||
DSN: dsn,
|
||||
MaxConnections: maxConns,
|
||||
@@ -101,14 +108,19 @@ func ProvideDatabase() fx.Option {
|
||||
ConnMaxIdleTime: connMaxIdleTime,
|
||||
})
|
||||
if err != nil {
|
||||
log.Error("Failed to create database client",
|
||||
logger.Error(err),
|
||||
)
|
||||
return nil, fmt.Errorf("failed to create database client: %w", err)
|
||||
}
|
||||
|
||||
log.Info("Database client created successfully")
|
||||
|
||||
// Register lifecycle hooks
|
||||
lc.Append(fx.Hook{
|
||||
OnStart: func(ctx context.Context) error {
|
||||
// Run migrations on startup
|
||||
log.Info("Running database migrations...")
|
||||
// Run migrations on startup
|
||||
if err := dbClient.Migrate(ctx); err != nil {
|
||||
log.Error("Database migrations failed",
|
||||
logger.Error(err),
|
||||
@@ -222,16 +234,22 @@ func ProvideHTTPServer() fx.Option {
|
||||
tracer trace.TracerProvider,
|
||||
lc fx.Lifecycle,
|
||||
) (*server.Server, error) {
|
||||
log.Info("Creating HTTP server...")
|
||||
|
||||
srv, err := server.NewServer(cfg, log, healthRegistry, metricsRegistry, errorBus, tracer)
|
||||
if err != nil {
|
||||
log.Error("Failed to create HTTP server",
|
||||
logger.Error(err),
|
||||
)
|
||||
return nil, fmt.Errorf("failed to create HTTP server: %w", err)
|
||||
}
|
||||
|
||||
log.Info("HTTP server created, registering lifecycle hooks...")
|
||||
|
||||
// Register lifecycle hooks
|
||||
lc.Append(fx.Hook{
|
||||
OnStart: func(ctx context.Context) error {
|
||||
log.Info("HTTP server OnStart hook called")
|
||||
|
||||
|
||||
// Get server address from config
|
||||
port := cfg.GetInt("server.port")
|
||||
if port == 0 {
|
||||
|
||||
Reference in New Issue
Block a user