package httptransport import ( "log/slog" "net/http" "github.com/gin-gonic/gin" "go.opentelemetry.io/otel/trace" "switchbot-api/internal/app/observability" "switchbot-api/internal/transport/http/handlers" "switchbot-api/internal/transport/http/middleware" ) type Dependencies struct { Logger *slog.Logger Tracer trace.Tracer HTTPMetrics *observability.HTTPMetrics PrometheusHandler http.Handler HealthHandler *handlers.HealthHandler HelloHandler *handlers.HelloHandler } func NewRouter(deps Dependencies) *gin.Engine { router := gin.New() router.RedirectTrailingSlash = false router.Use(middleware.RequestID()) router.Use(middleware.Tracing(deps.Tracer)) router.Use(middleware.Metrics(deps.HTTPMetrics)) router.Use(middleware.AccessLog(deps.Logger)) router.Use(middleware.Recovery(deps.Logger)) router.GET("/healthz", deps.HealthHandler.Healthz) router.GET("/readyz", deps.HealthHandler.Readyz) router.GET("/hello", deps.HelloHandler.Hello) router.GET("/metrics", gin.WrapH(deps.PrometheusHandler)) return router }