Skip to content

Latest commit

 

History

History
69 lines (53 loc) · 4.42 KB

File metadata and controls

69 lines (53 loc) · 4.42 KB

Flight Booking System

Система предоставляет пользователю возможность поиска и покупки билетов. При покупке билетов пользователю начисляются баллы, которые он может использовать для оплаты.

Описание в формате OpenAPI.

Деградация функциональности

Если метод требует получения данных из нескольких источников, то в случае недоступности одного не критичного источника, то недостающие данные возвращаются как некоторый fallback ответ, а остальные данные подставляются из успешного запроса.

Например, метод GET /api/v1/flights в случае недоступности Flight Service должен вернуть 500 ошибку, т.к. данные, получаемые из этого сервиса критичные. Аналогично для метода GET /api/v1/privilege и Bonus Service.

Для методов GET /api/v1/tickets и GET /api/v1/tickets/{{ticketUid}} в случае недоступности Ticket Service запрос должен вернуть 500 ошибку, а в случае недоступности Flight Service, поля fromAirport, toAirport, date возвращаются как fallback значения.

Аналогично для метода GET /api/v1/me, в случае недоступности Flight Service или Bonus Service, пользователю возвращается fallback ответ.

Покупка билета
  1. Запрос к Flight Service для проверки, что такой рейс существует. Если Flight Service недоступен, то запрос завершается с ошибкой.
  2. Выполняется запрос к Ticket Service на создание записи о билете. Если сервис недоступен, то запрос завершается с ошибкой.
  3. Если при покупке билета указан флаг paidFromBalance, то в Bonus Service выполняется запрос на списание бонусов. Иначе, выполнится запрос на пополнение бонусного счета на 10% от стоимости заказа. В любом случае в Bonus Service будет создана запись в таблице privilege_history.
  4. Если запрос к Bonus Service завершился неудачей (500 ошибка или сервис недоступен), то выполняется откат операции создания заказа в Ticket Service.
Возврат билета
  1. Выполняется запрос к Ticket Service для обновления статуса билета. Если этот сервис недоступен, то весь запрос завершается ошибкой.
  2. После этого выполняется запрос к Bonus Service на откат изменений в бонусном счете. Если этот сервис недоступен, то пользователю все равно отдается информация, что операция завершилась успешно, а на Gateway Service запрос ставится в очередь и повторяется пока не завершится успехом (timeout 10 секунд).

Данные для тестов

В тестовом сценарии выключается Bonus Service, необходимо в переменную serviceName в в [classroom.yml] прописать его название в Heroku.

Создать данные для тестов:

airport:
  – id: 1
    name: Шереметьево
    city: Москва
    country: Россия
  - id: 2
    name: Пулково
    city: Санкт-Петербург
    coutry: Россия

flight:
  - id: 1
    flight_number: "AFL031"
    datetime: "2021-10-08 20:00"
    from_airport_id: 1
    to_airport_id: 2
    price: 1500