//go:build wireinject package main import ( "net/http" "github.com/food-ai/backend/internal/auth" "github.com/food-ai/backend/internal/config" "github.com/food-ai/backend/internal/diary" "github.com/food-ai/backend/internal/dish" "github.com/food-ai/backend/internal/home" "github.com/food-ai/backend/internal/ingredient" "github.com/food-ai/backend/internal/menu" "github.com/food-ai/backend/internal/middleware" "github.com/food-ai/backend/internal/pexels" "github.com/food-ai/backend/internal/product" "github.com/food-ai/backend/internal/recipe" "github.com/food-ai/backend/internal/recognition" "github.com/food-ai/backend/internal/recommendation" "github.com/food-ai/backend/internal/savedrecipe" "github.com/food-ai/backend/internal/user" "github.com/google/wire" "github.com/jackc/pgx/v5/pgxpool" ) func initRouter(appConfig *config.Config, pool *pgxpool.Pool) (http.Handler, error) { wire.Build( // Config extractors newGeminiAPIKey, newPexelsAPIKey, newJWTSecret, newJWTAccessDuration, newJWTRefreshDuration, newAllowedOrigins, newFirebaseCredentialsFile, // Auth auth.NewFirebaseAuthOrNoop, newJWTManager, newJWTAdapter, newAuthMiddleware, auth.NewService, auth.NewHandler, // User user.NewRepository, user.NewService, user.NewHandler, // External clients newGeminiClient, newPexelsClient, // Ingredient ingredient.NewRepository, ingredient.NewHandler, // Product product.NewRepository, product.NewHandler, // Dish dish.NewRepository, dish.NewHandler, // Recipe recipe.NewRepository, recipe.NewHandler, // Saved recipes savedrecipe.NewRepository, savedrecipe.NewHandler, // Menu menu.NewRepository, menu.NewHandler, // Diary diary.NewRepository, diary.NewHandler, // Home home.NewHandler, // Recognition & Recommendation recognition.NewHandler, recommendation.NewHandler, // List handlers (DB-backed, injected into router) newUnitsListHandler, newCuisineListHandler, newTagListHandler, // Router newRouter, // Interface bindings wire.Bind(new(user.UserRepository), new(*user.Repository)), wire.Bind(new(menu.PhotoSearcher), new(*pexels.Client)), wire.Bind(new(menu.UserLoader), new(*user.Repository)), wire.Bind(new(menu.ProductLister), new(*product.Repository)), wire.Bind(new(menu.RecipeSaver), new(*dish.Repository)), wire.Bind(new(recommendation.PhotoSearcher), new(*pexels.Client)), wire.Bind(new(recommendation.UserLoader), new(*user.Repository)), wire.Bind(new(recommendation.ProductLister), new(*product.Repository)), wire.Bind(new(recognition.IngredientRepository), new(*ingredient.Repository)), wire.Bind(new(middleware.AccessTokenValidator), new(*jwtAdapter)), ) return nil, nil }