В этом модуле вы будете создавать сервис для шеринга (от англ. share — «делиться») вещей. Шеринг как экономика совместного использования набирает сейчас всё большую полярность. Если в 2014 году глобальный рынок шеринга оценивался всего в $15 млрд, то к 2025 может достигнуть $335 млрд. Почему шеринг так популярен. Представьте, что на воскресной ярмарке вы купили несколько картин и хотите повесить их дома. Но вот незадача — для этого нужна дрель, а её у вас нет. Можно, конечно, пойти в магазин и купить, но в такой покупке мало смысла — после того, как вы повесите картины, дрель будет просто пылиться в шкафу. Можно пригласить мастера — но за его услуги придётся заплатить. И тут вы вспоминаете, что видели дрель у друга. Сама собой напрашивается идея — одолжить её. Большая удача, что у вас оказался друг с дрелью и вы сразу вспомнили про него! А не то в поисках инструмента пришлось бы писать всем друзьям и знакомым. Или вернуться к первым двум вариантам — покупке дрели или найму мастера. Насколько было бы удобнее, если бы под рукой был сервис, где пользователи делятся вещами!
Сервис должен обеспечить пользователям возможность рассказывать какими вещами они готовы поделиться, находить нужную вещь и брать её в аренду на какое-то время. Сервис должен не только позволять бронировать вещь на определённые даты, но и закрывать к ней доступ на время бронирования от других желающих. На случай, если нужной вещи на сервисе нет, у пользователей должна быть возможность оставлять запросы. Вдруг древний граммофон, который странно даже предлагать к аренде, неожиданно понадобится для театральной постановки. По запросу можно будет добавлять новые вещи для шеринга.
- Сервис gateway — является распределяющим шлюзом, который проводит валидацию входящих данных и перенаправляет запрос в сервис server
- Сервис server - основной сервис, который выполняет всю реальную работу - в том числе обращается к базе данных
2. Каждое из приложений запускается как самостоятельное Java-приложение, а их общение происходит через REST
- Чтобы сделать запуск и взаимодействие приложений более предсказуемым и удобным, сервисы размещены в Docker-контейнерах.
- Также в Docker-контейнер вынесена база данных.
- Работа с пользователями (User)
- Добавить пользователя. Эндпоинт: POST /users
- Получить список всех пользователей. Эндпоинт: GET /users
- Получить пользователя по id. Эндпоинт: GET /users/{id}
(id пользователя передается в переменную пути) - Обновить данные пользователя. Эндпоинт: PATCH /users/{id}
(id пользователя передается в переменную пути) - Удалить пользователя по id. Эндпоинт: DELETE /users/{id}
(id пользователя передается в переменную пути)
- Работа с вещью (Item)
- Добавить вещь. Эндпоинт: POST: /items
- Получить список всех вещей пользователя. Эндпоинт: GET /items?from=&size=
(идентификатор владельца вещи передаётся в заголовке запроса X-Sharer-User-Id,
в параметрах запроса ?from=&size=
- from - с какой страницы необходимо показать список вещей;
- size - сколько вещей будет доступно для просмотра на странице.
Параметры запроса ?from=&size= можно не указывать, в этом случае будут отображены первые 10 вещей из всего списка) - Получить вещь по id. Эндпоинт: GET /items/{itemId}
(идентификатор владельца вещи передаётся в заголовке запроса X-Sharer-User-Id,
id вещи передается в переменную пути) - Обновить информацию о вещи. Эндпоинт: PATCH /items/{itemId}
(идентификатор владельца вещи передаётся в заголовке запроса X-Sharer-User-Id,
id вещи передается в переменную пути) - Поиск вещи по названию или описанию. Эндпоинт: GET /items/search?text=&from=&size=
(идентификатор владельца вещи передаётся в заголовке запроса X-Sharer-User-Id,
в параметрах запроса ?text=&from=&size=
- text - текст для поиска;
- from - с какой страницы необходимо показать список вещей;
- size - сколько вещей будет доступно для просмотра на странице.
Параметры запроса ?from=&size= можно не указывать, в этом случае будут отображены первые 10 вещей из всего списка) - Добавить комментарий к вещи. Эндпоинт: POST /items{itemId}/comment
(идентификатор владельца вещи передаётся в заголовке запроса X-Sharer-User-Id,
id вещи передается в переменную пути
и данные о новом комментарии в теле запроса.)
- Работа с бронированием вещи (Booking)
- Добавить бронирование. Эндпоинт: POST /bookings
(идентификатор владельца, который хочет забронировать, передаётся в заголовке запроса X-Sharer-User-Id,
данные о новом бронировании передаются в теле запроса.) - Подтверждение бронирования владельцем вещи. Эндпоинт: PATCH /bookings/{bookingId}
(идентификатор владельца передаётся в заголовке запроса X-Sharer-User-Id,
id бронирования передается в переменную пути.) - Получить бронирование по id. Эндпоинт: GET /bookings/{bookingId}
(идентификатор владельца или пользователя, который забронировал вещь, передаётся в заголовке запроса X-Sharer-User-Id,
id бронирования передается в переменную пути.) - Получить все бронирования пользователя. Эндпоинт: GET /bookings?state=&from=&size=
(идентификатор пользователя, бронирования которого необходимо получить, передаётся в заголовке запроса X-Sharer-User-Id,
в параметрах запроса ?state=&from=&size=
- state - статус бронирования (ALL - по умолчанию, CURRENT, PAST, FUTURE);
- from - с какой страницы необходимо показать список вещей;
- size - сколько вещей будет доступно для просмотра на странице.
Параметры запроса ?from=&size= можно не указывать, в этом случае будут отображены первые 10 вещей из всего списка) - Получить все бронирования владельца вещей. Эндпоинт: GET /bookings/owner?state=&from=&size=
(идентификатор владельца вещей передаётся в заголовке запроса X-Sharer-User-Id,
в параметрах запроса ?state=&from=&size=
- state - статус бронирования (ALL - по умолчанию, CURRENT, PAST, FUTURE);
- from - с какой страницы необходимо показать список вещей;
- size - сколько вещей будет доступно для просмотра на странице.
Параметры запроса ?from=&size= можно не указывать, в этом случае будут отображены первые 10 вещей из всего списка)
- Добавить бронирование. Эндпоинт: POST /bookings
- Работа с запросом на аренду вещи (Request)
- Добавить новый запрос на аренду вещи. Эндпоинт: POST /requests
(идентификатор пользователя, который создает запрос, передаётся в заголовке запроса X-Sharer-User-Id,
в теле запроса передается информация о новом запросе на аренду вещи.) - Получить все запросы пользователя. Эндпоинт: GET /requests
(идентификатор пользователя, который создает запрос, передаётся в заголовке запроса X-Sharer-User-Id) - Получить все запросы на аренду вещи. Эндпоинт: GET /requests/all?from=&size=
(идентификатор пользователя передаётся в заголовке запроса X-Sharer-User-Id,
в параметрах запроса ?from=&size=
- from - с какой страницы необходимо показать список вещей;
- size - сколько вещей будет доступно для просмотра на странице.
Параметры запроса ?from=&size= можно не указывать, в этом случае будут отображены первые 10 вещей из всего списка) - Получить запрос на аренду вещи по id. Эндпоинт: GET /requests/{requestId}
(идентификатор пользователя передаётся в заголовке запроса X-Sharer-User-Id,
id запроса передается в переменную пути.)
- Добавить новый запрос на аренду вещи. Эндпоинт: POST /requests