Files
food-ai/backend/cmd/server/wire.go
dbastrikin 5dc398f0d6 refactor: move Firebase implementation to adapters/firebase, drop pexels interface
- Create internal/adapters/firebase/auth.go with Auth, noopAuth, NewAuthOrNoop
  (renamed from FirebaseAuth, noopTokenVerifier, NewFirebaseAuthOrNoop)
- Reduce internal/auth/firebase.go to TokenVerifier interface only
- Remove PhotoSearcher interface from adapters/pexels (belongs to consumers)
- Update wire.go and wire_gen.go to use firebase.NewAuthOrNoop

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-15 21:40:18 +02:00

117 lines
3.2 KiB
Go

//go:build wireinject
package main
import (
"net/http"
"github.com/food-ai/backend/internal/auth"
"github.com/food-ai/backend/internal/adapters/firebase"
"github.com/food-ai/backend/internal/infra/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/infra/middleware"
"github.com/food-ai/backend/internal/adapters/openai"
"github.com/food-ai/backend/internal/adapters/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
newOpenAIAPIKey,
newPexelsAPIKey,
newJWTSecret,
newJWTAccessDuration,
newJWTRefreshDuration,
newAllowedOrigins,
newFirebaseCredentialsFile,
// Auth
firebase.NewAuthOrNoop,
newJWTManager,
newJWTAdapter,
newAuthMiddleware,
auth.NewService,
auth.NewHandler,
// User
user.NewRepository,
user.NewService,
user.NewHandler,
// External clients
newOpenAIClient,
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(recognition.Recognizer), new(*openai.Client)),
wire.Bind(new(menu.MenuGenerator), new(*openai.Client)),
wire.Bind(new(recommendation.RecipeGenerator), new(*openai.Client)),
wire.Bind(new(middleware.AccessTokenValidator), new(*jwtAdapter)),
)
return nil, nil
}