Спасите авиакомпанию от банкротства — решите задачу для разработчиков
Знакомы с Python и PostgreSQL? Проверьте, удастся ли вам устранить путаницу с билетами.
Условие
На сайте авиакомпании произошел сбой. Два человека одновременно забронировали последнее оставшееся место в самолете — и оба оплатили билет. Но затем один из пассажиров получил ошибку о том, что его место уже занято. В итоге авиакомпания понесла репутационные и финансовые потери.
Отдел серверной разработки передал вам подробности об устройстве базы данных. Что известно?
В рамках системы бронирования авиабилетов есть база данных с двумя сущностями:
Users:
- id — уникальный идентификатор пользователя.
Tickets:
- id — уникальный идентификатор билета;
- from — место вылета;
- to — место назначения;
- place — номер сидения в самолете;
- flight_at — дата и время рейса;
- reserved_at — время последнего бронирования;
- reserved_by — идентификатор пользователя, который последним забронировал билет;
- owner — идентификатор пользователя, купившего билет (может быть NULL, если билет только забронирован).
В таблице Tickets изначально вбиты все билеты на конкретный рейс, то есть новые записи в базе данных не появляются.
Также у вас есть участок кода с бэкенд-сервиса, отвечающего за бронирование. Он написан на Python:
Задача
Предложите решение, которое запретит нескольким пользователям одновременно бронировать одно место.
Подсказка: решение может быть основано на работе с базой данных, а именно на изменении SQL-запроса, который отправляется в PostgreSQL.
Знаете ответ? Делитесь своими вариантами в комментариях! А если нужна помощь, смотрите решение в Академии Selectel.