Как бы вы спроектировали программу лояльности для физического магазина с несколькими кассами, чтобы предоставлять скидку первым десяти покупателям? Опишите весь процесс: работу кассы, запросы, сервисы и хранение данных.

Уточните, кто считается первым покупателем: начавший оплату или успешно оплативший, и что делать при отмене. Все кассы должны обращаться к общему сервису, который атомарно выдаёт не более десяти резервов.

Короткий ответ

Что ответить на собеседовании

Уточните, кто считается первым покупателем: начавший оплату или успешно оплативший, и что делать при отмене. Все кассы должны обращаться к общему сервису, который атомарно выдаёт не более десяти резервов.

Подробный разбор

Ответ с пояснениями

Уточните, кто считается первым покупателем: начавший оплату или успешно оплативший, и что делать при отмене. Все кассы должны обращаться к общему сервису, который атомарно выдаёт не более десяти резервов.

Касса передаёт идентификатор покупки, сервис в транзакции создаёт идемпотентный резерв при наличии мест и возвращает размер скидки. После проверенной оплаты резерв становится использованным, при подтверждённой отмене освобождается по правилам акции. Неизвестный статус сначала сверяют. При отсутствии связи касса не должна самостоятельно обещать глобально ограниченную скидку без отдельной offline-модели. Храните правила акции, резервы и историю переходов, а не только счётчик в памяти.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее