Documentation
¶
Index ¶
Constants ¶
const (
// MinSecretLength is the minimum length required for security secrets
MinSecretLength = 32
)
Variables ¶
var HandlerModule = fx.Options( AnnotateHandler(func(core CoreParams) (h.Handler, error) { handler := handler.NewStaticHandler(core.Logger, core.Config) if handler == nil { return nil, errors.New("failed to create static handler") } core.Logger.Debug("registered handler", logging.StringField("handler_name", "StaticHandler"), logging.StringField("handler_type", fmt.Sprintf("%T", handler)), logging.StringField("operation", "handler_registration"), ) return handler, nil }), AnnotateHandler(func(core CoreParams, middlewareManager *appmiddleware.Manager) (h.Handler, error) { handler := webhandler.NewHomeHandler(core.Logger, core.Renderer) if handler == nil { return nil, fmt.Errorf("failed to create home handler: renderer=%T", core.Renderer) } core.Logger.Debug("registered handler", logging.StringField("handler_name", "HomeHandler"), logging.StringField("handler_type", fmt.Sprintf("%T", handler)), logging.StringField("operation", "handler_registration"), ) return handler, nil }), AnnotateHandler(func(core CoreParams, middlewareManager *appmiddleware.Manager) (h.Handler, error) { handler := wh_auth.NewWebLoginHandler(core.Logger, core.Renderer) if handler == nil { return nil, fmt.Errorf("failed to create web login handler: renderer=%T", core.Renderer) } core.Logger.Debug("registered handler", logging.StringField("handler_name", "WebLoginHandler"), logging.StringField("handler_type", fmt.Sprintf("%T", handler)), logging.StringField("operation", "handler_registration"), ) return handler, nil }), AnnotateHandler( func( core CoreParams, services ServiceParams, middlewareManager *appmiddleware.Manager, ) (h.Handler, error) { handler, err := handler.NewWebHandler( core.Logger, core.Renderer, handler.WithMiddlewareManager(middlewareManager), handler.WithConfig(core.Config), ) if err != nil { return nil, fmt.Errorf("failed to create web handler: %w", err) } core.Logger.Debug( "registered handler", logging.StringField("handler_name", "WebHandler"), logging.StringField("handler_type", fmt.Sprintf("%T", handler)), logging.StringField("operation", "handler_registration"), ) return handler, nil }, ), AnnotateHandler(func(core CoreParams, services ServiceParams) (h.Handler, error) { handler := handler.NewAuthHandler(core.Logger, handler.WithUserService(services.UserService)) if handler == nil { return nil, fmt.Errorf("failed to create auth handler: user_service=%T", services.UserService) } core.Logger.Debug("registered handler", logging.StringField("handler_name", "AuthHandler"), logging.StringField("handler_type", fmt.Sprintf("%T", handler)), logging.StringField("operation", "handler_registration"), ) return handler, nil }), AnnotateHandler(func(core CoreParams, services ServiceParams) (h.Handler, error) { authMiddleware := appmiddleware.NewCookieAuthMiddleware(services.UserService, core.Logger) baseHandler := handlers.NewBaseHandler( authMiddleware, services.FormService, core.Logger, ) handler, err := handlers.NewHandler(services.UserService, services.FormService, core.Logger) if err != nil { return nil, fmt.Errorf("failed to create dashboard handler: %w", err) } handler.DashboardHandler.Base = baseHandler handler.FormHandler.Base = baseHandler handler.SubmissionHandler.Base = baseHandler handler.SchemaHandler.Base = baseHandler core.Logger.Debug("registered handler", logging.StringField("handler_name", "DashboardHandler"), logging.StringField("handler_type", fmt.Sprintf("%T", handler)), logging.StringField("operation", "handler_registration"), ) return handler, nil }), )
HandlerModule provides all HTTP handlers for the application.
var InfrastructureModule = fx.Options( fx.Provide( func(logger logging.Logger) (*config.Config, error) { logger.Info("InfrastructureModule: Starting configuration loading...") cfg, cfgErr := config.New(logger) if cfgErr != nil { logger.Error("InfrastructureModule: Error loading configuration", logging.Error(cfgErr)) return nil, fmt.Errorf("failed to load configuration: %w", cfgErr) } logger.Info("InfrastructureModule: Configuration loaded, starting validation...") if validationErr := validateConfig(cfg, logger); validationErr != nil { logger.Error("InfrastructureModule: Validation failed", logging.Error(validationErr)) return nil, validationErr } logger.Info("InfrastructureModule: Configuration validated successfully") return cfg, nil }, database.NewDB, ), )
InfrastructureModule provides core infrastructure dependencies.
var RootModule = fx.Options( InfrastructureModule, StoreModule, ServerModule, HandlerModule, )
RootModule combines all infrastructure-level modules into a single module.
ServerModule provides the HTTP server setup.
StoreModule provides all database store implementations.
Functions ¶
func AnnotateHandler ¶
AnnotateHandler is a helper function that simplifies the creation of handler providers. It wraps the common fx.Provide and fx.Annotate pattern used for handlers.
Types ¶
type CoreParams ¶
type CoreParams struct {
fx.In
Logger logging.Logger
Renderer *view.Renderer
Config *config.Config
}
CoreParams contains core infrastructure dependencies that are commonly needed by handlers. These are typically required for basic handler functionality like logging and rendering.
type Module ¶
type Module struct {
// contains filtered or unexported fields
}
Module represents the infrastructure module
type ServiceContainer ¶
type ServiceContainer struct {
PageDataService *services.PageDataService
FormOperations *services.FormOperations
TemplateService *services.TemplateService
ResponseBuilder *services.ResponseBuilder
}
ServiceContainer holds all service instances
type ServiceParams ¶
ServiceParams contains all service dependencies that handlers might need. This separation makes it easier to manage service dependencies and allows for more granular dependency injection.
Directories
¶
| Path | Synopsis |
|---|---|
|
Package database provides database connection and management
|
Package database provides database connection and management |
|
Package logging provides a unified logging interface using zap
|
Package logging provides a unified logging interface using zap |