Skip to content

SemenenkoEugene/java-shareit

Repository files navigation

java-shareit

Приложение, в котором можно обмениваться с друзьями вещами на время: инструментами, гаджетами, книгами и так далее. Как каршеринг, только для вещей.

Приложение реализовано с помощью:

  • Spring Boot
  • Spring Data JPA
  • БД - PostgreSQL
  • JUnit 5
  • Springdoc OpenAPI (Swagger UI) — для документирования и тестирования REST API

Swagger UI

Для проекта подключён Swagger через библиотеку springdoc-openapi-starter-webmvc-ui.
Он автоматически генерирует интерактивную документацию по REST-эндпоинтам.

📄 Доступ к документации API:

Swagger подключён только в модуле shareIt-server, где реализованы REST-контроллеры.
Сервис shareIt-gateway выполняет роль шлюза и Swagger там не используется.


В приложении реализуются следующие сущности:

  1. Класс User с полями:
    • id — уникальный идентификатор пользователя;
    • name — имя или логин пользователя;
    • email — адрес электронной почты (что два пользователя не могут иметь одинаковый адрес электронной почты).
  2. Класс Item с полями:
    • id — уникальный идентификатор вещи;
    • name — краткое название;
    • description — развёрнутое описание;
    • available — статус о том, доступна или нет вещь для аренды;
    • owner — владелец вещи;
    • request — если вещь была создана по запросу другого пользователя, то в этом поле будет храниться ссылка на соответствующий запрос.
  3. Класс Booking с полями:
    • id — уникальный идентификатор бронирования;
    • start — дата и время начала бронирования;
    • end — дата и время конца бронирования;
    • item — вещь, которую пользователь бронирует;
    • booker — пользователь, который осуществляет бронирование;
    • status — статус бронирования. Может принимать одно из следующих значений:
    1. WAITING — новое бронирование, ожидает одобрения;
    2. APPROVED — бронирование подтверждено владельцем;
    3. REJECTED — бронирование отклонено владельцем;
    4. CANCELED — бронирование отменено создателем.
  4. Класс ItemRequest — класс, отвечающий за запрос вещи, с полями:
    • id — уникальный идентификатор запроса;
    • description — текст запроса, содержащий описание требуемой вещи;
    • requestor — пользователь, создавший запрос;
    • created — дата и время создания запроса.
  5. Класс Comment - класс, отвечающий за комментарии, с полями:
    • id — уникальный идентификатор комментария;
    • text — содержимое комментария;
    • item — вещь, к которой относится комментарий;
    • author — автор комментария;
    • created — дата создания комментария.

Приложение разбито на два сервиса:

shareIt-server - основной сервис с бизнес-логикой

shareIt-gateway - сервис по валидации входящих данных

Запуск настроен через Docker. Приложения shareIt-server, shareIt-gateway и база данных PostgreSQL запускаются в отдельном Docker-контейнере каждый и их общение происходит через REST.

В проекте реализованы:

  • юнит-тесты с помощью JUnit 5;
  • интеграционные тесты, проверяющие взаимодействие с базой данных;
  • реализованы тесты для REST-эндпоинтов с использованием MockMVC;
  • реализованы тесты для слоя репозиториев с использованием аннотации @DataJpaTest;
  • реализованы тесты для работы с JSON для DTO;

Для проверки реализованной функциональности использовались postman-тесты.

About

Приложение, в котором можно обмениваться с друзьями вещами на время: инструментами, гаджетами, книгами и так далее. Как каршеринг, только для вещей.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages