ShareIt — это бэкенд-приложение для шеринга (совместного использования) вещей. Пользователи могут предлагать свои вещи в аренду, бронировать нужные им предметы, оставлять комментарии после использования.
Это учебный проект, разработанный в рамках курса Java-разработки. Основная цель — создание полнофункционального бэкенд-приложения с использованием современного стека технологий Java и освоение принципов REST API, работы с базами данных и микросервисной архитектуры.
Проект решает проблему организации совместного использования вещей между пользователями, позволяя эффективно управлять арендой предметов, отслеживать бронирования и получать обратную связь от пользователей.
- Java 21 - основной язык разработки
- Spring Boot 3.3.2 - фреймворк для создания приложения
- Spring Data JPA - работа с базой данных
- Hibernate - ORM для работы с PostgreSQL
- Lombok - упрощение написания кода
- PostgreSQL - основная реляционная БД
- H2 - in-memory база для тестирования
- JUnit 5 - фреймворк для модульного тестирования
- Mockito - мокирование зависимостей
- AssertJ - fluent assertions для тестов
- Docker - контейнеризация приложения
- Docker Compose - оркестрация multi-container приложения
- Maven - система сборки проекта
- GitHub Actions - CI/CD пайплайны
- Jakarta Validation - валидация входных данных
- Checkstyle - проверка стиля кода
- SpotBugs - статический анализ кода
- JaCoCo - анализ покрытия кода тестами
Проект использует микросервисную архитектуру с разделением на:
- Gateway (
shareit-gateway) - API шлюз для обработки запросов и валидации - Server (
shareit-server) - основной сервис с бизнес-логикой - Database (
PostgreSQL) - хранилище данных
- Пользователи (Users) - регистрация и управление пользователями
- Предметы (Items) - добавление, редактирование и поиск предметов
- Бронирования (Bookings) - система аренды предметов
- Запросы (ItemRequests) - создание запросов на предметы
- Комментарии (Comments) - отзывы о использованных предметах
- ✅ Регистрация и аутентификация пользователей
- ✅ Добавление предметов для аренды
- ✅ Поиск предметов по названию и описанию
- ✅ Бронирование предметов на определенные даты
- ✅ Подтверждение/отклонение бронирований владельцами
- ✅ Комментирование после использования предметов
- ✅ Создание запросов на нужные предметы
- Java 21 или выше
- Maven 3.6+
- Docker и Docker Compose
- PostgreSQL (если запуск без Docker)
- Клонируйте репозиторий:
git clone <your-repository-url>
cd shareit- Соберите и запустите приложение:
docker-compose up --buildПриложение будет доступно по адресам:
- Gateway: http://localhost:8080
- Server: http://localhost:9090
- PostgreSQL: localhost:6541
Настройте базу данных PostgreSQL:
CREATE DATABASE shareit;
CREATE USER shareit WITH PASSWORD 'shareit';
GRANT ALL PRIVILEGES ON DATABASE shareit TO shareit;Запустите сервер:
cd server
mvn spring-boot:run -Dspring.profiles.active=devЗапустите gateway:
cd gateway
mvn spring-boot:run# Все тесты
mvn test
# С проверкой покрытия
mvn test jacoco:report
# Со статическим анализом
mvn checkstyle:check spotbugs:checkPOST /users- создание пользователяPATCH /users/{userId}- обновление пользователяGET /users/{userId}- получение пользователяGET /users- получение всех пользователейDELETE /users/{userId}- удаление пользователя
POST /items- создание предметаPATCH /items/{itemId}- обновление предметаGET /items/{itemId}- получение предметаGET /items- получение всех предметов пользователяGET /items/search?text={query}- поиск предметовPOST /items/{itemId}/comment- добавление комментария
POST /bookings- создание бронированияPATCH /bookings/{bookingId}?approved={true/false}- подтверждение бронированияGET /bookings/{bookingId}- получение бронированияGET /bookings- получение бронирований пользователяGET /bookings/owner- получение бронирований владельца
POST /requests- создание запросаGET /requests- получение запросов пользователяGET /requests/all- получение всех запросовGET /requests/{requestId}- получение запроса по ID
users- информация о пользователяхitems- предметы для арендыbookings- бронирования предметовcomments- комментарии к предметамitem_requests- запросы на предметы
База данных инициализируется автоматически через Hibernate DDL auto-create.
Проект включает comprehensive тестирование:
- Unit tests - тестирование отдельных компонентов
- Integration tests - тестирование взаимодействия компонентов
- Repository tests - тестирование работы с БД
Запуск тестов с покрытием:
mvn test jacoco:reportОтчет о покрытии будет доступен в: target/site/jacoco/index.html
# Database
spring.datasource.url=jdbc:postgresql://localhost:5432/shareit
spring.datasource.username=shareit
spring.datasource.password=shareit
# JPA
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.show-sql=true
# Server
server.port=9090environment:
- SPRING_DATASOURCE_URL=jdbc:postgresql://db:5432/shareit
- SPRING_DATASOURCE_USERNAME=shareit
- SPRING_DATASOURCE_PASSWORD=shareit
- SHAREIT_SERVER_URL=http://server:9090- Добавить аутентификацию - реализовать JWT-based аутентификацию вместо header-based
- Улучшить валидацию - добавить кастомные валидаторы для сложных бизнес-правил
- Оптимизировать запросы - добавить пагинацию для всех списковых endpoint'ов
- Улучшить обработку ошибок - создать единый формат ошибок и глобальный exception handler
- Добавить кэширование - реализовать Redis кэширование для часто запрашиваемых данных
- Реализовать уведомления - добавить email/SMS уведомления о бронированиях
- Добавить платежную систему - интеграция с платежными шлюзами для монетизации
- Создать административную панель - веб-интерфейс для управления приложением
- Микросервисная архитектура - разделение на отдельные сервисы (users, items, bookings)
- Добавить полнотекстовый поиск - интеграция с Elasticsearch для улучшенного поиска
- Реализовать рекомендательную систему - ML-based рекомендации предметов
- Мобильное приложение - разработка iOS/Android клиентов
Проект разработан Евгением Дмитриевым как учебный проект в рамках курса Java-разработки.