ShareIt — сервис для шеринга вещей. Пользователи могут публиковать предметы, бронировать их на время, оставлять комментарии и создавать запросы на недостающие вещи. Проект демонстрирует многомодульную архитектуру (Gateway → Server → DB), валидацию входящих данных и использование Spring Boot с JPA.
- Управление пользователями: регистрация, обновление, получение по ID.
- Вещи: добавление, редактирование, поиск по названию и описанию, фильтрация по доступности.
- Бронирование: создание заявок, подтверждение владельцем, получение бронирований по пользователю/владельцу.
- Комментарии: возможность оставить отзыв о вещи после завершённой аренды.
- Запросы на вещи: публикация запросов на недостающие предметы и отклик на них.
- Валидация: проверка входных данных на уровне Gateway.
- Тестирование: юнит- и интеграционные тесты.
- Java 21
- Spring Boot: Web, Data JPA, Validation
- PostgreSQL / H2 (тесты)
- Maven
- Lombok
- JUnit 5, MockMvc
- Docker Compose (подъём сервиса с БД)
- Gateway — принимает внешние запросы, валидирует их и проксирует в Server.
- Server — основная бизнес-логика (пользователи, вещи, бронирования, комментарии, запросы).
- Common — общие DTO и утилиты.
- Склонировать репозиторий:
git clone https://github.com/russuAV/java-shareit.git
cd java-shareit
- Собрать:
mvn clean install
- Запустить через Maven:
mvn --projects server spring-boot:run
или с Docker:
docker-compose up
- Приложение будет доступно по адресу: http://localhost:8080
Пользователи
- POST /users — создать
- GET /users/{id} — получить
- PATCH /users/{id} — обновить
- DELETE /users/{id} — удалить
Вещи
- POST /items — добавить
- PATCH /items/{id} — обновить
- GET /items/{id} — получить по ID
- GET /items/search?text={query} — поиск по названию/описанию
Бронирования
- POST /bookings — создать
- PATCH /bookings/{bookingId}?approved={true|false} — подтверждение владельцем
- GET /bookings/{id} — получить бронирование
- GET /bookings?state={ALL|CURRENT|PAST|FUTURE|WAITING|REJECTED} — список по пользователю
- GET /bookings/owner?state=... — список по владельцу вещей
Комментарии
- POST /items/{itemId}/comment — добавить отзыв (после аренды)
Запросы
- POST /requests — создать запрос на вещь
- GET /requests — получить свои запросы
- GET /requests/all — получить все запросы
- GET /requests/{id} — получить конкретный запрос
mvn test