https://github.com/ivanmartynovleti/java-shareit
Бэкенд платформы для аренды вещей.
https://github.com/ivanmartynovleti/java-shareit
docker h2-database hibernate java junit lombok maven mockito postgresql rest-api slf4j spring-boot spring-framework
Last synced: 5 months ago
JSON representation
Бэкенд платформы для аренды вещей.
- Host: GitHub
- URL: https://github.com/ivanmartynovleti/java-shareit
- Owner: IvanMartynovLETI
- Created: 2023-07-04T10:58:22.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2023-08-23T07:54:14.000Z (almost 3 years ago)
- Last Synced: 2025-02-15T09:35:26.531Z (over 1 year ago)
- Topics: docker, h2-database, hibernate, java, junit, lombok, maven, mockito, postgresql, rest-api, slf4j, spring-boot, spring-framework
- Language: Java
- Homepage:
- Size: 254 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# java-shareit
Проект представляет собой реализацию бэкенда платформы для аренды вещей и позволяет осуществлять следующие действия:
* Добавлять новые вещи. Пользователь, добавивший вещь, считается ее владельцем. При добавлении вещи указываются ее
наименование и краткое описание. Также вещь может быть добавлена в ответ на запрос.
* Производить поиск требуемой вещи. Поиск будет осуществляться как по наименованию вещи, так и по ее описанию.
* Осуществлять запрос на добавление отсутствующей требуемой вещи. Другие пользователи могут добавить требуемую вещь.
* Арендовать вещь на определенное время, указывая время и дату начала и конца аренды. Аренда вещи обязательно
подтверждается ее владельцем.
* После окончания аренды пользователь может оставить отзыв на арендованную вещь.
Проект выполнен на основе микросервисной архитектуры и разворачивается в трех контейнерах: gateway_container,
server_container и shareIt_db_container.
#
С целью реализации представленных выше возможностей были созданы:
Эндпойнты пути /users:
* POST /users - создание пользователя.
* GET /users{id} - получение пользователя по его id.
* GET /users - получение списка всех пользователей.
* PATCH /users/{id} - обновление данных пользователя.
* DELETE /users/{id} - удаление пользователя по id.
Эндпойнты пути /requests:
* POST /requests - добавление нового запроса необходимой вещи. Основной частью запроса является его текст, в
в котором пользователь описывает, какая именно вещь ему нужна.
* GET /requests - получение списка своих запросов вместе с данными об ответах на них. Для каждого запроса указываются:
описание, дата и время создания, а также список ответов в формате: id вещи, ее название, описание description,
requestId запроса и признак доступности вещи available.
* GET /requests/all?from={from}&size={size} - получение списка запросов, созданных другими пользователями. Пользователи
могут просматривать существующие запросы, на которые они могли бы ответить.Запросы сортируются по дате создания от
более новых к более старым. Организован постраничный вывод результатов.
* GET /requests/{requestId} - получение данных об одном конкретном запросе вместе с данными об ответах на него в том же
формате, что и в эндпойнте GET /requests. Посмотреть данные об отдельном запросе может любой пользователь.
Эндпойнты пути /items:
* POST /items - добавление новой вещи. Идентификатор пользователя, создающего вещь, передается в заголовке
X-Sharer-User-Id. Именно этот пользователь является владельцем созданной вещи.
* PATCH /items/{id} - редактирование вещи. Изменить можно название, описание и статус доступа к аренде. Редактировать
вещь может только ее владелец, id которого передается в заголовке X-Sharer-User-Id.
* GET /items/{itemId} - просмотр информации о конкретной вещи по ее идентификатору. Информацию о вещи может
просмотреть любой пользователь.
* GET /items?from={from}&size={size} - просмотр владельцем списка всех его вещей с указанием названия и описания
каждой. идентификатор владельца передается с помощью параметра X-Sharer-User_Id. Организован постраничный вывод
результатов.
* GET /items/search?text={text}&from={from}&size={size} - поиск вещи потенциальным арендатором. Пользователь передает в
строке запроса текст и система ищет доступные для аренды вещи, содержащие этот текст в названии или в описании.
Организован постраничный вывод результатов.
* POST /items/{itemId}/comment - создание отзыва по результатам пользования вещью. Отзыв можно оставить только тогда,
когда пользователь брал вещь в аренду и срок ее аренды закончился. Идентификатор пользователя передается в заголовке
X-Sharer-User_Id.
Эндпойнты пути /bookings:
* POST /bookings - добавление нового запроса на аренду вещи. Запрос может быть создан любым пользователем,
идентификатор которого передается в заголовке X-Sharer-User-Id.
* PATCH /bookings/{bookingId}?approved={approved} - подтверждение или отклонение запроса на бронирование. Может быть
выполнено только владельцем вещи, идентификатор которого передается в заголовке X-Sharer-User-Id. Параметр approved
может принимать значения true или false.
* GET bookings/{bookingId} - получение данных о конкретном бронировании, включая его статус. Может быть выполнено
либо автором бронирования, либо владельцем вещи, к которой относится бронирование.
* GET /bookings?state={state}&from={from}&size={size} - получение списка всех бронирований текущего пользователя,
идентификатор которого передается в заголовке X-Sharer-User-Id. Параметр state необязательный и по умолчанию равен
ALL. Также он может принимать значения CURRENT, PAST, FUTURE, WAITING и REJECTED. Бронирования возвращаются по дате
от более новых к более старым. Организован постраничный вывод результатов.
* GET /bookings/owner?state={state}&from={from}&size={size} - получение списка всех бронирований владельца вещей,
идентификатор которого передается в заголовке X-Sharer-User-Id. параметр state имеет тот же смысл, что и в предыдущем
эндпойнте. Организован постраничный вывод результатов.
#
Проект реализован на Java 11 с использованием следующих технологий:
* Spring Boot
* Spring Framework
* JPA (Hibernate ORM)
* Lombok
* Maven
* PostgreSQL
* H2
* SLF4J
* Mockito
* Docker
* JUnit
* REST API
#
Схема базы данных

Примечания:
* В таблице users осуществляется проверка уникальности поля email средствами базы данных.
* В таблице bookings тип поля status - varchar с ограничениями на принимаемые значения (WAITING, APPROVED, REJECTED или
CANCELED)
Перед запуском приложения необходимо убедиться, что на компьютере установлены Intellij IDEA и Docker.
Запуск приложения может осуществляться в следующей последовательности:
* В командной строке Intellij IDEA выполнить команду mvn clean package для сборки приложения.
* Исполнить команду docker-compose up в командной строке, тем самым осуществив запуск приложения.