refactor: use loop for dig provide for simpler error handling

This commit is contained in:
Stavros
2026-06-14 20:13:58 +03:00
parent 8426db306d
commit c3dd056a56
2 changed files with 39 additions and 82 deletions
+24 -49
View File
@@ -41,22 +41,18 @@ func (app *BootstrapApp) setupRouter() error {
} }
} }
err := app.dig.Provide(middleware.NewContextMiddleware) middlewareProvideFor := []any{
middleware.NewContextMiddleware,
if err != nil { middleware.NewUIMiddleware,
return fmt.Errorf("failed to provide context middleware: %w", err) middleware.NewZerologMiddleware,
} }
err = app.dig.Provide(middleware.NewUIMiddleware) for _, provider := range middlewareProvideFor {
err := app.dig.Provide(provider)
if err != nil { if err != nil {
return fmt.Errorf("failed to provide ui middleware: %w", err) return fmt.Errorf("failed to provide middleware: %w", err)
} }
err = app.dig.Provide(middleware.NewZerologMiddleware)
if err != nil {
return fmt.Errorf("failed to provide zerolog middleware: %w", err)
} }
type middlewareInput struct { type middlewareInput struct {
@@ -67,7 +63,7 @@ func (app *BootstrapApp) setupRouter() error {
ZerologMiddleware *middleware.ZerologMiddleware ZerologMiddleware *middleware.ZerologMiddleware
} }
err = app.dig.Invoke(func(mi middlewareInput) { err := app.dig.Invoke(func(mi middlewareInput) {
engine.Use(mi.ContextMiddleware.Middleware()) engine.Use(mi.ContextMiddleware.Middleware())
engine.Use(mi.UIMiddleware.Middleware()) engine.Use(mi.UIMiddleware.Middleware())
engine.Use(mi.ZerologMiddleware.Middleware()) engine.Use(mi.ZerologMiddleware.Middleware())
@@ -93,44 +89,23 @@ func (app *BootstrapApp) setupRouter() error {
return fmt.Errorf("failed to provide api router group: %w", err) return fmt.Errorf("failed to provide api router group: %w", err)
} }
err = app.dig.Provide(controller.NewContextController) controllerProvideFor := []any{
if err != nil { controller.NewContextController,
return fmt.Errorf("failed to provide context controller: %w", err) controller.NewOAuthController,
controller.NewOIDCController,
controller.NewProxyController,
controller.NewUserController,
controller.NewResourcesController,
controller.NewHealthController,
controller.NewWellKnownController,
} }
err = app.dig.Provide(controller.NewOAuthController) for _, provider := range controllerProvideFor {
if err != nil { err := app.dig.Provide(provider)
return fmt.Errorf("failed to provide oauth controller: %w", err)
}
err = app.dig.Provide(controller.NewOIDCController) if err != nil {
if err != nil { return fmt.Errorf("failed to provide controller: %w", err)
return fmt.Errorf("failed to provide oidc controller: %w", err) }
}
err = app.dig.Provide(controller.NewProxyController)
if err != nil {
return fmt.Errorf("failed to provide proxy controller: %w", err)
}
err = app.dig.Provide(controller.NewUserController)
if err != nil {
return fmt.Errorf("failed to provide user controller: %w", err)
}
err = app.dig.Provide(controller.NewResourcesController)
if err != nil {
return fmt.Errorf("failed to provide resources controller: %w", err)
}
err = app.dig.Provide(controller.NewHealthController)
if err != nil {
return fmt.Errorf("failed to provide health controller: %w", err)
}
err = app.dig.Provide(controller.NewWellKnownController)
if err != nil {
return fmt.Errorf("failed to provide well-known controller: %w", err)
} }
type controllerInput struct { type controllerInput struct {
+15 -33
View File
@@ -21,42 +21,24 @@ func (app *BootstrapApp) setupServices() error {
return fmt.Errorf("failed to get label provider: %w", err) return fmt.Errorf("failed to get label provider: %w", err)
} }
err = app.dig.Provide(func() service.LabelProvider { serviceProvideFor := []any{
return labelProvider func() service.LabelProvider {
}) return labelProvider
},
if err != nil { service.NewLdapService,
return fmt.Errorf("failed to provide label provider: %w", err) service.NewTailscaleService,
service.NewAccessControlsService,
service.NewOAuthBrokerService,
service.NewAuthService,
service.NewOIDCService,
} }
err = app.dig.Provide(service.NewLdapService) for _, provider := range serviceProvideFor {
if err != nil { err = app.dig.Provide(provider)
return fmt.Errorf("failed to provide ldap service: %w", err)
}
err = app.dig.Provide(service.NewTailscaleService) if err != nil {
if err != nil { return fmt.Errorf("failed to provide service: %w", err)
return fmt.Errorf("failed to provide tailscale service: %w", err) }
}
err = app.dig.Provide(service.NewAccessControlsService)
if err != nil {
return fmt.Errorf("failed to provide access controls service: %w", err)
}
err = app.dig.Provide(service.NewOAuthBrokerService)
if err != nil {
return fmt.Errorf("failed to provide oauth broker service: %w", err)
}
err = app.dig.Provide(service.NewAuthService)
if err != nil {
return fmt.Errorf("failed to provide auth service: %w", err)
}
err = app.dig.Provide(service.NewOIDCService)
if err != nil {
return fmt.Errorf("failed to provide oidc service: %w", err)
} }
type svcInput struct { type svcInput struct {