Shop-API

0

Описание

RESTful Shop API на Java с PostgreSQL и Swagger

Языки

  • Markdown100%
3 месяца назад
3 месяца назад
3 года назад
3 года назад
3 месяца назад
Readme.md

REST API для магазина бытовой техники.

Проект реализован на Java и предоставляет бэкенд-часть для дальнейшего подключения веб-, desktop- или мобильных клиентов.

API спроектирован в соответствии с RESTful-подходом, использует PostgreSQL, DTO, Repository pattern, покрыт Swagger спецификацией.

Возможности API

  • Клиенты

    • Добавление клиента
    • Удаление клиента по id
    • Получение клиентов по имени и фамилии
    • Получение списка всех клиентов
    • поддержка пагинации (limit, offset)
    • Обновление адреса клиента
  • Товары

    • Добавление товара
    • Уменьшение количества товара на складе
    • Получение товара по id
    • Получение всех доступных товаров
    • Удаление товара
  • Поставщики

    • Добавление поставщика
    • Изменение адреса поставщика
    • Удаление поставщика
    • Получение всех поставщиков
    • Получение поставщика по id
  • Изображения товаров

    • Загрузка изображения товара
    • Обновление изображения
    • Удаление изображения
    • Получение изображения по id
    • Получение изображения конкретного товара

Запуск проекта

Требования

  • Java 21+
  • PostgreSQL установлен и запущен
  • Установлен Gradle (или использовать встроенный wrapper
    ./gradlew
    )

Создание базы данных

  • перейти в каталог
    src/ShopAPI/src/
  • запустить скрипт создания базы
    sudo -u postgres bash create_db.sh

Postman коллекция и окружение лежат в

src/postman_collections/


База данных должна соответствовать принципу 3НФ:

  • атомарность значений (одно значение в ячейке, нет массивов или списков в одной колонке) и отсутствие повторяющихся групп (1НФ);
  • все неключевые атрибуты зависят от всего первичного ключа, а не от его части, например, в нашем случае адреса хранятся в отдельной таблице, а не в таблице поставщиков (2НФ);
  • неключевые атрибуты не зависят друг от друга (3НФ).

Прослойка "репозиторий"

  • инкапсулирует доступ к БД,
  • скрывает SQL от бизнес-логики,
  • выполняет CRUD-операции, предоставляет методы работы с сущностями.

Благодаря JpaRepository получаем готовые методы для CRUD-операций.

Прослойка "контроллер"

Входная точка АПИ. Не содержит бизнес-логики и служит связующим звеном между клиентом и сервисным слоем.

  • принимают HTTP-запросы,
  • читают параметры, path, body,
  • запускают валидацию (@Valid),
  • вызывают сервисы,
  • возвращают HTTP-ответ.

Модель

  • отражает сущности БД,
  • напрямую маппится на таблицы БД,
  • содержит JPA аннотации.

Прослойка "DTO"

DTO - модели передачи данных через API.
RequestDto - входные данные
ResponseDto - выходные данные
Используются в запросах и ответах.
DTO используются для передачи данных между клиентом и сервером и позволяют изолировать доменную модель от внешнего API.

Прослойка "mapper"

Мапперы преобразуют Entity <=> DTO (явная трансформация). Выносят маппинг из контроллеров, упрощают поддержку.