ShopAPI — это RESTful-приложение для управления данными интернет-магазина. Оно предоставляет API для работы с товарами, пользователями, поставщиками, адресами и изображениями товаров. Для тестирования и ознакомления с API используется Swagger UI в котором реализована серверная часть приложения ShopAPI.
- Java 17
- Maven
- Spring Boot
- Spring Data JPA
- JDBC
- H2
- PostgreSQL
- Lombok
- Swagger
- JUnit 5
Работа с базой данных осуществляется через JDBC (Java Database Connectivity). Для преобразования данных между слоями (ResultSet -> сущности -> DTO) используются самописные мапперы.
Для запуска сборки необходим Maven и JDK 17
- запуск сборки через скрипт build_app.sh или mvn clean package
- после сборки запустить в контейнере compose_up.sh
Приложение построено с использованием реляционной базы данных Postgres
Репозиторий (Repository):
- Выполняет SQL-запросы через JDBC.
- Возвращает данные в виде объектов (Entity).
Сервис (Service):
- Обрабатывает бизнес-логику.
- Преобразует данные из сущностей (Entity) в DTO (Data Transfer Object) для контроллеров и обратно.
Контроллер (Controller):
- Предоставляет REST API для работы с клиентом.
- Принимает входящие запросы, передает их в сервисы и возвращает ответы в виде DTO.
Регистрация клиента:
- При регистрации клиента создается новый пользователь в базе данных.
- Поля автоматически проверяются на соответствие (например, email).
- Обязательным полем при регистрации является Адрес, при создании пользователя автоматически создается уникальная запись в таблице адресов.
Обработка ошибок:
- Используется @ControllerAdvice для централизованного перехвата и обработки исключений.
- Конкретные ошибки, такие как отсутствие записи, нарушение уникальности и другие, обрабатываются на уровне сервисов и репозиториев.
- Добавлена собственная аннотация для проверки ввода номера телефона.
Для контроля количества отдаваемых данных используется пагинация.
- Параметры пагинации передаются в запросе.
- Используется собственный формат ответа для пагинации PaginatedResponse.
Swagger UI:
- Генерирует интерактивную документацию API.
- Позволяет тестировать эндпоинты прямо в браузере.
Основной поток данных:
- Запрос клиента → Контроллер → Сервис → Репозиторий.
- Ответ из базы → Репозиторий → Сервис → Контроллер → Клиент.
Пример обработки данных:
- SQL-запрос выполняется в репозитории.
- Результат (ResultSet) преобразуется в объект сущности (Entity) через маппер.
- Сервис применяет бизнес-логику и возвращает DTO.
- Контроллер отправляет клиенту результат в формате JSON.