Skip to content

Repository files navigation

ShareIt - сервис для шеринга вещей 🛠️

ShareIt – сервис для аренды вещей между пользователями с базовым функционалом бронирования и управлением предметами.

Java Spring Boot PostgreSQL Docker H2

✅ Реализованный функционал

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

  • Создание пользователя с валидацией полей
  • Обновление данных пользователя
  • Получение пользователя по ID
  • Удаление пользователя

🧳 Вещи

  • Добавление новых предметов с описанием
  • Редактирование существующих предметов
  • Поиск предметов по тексту (название/описание)
  • Получение предмета по ID
  • Удаление предметов

📅 Бронирования

  • Создание бронирования с проверкой:
    • Доступности предмета
    • Корректности временного интервала
    • Запрета бронирования своих предметов
  • Подтверждение/отклонение брони владельцем
  • Получение списка бронирований:
    • Для владельца предметов
    • Для арендатора

💬 Комментарии

  • Добавление комментариев к предметам
  • Получение списка комментариев по предмету

🛠️ Технологии

  • Backend:
    • Java 17
    • Spring Boot 2.7.3
    • Spring Data JPA
  • База данных: H2 (для тестов), PostgreSQL
  • Тестирование: JUnit 5, Mockito
  • Сборка: Maven

🏗️ Архитектура

Проект разделен на два модуля:

shareit
├── gateway   # HTTP-контроллеры, DTO, валидация
└── server    # Бизнес-логика, работа с БД

🚀 Запуск проекта

  1. Клонировать репозиторий:
git clone https://github.com/vsvldm/java-shareit.git
  1. Собрать и запустить:
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"]
}

📡 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 Поиск вещей по тексту
POST /items/{itemId}/comment Добавить комментарий

Бронирования (Bookings)

Метод Путь Описание
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

About

Template repository for ShareIt project.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages