ссылка на техническое задание: https://docs.google.com/document/d/11yEfzp2Rj0v-PFfAOwnJPydv0AmIy0F6yY391sPSxn8/edit?tab=t.0
REST API-сервис для учета дневной нормы калорий и отслеживания приёмов пищи пользователей. Система автоматически рассчитывает суточную калорийность по формуле Харриса-Бенедикта и позволяет добавлять блюда, составлять приёмы пищи и получать отчеты.
-
Добавление пользователя в систему:
- Добавление пользователя с параметрами:Имя, Email, Возраст, Вес, Рост, Активность, Пол
- Автоматический расчет дневной нормы калорий за день реализовано с помощью аннотации @Scheduled
-
Добавления блюда в систему:
- Добавление блюд с характеристиками: Название, Калорийность на порцию, Белки, жиры, углеводы
-
Приемы пищи:
- Пользователь может добавлять приёмы пищи, указывая список блюд
-
Отчёты:
- Отчет за день: список всех приёмов пищи и суммарная калорийность
- Проверка соблюдения дневной нормы калорий
- История питания по дням
-
Журналирование и логирование:
- Все создания записей записываются в журнал через Slf4j от Lombok. Логи сохраняются в файл.
-
API:
- REST API реализовано для всех действий, с подробной документацией через Swagger.
- Java 17
- Spring Boot
- Spring Data JPA
- PostgreSQL
- JUnit & Mockito
- Docker
- Lombok
- Liquibase (для миграций)
- Swagger (для документации)
- Созданы и заполнены таблицы для:
- users, meals, dishes, meal_dishes, reports.
- Созданы модели и репозитории для:
- users, meals, dishes, reports.
- Swagger: Документирует каждый DTO и эндпоинт.
- Slf4j: Логирование всех действий через Lombok Slf4j.
- ScheduledConfig: Для активации планировщика создании записей.
- GlobalExceptionHandler: Исключения обрабатываются централизованно для каждой сущности.
- Все DTO, принимаемые через POST и PUT запросы, проходят валидацию на корректность. Дополнительно для классов UserDto & MealDto реализованы кастомные аннотации для проверки некоторых константных значений.
- Реализована логика на основе паттернов "Синглтон" & "фабричный" для проверки различных данных (пол, активность и цель пользователя и др...).
- Регистрация пользователей.
- Управление ресурсами (CRUD).
- Создание блюд и према пищи.
- Автоматическое добавление записей у пользователя.
- Чтение и проверка нормы пользователя.
- DTO на основе Record: Использованы для передачи данных между клиентом и сервером.
- Тестирование: Добавлены юнит-тесты с использованием JUnit и Mockito. Методы тестируются изолированно — без зависимости от БД и других сервисов.
- Плановое добавление данных: Автоматическое добавление и расчет данных в БД с помощью аннотации @Scheduled.
- Кастомные валидации: Реализованы отдельные валидаторы, чтобы вынести бизнес-валидации за пределы сервисного слоя.
- Начальные данные: Система заполняется начальными данными через Liquibase для тестирования.
- MapStruct: Интегрирован MapStruct для удобной и быстрой конвертации между сущностями и DTO.
- Docker: Проект и база данных запускаются в Docker-окружении с использованием Docker Compose для удобства развертывания и управления контейнерами.
- Клонируйте репозиторий.
- Построите Docker-образ с помощью следующей команды:
docker build -t eat_smart:latest . - Запустите приложение в Docker с использованием Docker Compose:
docker compose up -d --build - Используйте Postman для тестирования API.
Коллекция для тестирования API доступна в проекте(в папке resources) и может быть импортирована в Postman для демонстрации функциональности.