Система предоставляет пользователю возможность забронировать автомобиль на выбранные даты.
Описание в формате OpenAPI.
Если метод требует получения данных из нескольких источников, то в случае недоступности одного не критичного источника, то недостающие данные возвращаются как некоторый fallback ответ, а остальные данные подставляются из успешного запроса.
Например, метод GET /api/v1/cars
в случае недоступности Car Service должен вернуть 500 ошибку, т.к. данные, получаемые
из этого сервиса критичные.
Для методов GET /api/v1/rental
и GET /api/v1/rental/{{rentalUid}}
в случае недоступности Rental Service запрос
должен вернуть 500 ошибку, а в случае недоступности Payment Service или Car Service, поля payment
и car
должны
содержать только uid записи (paymentUid
и carUid
соответственно).
- Запрос к Car Service для проверки, что такой автомобиль существует и доступен. Если условие выполняется, то
автомобиль резервируется (
availability = false
). Если Car Service недоступен, то запрос завершается с ошибокой. - Выполняется запрос в Rental Service для создания записи о бронировании.
- Если запрос к Rental Service завершился неудачей (500 ошибка или сервис недоступен), то выполняется откат операции
резервирования автомобиля в Car Service (
availability = true
) - Выполняется запрос к Payment Service для создания оплаты.
- Если запрос к Payment Service завершился неудачей (500 ошибка или сервис недоступен), то выполняется откат операции
оплаты в Payment Service и в Car Service снимается резерв с автомобиля (
availability = true
).
- Выполняется запрос к Car Service для снятия резерва с автомобиля (
availability = true
). - После этого выполняется запрос к Rental Service для установки флага аренды
CANCELED
. Если этот сервис недоступен, то на Gateway Service запрос поставить в очередь и повторять пока он не завершится успехом (timeout 10 секунд), потом перейти к следующему шагу. - Выполнить запрос к Payment Service для отмены оплаты. Если сервис недоступен, то аналогично предыдущему шагу, на Gateway Service запрос ставится в очередь и повторяется пока не завершится успехом (timeout 10 секунд), при этом пользователю отдается информация об успешном завершении всей операции.
В тестовом сценарии выключается Payment Service, необходимо в переменную serviceName
в
в [classroom.yml] прописать его название в Heroku.
Создать данные для тестов:
cars:
– id: 1
car_uid: "109b42f3-198d-4c89-9276-a7520a7120ab"
brand: "Mercedes Benz"
model: "GLA 250"
registration_number: "ЛО777Х799"
power: 249
type: "SEDAN"
price: 3500
available: true