Skip to content

ShareIt - бэкенд для шеринга вещей на Java/Spring Boot. REST API с системой бронирования, управлением предметами и пользователями. Микросервисная архитектура, Docker, PostgreSQL, полное тестовое покрытие.

Notifications You must be signed in to change notification settings

Evgeniy-Dmitriev/java-shareit

Repository files navigation

ShareIt 🚀

ShareIt — это бэкенд-приложение для шеринга (совместного использования) вещей. Пользователи могут предлагать свои вещи в аренду, бронировать нужные им предметы, оставлять комментарии после использования.

📖 О проекте

Это учебный проект, разработанный в рамках курса Java-разработки. Основная цель — создание полнофункционального бэкенд-приложения с использованием современного стека технологий Java и освоение принципов REST API, работы с базами данных и микросервисной архитектуры.

Проект решает проблему организации совместного использования вещей между пользователями, позволяя эффективно управлять арендой предметов, отслеживать бронирования и получать обратную связь от пользователей.

🛠 Технологический стек

Backend

  • 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) - хранилище данных

📋 Функциональность

Модули приложения:

  1. Пользователи (Users) - регистрация и управление пользователями
  2. Предметы (Items) - добавление, редактирование и поиск предметов
  3. Бронирования (Bookings) - система аренды предметов
  4. Запросы (ItemRequests) - создание запросов на предметы
  5. Комментарии (Comments) - отзывы о использованных предметах

Основные возможности:

  • ✅ Регистрация и аутентификация пользователей
  • ✅ Добавление предметов для аренды
  • ✅ Поиск предметов по названию и описанию
  • ✅ Бронирование предметов на определенные даты
  • ✅ Подтверждение/отклонение бронирований владельцами
  • ✅ Комментирование после использования предметов
  • ✅ Создание запросов на нужные предметы

🚀 Запуск приложения

Предварительные требования

  • Java 21 или выше
  • Maven 3.6+
  • Docker и Docker Compose
  • PostgreSQL (если запуск без Docker)

Способ 1: Запуск через Docker Compose (рекомендуемый)

  1. Клонируйте репозиторий:
git clone <your-repository-url>
cd shareit
  1. Соберите и запустите приложение:
docker-compose up --build

Приложение будет доступно по адресам:

Способ 2: Локальный запуск

Настройте базу данных 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

Способ 3: Запуск тестов

# Все тесты
mvn test

# С проверкой покрытия
mvn test jacoco:report

# Со статическим анализом
mvn checkstyle:check spotbugs:check

📊 API Endpoints

Пользователи

  • POST /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

🔧 Конфигурация

Основные настройки (application.properties):

# 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=9090

Docker окружение:

environment:
  - SPRING_DATASOURCE_URL=jdbc:postgresql://db:5432/shareit
  - SPRING_DATASOURCE_USERNAME=shareit
  - SPRING_DATASOURCE_PASSWORD=shareit
  - SHAREIT_SERVER_URL=http://server:9090

📈 Планы по доработке

Краткосрочные улучшения:

  1. Добавить аутентификацию - реализовать JWT-based аутентификацию вместо header-based
  2. Улучшить валидацию - добавить кастомные валидаторы для сложных бизнес-правил
  3. Оптимизировать запросы - добавить пагинацию для всех списковых endpoint'ов
  4. Улучшить обработку ошибок - создать единый формат ошибок и глобальный exception handler

Среднесрочные улучшения:

  1. Добавить кэширование - реализовать Redis кэширование для часто запрашиваемых данных
  2. Реализовать уведомления - добавить email/SMS уведомления о бронированиях
  3. Добавить платежную систему - интеграция с платежными шлюзами для монетизации
  4. Создать административную панель - веб-интерфейс для управления приложением

Долгосрочные улучшения:

  1. Микросервисная архитектура - разделение на отдельные сервисы (users, items, bookings)
  2. Добавить полнотекстовый поиск - интеграция с Elasticsearch для улучшенного поиска
  3. Реализовать рекомендательную систему - ML-based рекомендации предметов
  4. Мобильное приложение - разработка iOS/Android клиентов

👥 Разработчики

Проект разработан Евгением Дмитриевым как учебный проект в рамках курса Java-разработки.

About

ShareIt - бэкенд для шеринга вещей на Java/Spring Boot. REST API с системой бронирования, управлением предметами и пользователями. Микросервисная архитектура, Docker, PostgreSQL, полное тестовое покрытие.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published