разбор компонента

Купон ставки

Собирает пользовательский draft ставки и показывает server-authoritative quote перед подтверждением.

Состояния, которые видит пользователь

пустонет выбранных позиций
черновиквыбранные позиции редактируются локально
запрос расчётаполучаем свежую цену и ограничения
цена измененатребуется показать изменение
отправка ставкикоманда отправлена, повтор заблокирован
подтверждено / отклоненофинальное состояние от сервера

Иллюстрация по теме

Визуальный ориентир помогает быстрее считать сценарий страницы и не оставлять компонент абстрактным.

Тёмный интерфейс спортивного продукта с матчами и интерактивными блоками
Иллюстрация по теме: компактный интерфейс, где betslip должен оставаться понятным при смене цены и статуса.

Граница данных

Inputsselection ids, stake draft, account context
Outputsquote request, placement command, visible validation
Failure modestale quote, out-of-order response, unknown placement outcome
OwnershipUI владеет представлением и recoverable context; финальное бизнес-состояние подтверждает серверный контракт.

Что важно в реализации

Компонент считается самостоятельной границей только если команда может назвать его входы, выходы и невозможные состояния. Если он требует читать provider-specific поля напрямую или хранит финальный статус операции только локально, граница выбрана слишком поздно.

При изменении контракта сначала обновляется state model и совместимость, затем визуальный слой. Это уменьшает риск ситуации, когда новый UI уже ожидает поле или статус, которого старая версия API не гарантирует.

Связанные разборы

Проверки перед релизом

  • После reload восстанавливается только draft; старая цена не считается подтверждённой.
  • Два quote-ответа, пришедшие не по порядку, не откатывают UI к старой версии.
  • Повторный tap во время placing не создаёт вторую команду.
  • Reprice визуально отделён от обычного изменения локального input.
  • При unknown outcome UI сверяет server state до разрешения нового placement.
  • Focus после server reject остаётся в контексте ошибки и доступен с клавиатуры.

Почему купон ставки — отдельная граница

Локальный draft повышает отзывчивость, но authority для цены и допустимости остаётся на сервере. Поэтому компонент должен уметь жить с конфликтом между тем, что пользователь собрал, и тем, что сейчас разрешено выполнить.

При review команда проверяет не название компонента, а его инварианты: какие данные он имеет право считать финальными, что обязан показать при деградации и как возвращается в согласованное состояние после сбоя.

Что проверить на длинной сессии

Соберите draft, получите quote, измените сумму, дождитесь нового ответа и перезагрузите страницу. После восстановления Betslip может вернуть selections и локальную сумму, но обязан заново подтвердить цену и допустимость. Затем повторите сценарий с двумя quote-ответами, пришедшими не по порядку.

Граница компонента считается устойчивой, если любое server-authoritative изменение переводит его в понятное состояние, а не заставляет отдельные поля формы самостоятельно решать, какой ответ «главнее».

Подробный путь команды разобран в купон ставки → отправка ставки.

Где купон ставки чаще всего ломается в реальном продукте

Первые проблемы появляются не в happy path, а на стыке quote и пользовательского ожидания: цена изменилась, placement ещё не завершён, а пользователь уже пытается повторить действие. Поэтому компонент нельзя оценивать только по красивому состоянию confirmed. Куда важнее, умеет ли он объяснить reprice, блокировать повтор и вернуть понятный контекст после server reject. Подробная граница этого поведения разобрана в статье о валидации betslip.