Система предоставляет пользователю сервис поиска и бронирования отелей на интересующие даты. В зависимости от количества заказов система лояльности дает скидку пользователю на новые бронирования.
Описание в формате OpenAPI.
Если метод требует получения данных из нескольких источников, то в случае недоступности одного не критичного источника, то недостающие данные возвращаются как некоторый fallback ответ, а остальные данные подставляются из успешного запроса.
Например, метод GET /api/v1/hotels
в случае недоступности Reservation Service должен вернуть 500 ошибку, т.к. данные,
получаемые из этого сервиса критичные. Аналогично для метода GET /api/v1/loyalty
и сервиса Loyalty Service.
Для методов GET /api/v1/reservations
и GET /api/v1/reservations/{{reservationUid}}
в случае недоступности
Reservation Service запрос должен вернуть 500 ошибку, а в случае недоступности Payment Service, поле payment
должно
вернуться пустое.
Аналогично для метода GET /api/v1/me
, в случае недоступности Payment Service или Loyalty Service, пользователю
возвращается fallback ответ.
- Запрос к Reservation Service для проверки, что такой отель существует. Если Reservation Service недоступен, то запрос завершается с ошибокой.
- Выполняется запрос к Payment Service для создания оплате. Если сервис недоступен, то запрос завершается с ошибкой.
- Выполняется запрос к Loyalty Service для увеличения счетчика бронирований и, возможно, как следствие этого, изменения статуса клента.
- Если запрос к Loyalty Service завершился неудачей (500 ошибка или сервис недоступен), то выполняется откат операции оплаты в Ticket Service.
- Выполняется запрос к Payment Service для отмены оплаты (устанавливается статус
CANCELED
). Если этот сервис недоступен, то весь запрос завершается с ошибкой. - После этого выполняется запрос к Loyalty Service для уменьшения счетчика бронирований и, возможно, если счетчик стал ниже уровня, понижения статуса пользователя. Если этот сервис недоступен, то пользователю все равно отдается информация что операция завершилась успешно, а на Gateway Service запрос ставится в очередь и повторяется пока не завершится успехом (timeout 10 секунд).
В тестовом сценарии выключается Loyalty Service, необходимо в переменную serviceName
в
в [classroom.yml] прописать его название в Heroku.
Создать данные для тестов:
hotels:
– id: 1
hotelUid: "049161bb-badd-4fa8-9d90-87c9a82b0668"
name: "Ararat Park Hyatt Moscow"
country: "Россия"
city: "Москва"
address: "Неглинная ул., 4"
stars: 5,
price: 10000
loyalty:
- id: 1
username: "Test Max"
reservation_count: 25
status: "GOLD"
discount: 10