ShareIt - это веб-приложение для совместного использования вещей, построенное на микросервисной архитектуре с использованием Spring Boot.
ShareIt позволяет пользователям:
- Регистрироваться и управлять профилем
- Добавлять вещи для аренды
- Бронировать вещи других пользователей
- Оставлять отзывы о вещах
- Создавать запросы на поиск определенных вещей
Проект построен на микросервисной архитектуре и состоит из двух основных модулей:
- Назначение: API Gateway для маршрутизации запросов
- Технологии: Spring Boot, Spring Web, Validation
- Функции:
- Принимает HTTP-запросы от клиентов
- Валидирует входящие данные
- Перенаправляет запросы на соответствующие сервисы
- Обрабатывает ответы и возвращает их клиентам
- Назначение: Основной сервис с бизнес-логикой
- Технологии: Spring Boot, Spring Data JPA, PostgreSQL/H2
- Функции:
- Управление пользователями
- Управление вещами (items)
- Система бронирования
- Система комментариев
- Управление запросами на вещи
- Java 21
- Spring Boot 3.3.2
- Spring Data JPA - для работы с базой данных
- Spring Web - для REST API
- Spring Validation - для валидации данных
- Lombok - для сокращения boilerplate кода
- PostgreSQL 16.1 - основная база данных
- H2 - для тестирования
- Maven - система сборки
- Docker & Docker Compose - контейнеризация
- Checkstyle - проверка стиля кода
- SpotBugs - статический анализ кода
- JaCoCo - покрытие тестами
id- уникальный идентификаторname- имя пользователяemail- email (уникальный)
id- уникальный идентификаторname- название вещиdescription- описаниеavailable- доступность для арендыowner- владелец вещиrequest- связанный запрос (опционально)
id- уникальный идентификаторstart- дата начала арендыend- дата окончания арендыitem- бронируемая вещьbooker- пользователь, который бронируетstatus- статус бронирования (WAITING, APPROVED, REJECTED, CANCELED)
id- уникальный идентификаторtext- текст комментарияitem- вещь, к которой относится комментарийauthor- автор комментарияcreated- дата создания
id- уникальный идентификаторdescription- описание нужной вещиrequestor- пользователь, создавший запросcreated- дата созданияitems- список вещей, созданных по этому запросу
POST /users- создание пользователяPATCH /users/{userId}- обновление пользователяGET /users/{userId}- получение пользователя по IDGET /users- получение всех пользователейDELETE /users/{userId}- удаление пользователя
POST /items- создание вещиPATCH /items/{itemId}- обновление вещиGET /items/{itemId}- получение вещи по ID с комментариямиGET /items- получение всех вещей пользователяGET /items/search?text={text}- поиск вещей по названию/описаниюPOST /items/{itemId}/comment- добавление комментария к вещи
POST /bookings- создание бронированияPATCH /bookings/{bookingId}?approved={boolean}- подтверждение/отклонение бронированияGET /bookings/{bookingId}- получение бронирования по IDGET /bookings?state={state}- получение бронирований пользователяGET /bookings/owner?state={state}- получение бронирований вещей пользователя
POST /requests- создание запроса на вещьGET /requests- получение запросов пользователяGET /requests/all- получение всех запросов (кроме собственных)GET /requests/{requestId}- получение запроса по ID
java-shareit/
├── gateway/ # API Gateway модуль
│ ├── src/main/java/ # Исходный код
│ ├── src/main/resources/ # Конфигурация
│ └── pom.xml # Зависимости Gateway
├── server/ # Основной сервис
│ ├── src/main/java/ # Исходный код
│ ├── src/main/resources/ # Конфигурация и SQL схемы
│ ├── src/test/java/ # Тесты
│ └── pom.xml # Зависимости Server
├── docker-compose.yml # Docker Compose для продакшена
├── compose.yaml # Docker Compose для разработки
├── pom.xml # Корневой POM с общими настройками
├── checkstyle.xml # Конфигурация Checkstyle
└── suppressions.xml # Исключения для SpotBugs
- Микросервисная архитектура с разделением на Gateway и Server
- RESTful API с использованием Spring Web
- JPA/Hibernate для работы с базой данных
- Валидация данных на уровне Gateway
- Обработка ошибок с централизованным ErrorHandler
- Логирование всех HTTP-запросов и ответов
- Docker-контейнеризация для простого развертывания
- Покрытие тестами с требованиями к качеству кода
- Telegram - @sobolev_rs