P1: Запись на серию — бронировать occurrence, а не master в прошлом #67
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Проблема
POST /api/v1/events/:id/bookingsпринимает толькоevent_id. Для recurring-слота бэкенд создаёт бронь на masterstart_time(в исследовании — 04.08), а не на выбранную occurrence (16.08). Клиент получает pending, который сразу истекает как «в прошлом».Спека
EventHubSpec/specification.txt§2.2.3 требуетoccurrence_startи материализацию occurrence перед бронью.Исследование stage (UX 2026-08-13, stamp
1785760409054): SPA «Тишина» серия, карточка показывает 16.08, после POST — бронь на 04.08, expired.Влияние
Невозможно записаться на будущие недели коммерческой серии. Сценарий «серия + book» сломан на stage.
Ожидаемый результат
API принимает
occurrence_start(ISO). Бэкенд материализует occurrence (если её ещё нет) и создаёт бронь на эту дату/время. Master в прошлом не используется как слот записи.Критерии приёмки
occurrence_startдля recurringstart_timeФайлы (подсказка)
src/handler_bookings.erlsrc/logic_booking.erl(create_booking/2)Приоритет
P1
Источник
UX-прогон stage.calentiq.com, canvas stage-ux-research, 2026-08-13.
Связка с фронтом: EventHub/EventHubFront#55 (карточка должна слать
occurrence_startпосле этого API).Источник: UX-прогон stage 2026-08-13.
Беру в работу первой в очереди UX (серия → запись). Код не пишу до выбора варианта.
Рекомендация: вариант A — тело POST с
occurrence_start, материализация существующимcore_event:materialize_occurrence/3, бронь на instance id. Согласовано соspecification.txt§2.2.3 (путь у нас/bookings, не/join).EUnit logic_booking_tests: 33/33 (в т.ч. серия: required / materialize / invalid / cancelled).
Вариант A: POST body occurrence_start → materialize_occurrence → booking на instance.
Спека EventHubBackSpec §2.2.3 и блок «Запись и capacity» обновлены.
Пуш нет. Дальше по очереди Front#55.
Проверено на stage API: без occurrence_start → 400; с occurrence_start на будущую occurrence серии → 201, событие брони start_time совпадает с выбранным слотом (15.08 17:00 UTC), статус confirmed (не expired от master). Закрываю.