Приложение, в котором можно обмениваться с друзьями вещами на время: инструментами, гаджетами, книгами и так далее. Как каршеринг, только для вещей.
Приложение реализовано с помощью:
- Spring Boot
- Spring Data JPA
- БД - PostgreSQL
- JUnit 5
- Springdoc OpenAPI (Swagger UI) — для документирования и тестирования REST API
Для проекта подключён Swagger через библиотеку springdoc-openapi-starter-webmvc-ui.
Он автоматически генерирует интерактивную документацию по REST-эндпоинтам.
📄 Доступ к документации API:
- Swagger UI — http://localhost:9090/swagger-ui/index.html
- OpenAPI спецификация — http://localhost:9090/v3/api-docs
Swagger подключён только в модуле shareIt-server, где реализованы REST-контроллеры.
Сервис shareIt-gateway выполняет роль шлюза и Swagger там не используется.
В приложении реализуются следующие сущности:
- Класс User с полями:
- id — уникальный идентификатор пользователя;
- name — имя или логин пользователя;
- email — адрес электронной почты (что два пользователя не могут иметь одинаковый адрес электронной почты).
- Класс Item с полями:
- id — уникальный идентификатор вещи;
- name — краткое название;
- description — развёрнутое описание;
- available — статус о том, доступна или нет вещь для аренды;
- owner — владелец вещи;
- request — если вещь была создана по запросу другого пользователя, то в этом поле будет храниться ссылка на соответствующий запрос.
- Класс Booking с полями:
- id — уникальный идентификатор бронирования;
- start — дата и время начала бронирования;
- end — дата и время конца бронирования;
- item — вещь, которую пользователь бронирует;
- booker — пользователь, который осуществляет бронирование;
- status — статус бронирования. Может принимать одно из следующих значений:
- WAITING — новое бронирование, ожидает одобрения;
- APPROVED — бронирование подтверждено владельцем;
- REJECTED — бронирование отклонено владельцем;
- CANCELED — бронирование отменено создателем.
- Класс ItemRequest — класс, отвечающий за запрос вещи, с полями:
- id — уникальный идентификатор запроса;
- description — текст запроса, содержащий описание требуемой вещи;
- requestor — пользователь, создавший запрос;
- created — дата и время создания запроса.
- Класс 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-тесты.