ShareIt - сервис для шеринга вещей 🛠️
ShareIt – сервис для аренды вещей между пользователями с базовым функционалом бронирования и управлением предметами.
✅ Реализованный функционал
Создание пользователя с валидацией полей
Обновление данных пользователя
Получение пользователя по ID
Удаление пользователя
Добавление новых предметов с описанием
Редактирование существующих предметов
Поиск предметов по тексту (название/описание)
Получение предмета по ID
Удаление предметов
Создание бронирования с проверкой:
Доступности предмета
Корректности временного интервала
Запрета бронирования своих предметов
Подтверждение/отклонение брони владельцем
Получение списка бронирований:
Для владельца предметов
Для арендатора
Добавление комментариев к предметам
Получение списка комментариев по предмету
Backend :
Java 17
Spring Boot 2.7.3
Spring Data JPA
База данных : H2 (для тестов), PostgreSQL
Тестирование : JUnit 5, Mockito
Сборка : Maven
Проект разделен на два модуля:
shareit
├── gateway # HTTP-контроллеры, DTO, валидация
└── server # Бизнес-логика, работа с БД
Клонировать репозиторий:
git clone https://github.com/vsvldm/java-shareit.git
Собрать и запустить:
mvn clean install
docker-compose up -d
Сервис доступен на порту 8080.
Все запросы проверяются на соответствие DTO
Ошибки возвращаются с кодом 400 Bad Request
Глобальная обработка исключений через @ControllerAdvice
Поле
Правила
Email
Уникальный, формат email
Name
Не пустое
Поле
Правила
Name
Не пустое, макс. 255 символов
Description
Не пустое, макс. 512 символов
Available
Обязательное поле (true/false)
Поле
Правила
Start
Не в прошлом, до End
End
После Start
Item
Существующий ID предмета
Поле
Правила
Text
Не пустое, макс. 1000 символов
Поле
Правила
Description
Не пустое, макс. 512 символов
Пример ошибки валидации:
{
"timestamp" : " 2023-10-05T12:34:56" ,
"status" : " BAD_REQUEST" ,
"error" : " Validation failed" ,
"details" : [" Email must be valid" ]
}
Метод
Путь
Описание
POST
/users
Создать пользователя
PATCH
/users/{userId}
Обновить пользователя
GET
/users/{userId}
Получить пользователя по ID
GET
/users
Получить всех пользователей
DELETE
/users/{userId}
Удалить пользователя
Метод
Путь
Описание
POST
/items
Создать вещь
PATCH
/items/{itemId}
Обновить вещь
GET
/items/{itemId}
Получить вещь по ID
GET
/items
Получить все вещи пользователя
GET
/items/search
Поиск вещей по тексту
POST
/items/{itemId}/comment
Добавить комментарий
Метод
Путь
Описание
POST
/bookings
Создать бронирование
PATCH
/bookings/{bookingId}
Обновить статус бронирования
GET
/bookings/{bookingId}
Получить бронирование по ID
GET
/bookings
Получить бронирования пользователя
GET
/bookings/owner
Получить бронирования владельца
Запросы на вещи (ItemRequest)
Метод
Путь
Описание
POST
/requests
Создать запрос
GET
/requests
Получить свои запросы
GET
/requests/all
Получить все запросы
GET
/requests/{requestId}
Получить запрос по ID