Skip to content

ShareIt - это веб-приложение для совместного использования вещей, построенное на микросервисной архитектуре с использованием Spring Boot.

Notifications You must be signed in to change notification settings

Just-Roman/java-shareit

Repository files navigation

ShareIt

ShareIt - это веб-приложение для совместного использования вещей, построенное на микросервисной архитектуре с использованием Spring Boot.

Описание проекта

ShareIt позволяет пользователям:

  • Регистрироваться и управлять профилем
  • Добавлять вещи для аренды
  • Бронировать вещи других пользователей
  • Оставлять отзывы о вещах
  • Создавать запросы на поиск определенных вещей

Архитектура

Проект построен на микросервисной архитектуре и состоит из двух основных модулей:

1. Gateway (Порт 8080)

  • Назначение: API Gateway для маршрутизации запросов
  • Технологии: Spring Boot, Spring Web, Validation
  • Функции:
    • Принимает HTTP-запросы от клиентов
    • Валидирует входящие данные
    • Перенаправляет запросы на соответствующие сервисы
    • Обрабатывает ответы и возвращает их клиентам

2. Server (Порт 9090)

  • Назначение: Основной сервис с бизнес-логикой
  • Технологии: Spring Boot, Spring Data JPA, PostgreSQL/H2
  • Функции:
    • Управление пользователями
    • Управление вещами (items)
    • Система бронирования
    • Система комментариев
    • Управление запросами на вещи

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

Backend

  • 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 - покрытие тестами

Модели данных

User (Пользователь)

  • id - уникальный идентификатор
  • name - имя пользователя
  • email - email (уникальный)

Item (Вещь)

  • id - уникальный идентификатор
  • name - название вещи
  • description - описание
  • available - доступность для аренды
  • owner - владелец вещи
  • request - связанный запрос (опционально)

Booking (Бронирование)

  • id - уникальный идентификатор
  • start - дата начала аренды
  • end - дата окончания аренды
  • item - бронируемая вещь
  • booker - пользователь, который бронирует
  • status - статус бронирования (WAITING, APPROVED, REJECTED, CANCELED)

Comment (Комментарий)

  • id - уникальный идентификатор
  • text - текст комментария
  • item - вещь, к которой относится комментарий
  • author - автор комментария
  • created - дата создания

ItemRequest (Запрос на вещь)

  • id - уникальный идентификатор
  • description - описание нужной вещи
  • requestor - пользователь, создавший запрос
  • created - дата создания
  • items - список вещей, созданных по этому запросу

API Endpoints

Пользователи (/users)

  • POST /users - создание пользователя
  • PATCH /users/{userId} - обновление пользователя
  • GET /users/{userId} - получение пользователя по ID
  • GET /users - получение всех пользователей
  • DELETE /users/{userId} - удаление пользователя

Вещи (/items)

  • POST /items - создание вещи
  • PATCH /items/{itemId} - обновление вещи
  • GET /items/{itemId} - получение вещи по ID с комментариями
  • GET /items - получение всех вещей пользователя
  • GET /items/search?text={text} - поиск вещей по названию/описанию
  • POST /items/{itemId}/comment - добавление комментария к вещи

Бронирования (/bookings)

  • POST /bookings - создание бронирования
  • PATCH /bookings/{bookingId}?approved={boolean} - подтверждение/отклонение бронирования
  • GET /bookings/{bookingId} - получение бронирования по ID
  • GET /bookings?state={state} - получение бронирований пользователя
  • GET /bookings/owner?state={state} - получение бронирований вещей пользователя

Запросы (/requests)

  • 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

About

ShareIt - это веб-приложение для совместного использования вещей, построенное на микросервисной архитектуре с использованием Spring Boot.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published