P1: Истечение past-pending bookings #60
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?
Проблема
Pending-бронирования с уже прошедшим
event.start_timeостаютсяpending: занимают слот capacity, попадают в inboxbooking-requests, Confirm/Decline формально возможны после старта события.Влияние
Путаница у владельца/специалиста и участника; past-pending удерживает capacity.
Ожидаемый результат
Option B: при
event.start_time < nowстатусpending→expired(воркер + on-read в list/get/confirm). Confirm/Decline для ещё будущих pending не ломаются.Критерии приёмки
expired(background и при чтении списков)booking-requestsФайлы (подсказка)
src/logic/logic_booking.erlinclude/records.hrlПриоритет
P1
Беру в работу.
Вариант: Option B — переход
pending→expired, еслиevent.start_time < now(воркерprocess_timeout_bookings+ on-read в list/get/confirm). Confirm/Decline будущих pending без изменений.Готово
SHA:
edb7c20f701bd8b54186fdea06f16914e258389aПодход (Option B)
При
event.start_time <= nowстатусpending→expired:subscription_worker→process_timeout_bookings/0(каждые 15с)list_user_bookings,list_event_bookings,list_bookings,get_booking, admin listbooking-requests— past-pending expires и не попадает в inbox{error, expired}→ HTTP 409Booking expiredAPI для Front
"expired"(рядом сpending/confirmed/cancelled)GET /v1/user/bookings,GET /v1/events/:id/bookings,GET /v1/bookings/:id, admin listsGET /v1/user/booking-requests— только ещё актуальные pendingPUT /v1/bookings/:idconfirm/decline на истёкшем → 409expiredне занимает capacity и не блокирует повторную бронь (active_bookingсчитает только pending|confirmed)Тесты
rebar3 eunit --module=logic_booking_tests— 29 tests, 0 failures(в т.ч. expire on list / exclude from requests / confirm denied / future still confirmable / worker)
Спека
Контракт статуса изменился — обновить
EventHubBackSpec.mdагентом Spec отдельно.