refactor: restructure internal/ into adapters/, infra/, and app layers
- internal/gemini/ → internal/adapters/openai/ (renamed package to openai) - internal/pexels/ → internal/adapters/pexels/ - internal/config/ → internal/infra/config/ - internal/database/ → internal/infra/database/ - internal/locale/ → internal/infra/locale/ - internal/middleware/ → internal/infra/middleware/ - internal/server/ → internal/infra/server/ All import paths and call sites updated accordingly. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -11,9 +11,9 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/food-ai/backend/internal/dish"
|
||||
"github.com/food-ai/backend/internal/gemini"
|
||||
"github.com/food-ai/backend/internal/locale"
|
||||
"github.com/food-ai/backend/internal/middleware"
|
||||
"github.com/food-ai/backend/internal/adapters/openai"
|
||||
"github.com/food-ai/backend/internal/infra/locale"
|
||||
"github.com/food-ai/backend/internal/infra/middleware"
|
||||
"github.com/food-ai/backend/internal/user"
|
||||
"github.com/go-chi/chi/v5"
|
||||
)
|
||||
@@ -41,7 +41,7 @@ type RecipeSaver interface {
|
||||
// Handler handles menu and shopping-list endpoints.
|
||||
type Handler struct {
|
||||
repo *Repository
|
||||
gemini *gemini.Client
|
||||
openaiClient *openai.Client
|
||||
pexels PhotoSearcher
|
||||
userLoader UserLoader
|
||||
productLister ProductLister
|
||||
@@ -51,7 +51,7 @@ type Handler struct {
|
||||
// NewHandler creates a new Handler.
|
||||
func NewHandler(
|
||||
repo *Repository,
|
||||
geminiClient *gemini.Client,
|
||||
openaiClient *openai.Client,
|
||||
pexels PhotoSearcher,
|
||||
userLoader UserLoader,
|
||||
productLister ProductLister,
|
||||
@@ -59,7 +59,7 @@ func NewHandler(
|
||||
) *Handler {
|
||||
return &Handler{
|
||||
repo: repo,
|
||||
gemini: geminiClient,
|
||||
openaiClient: openaiClient,
|
||||
pexels: pexels,
|
||||
userLoader: userLoader,
|
||||
productLister: productLister,
|
||||
@@ -137,7 +137,7 @@ func (h *Handler) GenerateMenu(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
// Generate 7-day plan via Gemini.
|
||||
days, err := h.gemini.GenerateMenu(r.Context(), menuReq)
|
||||
days, err := h.openaiClient.GenerateMenu(r.Context(), menuReq)
|
||||
if err != nil {
|
||||
slog.Error("generate menu", "user_id", userID, "err", err)
|
||||
writeError(w, http.StatusServiceUnavailable, "menu generation failed, please try again")
|
||||
@@ -449,8 +449,8 @@ type userPreferences struct {
|
||||
Restrictions []string `json:"restrictions"`
|
||||
}
|
||||
|
||||
func buildMenuRequest(u *user.User, lang string) gemini.MenuRequest {
|
||||
req := gemini.MenuRequest{DailyCalories: 2000, Lang: lang}
|
||||
func buildMenuRequest(u *user.User, lang string) openai.MenuRequest {
|
||||
req := openai.MenuRequest{DailyCalories: 2000, Lang: lang}
|
||||
if u.Goal != nil {
|
||||
req.UserGoal = *u.Goal
|
||||
}
|
||||
@@ -468,7 +468,7 @@ func buildMenuRequest(u *user.User, lang string) gemini.MenuRequest {
|
||||
}
|
||||
|
||||
// recipeToCreateRequest converts a Gemini recipe to a dish.CreateRequest.
|
||||
func recipeToCreateRequest(r gemini.Recipe) dish.CreateRequest {
|
||||
func recipeToCreateRequest(r openai.Recipe) dish.CreateRequest {
|
||||
cr := dish.CreateRequest{
|
||||
Name: r.Title,
|
||||
Description: r.Description,
|
||||
|
||||
Reference in New Issue
Block a user