// Package api provides HTTP routing and handlers for the preferences-api service. package api import ( "git.threesix.ai/jordan/slack5-1770541397/pkg/app" "git.threesix.ai/jordan/slack5-1770541397/pkg/auth" "git.threesix.ai/jordan/slack5-1770541397/services/preferences-api/internal/api/handlers" "git.threesix.ai/jordan/slack5-1770541397/services/preferences-api/internal/config" "git.threesix.ai/jordan/slack5-1770541397/services/preferences-api/internal/service" ) // RegisterRoutes registers all HTTP routes for the service. // Routes are mounted under /api/preferences-api to match the ingress path routing. func RegisterRoutes(application *app.App, preferencesService *service.PreferencesService) { logger := application.Logger() cfg := config.Load() // Initialize handlers with injected services healthHandler := handlers.NewHealth(logger) prefsHandler := handlers.NewPreferences(preferencesService, logger) // Build and mount OpenAPI spec spec := NewServiceSpec() application.EnableDocs(spec) // Register API routes under /api/{service-name} to match ingress path routing. application.Route("/api/preferences-api", func(r app.Router) { r.Get("/health", healthHandler.Check) // Protected routes — auth required for all preference endpoints r.Route("/preferences", func(r app.Router) { if cfg.AuthEnabled { r.Use(auth.Middleware(auth.MiddlewareConfig{ Validator: auth.NewJWTValidator(auth.JWTConfig{ Secret: []byte(cfg.JWTSecret), Issuer: "slack5-1770541397", }), })) } r.Get("/{user_id}", app.Wrap(prefsHandler.Get)) r.Put("/{user_id}", app.Wrap(prefsHandler.Put)) }) }) }