Files
food-ai/backend
dbastrikin e57ff8e06c feat: implement Iteration 1 — AI recipe recommendations
Backend:
- Add Groq LLM client (llama-3.3-70b) for recipe generation with JSON
  retry strategy (retries only on parse errors, not API errors)
- Add Pexels client for parallel photo search per recipe
- Add saved_recipes table (migration 004) with JSONB fields
- Add GET /recommendations endpoint (profile-aware prompt building)
- Add POST/GET/GET{id}/DELETE /saved-recipes CRUD endpoints
- Wire gemini, pexels, recommendation, savedrecipe packages in main.go

Flutter:
- Add Recipe, SavedRecipe models with json_serializable
- Add RecipeService (getRecommendations, getSavedRecipes, save, delete)
- Add RecommendationsNotifier and SavedRecipesNotifier (Riverpod)
- Add RecommendationsScreen with skeleton loading and refresh FAB
- Add RecipeDetailScreen (SliverAppBar, nutrition tooltip, steps with timer)
- Add SavedRecipesScreen with Dismissible swipe-to-delete and empty state
- Update RecipesScreen to TabBar (Recommendations / Saved)
- Add /recipe-detail route outside ShellRoute (no bottom nav)
- Extend ApiClient with getList() and deleteVoid()

Project:
- Add CLAUDE.md with English-only rule for comments and commit messages

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-21 22:43:29 +02:00
..

FoodAI Backend

Go REST API с авторизацией через Firebase, JWT и PostgreSQL.

Стек

  • Go 1.23 — язык
  • chi — HTTP-роутер
  • pgx / pgxpool — PostgreSQL-драйвер
  • goose — миграции
  • golang-jwt/v5 — JWT
  • Firebase Admin SDK — верификация токенов

Требования

  • Go 1.23+
  • Docker & Docker Compose
  • goose (go install github.com/pressly/goose/v3/cmd/goose@latest)
  • Файл firebase-credentials.json (сервисный аккаунт Firebase)

Быстрый старт

1. Переменные окружения

cp .env.example .env

Отредактируйте .env:

Переменная Описание По умолчанию
DATABASE_URL DSN подключения к PostgreSQL postgres://food_ai:food_ai_local@localhost:5432/food_ai?sslmode=disable
FIREBASE_CREDENTIALS_FILE Путь к JSON-ключу сервисного аккаунта Firebase ./firebase-credentials.json
JWT_SECRET Секрет для подписи JWT
JWT_ACCESS_DURATION Время жизни access-токена 15m
JWT_REFRESH_DURATION Время жизни refresh-токена 720h
PORT Порт сервера 8080
ALLOWED_ORIGINS CORS-разрешённые источники http://localhost:3000

2. Запуск через Docker Compose

Поднимает PostgreSQL и собирает приложение:

make docker-up

3. Запуск локально (только БД в Docker)

# Запустить только PostgreSQL
docker compose up -d postgres

# Применить миграции
make migrate-up

# Запустить сервер
make run

Команды

Команда Описание
make run Запустить сервер в режиме разработки
make test Запустить unit-тесты
make test-integration Запустить интеграционные тесты (требует Docker)
make lint Проверить код через golangci-lint
make docker-up Поднять PostgreSQL + приложение
make docker-down Остановить контейнеры
make docker-logs Логи приложения
make migrate-up Применить миграции
make migrate-down Откатить последнюю миграцию
make migrate-status Статус миграций
make migrate-create name=<name> Создать новую миграцию

API

Публичные эндпоинты

Метод Путь Описание
GET /health Проверка состояния сервера и БД
POST /auth/login Вход через Firebase ID-токен
POST /auth/refresh Обновление JWT по refresh-токену
POST /auth/logout Выход (инвалидация refresh-токена)

Защищённые эндпоинты (Bearer JWT)

Метод Путь Описание
GET /profile Получить профиль пользователя
PUT /profile Обновить профиль пользователя

Примеры запросов

Логин:

curl -X POST http://localhost:8080/auth/login \
  -H "Content-Type: application/json" \
  -d '{"firebase_token": "<FIREBASE_ID_TOKEN>"}'

Получить профиль:

curl http://localhost:8080/profile \
  -H "Authorization: Bearer <ACCESS_TOKEN>"

Обновить профиль:

curl -X PUT http://localhost:8080/profile \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"height_cm": 180, "weight_kg": 75.5, "age": 28, "gender": "male", "activity": "moderate", "goal": "maintain"}'

Структура проекта

backend/
├── cmd/server/         # Точка входа
├── internal/
│   ├── auth/           # Firebase-верификация, JWT, сервис и хэндлер авторизации
│   ├── config/         # Конфигурация через переменные окружения
│   ├── database/       # Подключение к PostgreSQL (pgxpool)
│   ├── middleware/     # RequestID, Logging, Recovery, CORS, Auth
│   ├── server/         # Роутер (chi)
│   ├── testutil/       # Вспомогательные утилиты для тестов
│   └── user/           # Модель, репозиторий, сервис, хэндлер, расчёт калорий
├── migrations/         # SQL-миграции (goose)
├── .env.example
├── docker-compose.yml
├── Dockerfile
└── Makefile