docs(spec): waitlist API and commercial waitlist_enabled setting.
Refs EventHub/EventHubBack#72 Refs EventHub/EventHubFront#70
This commit is contained in:
+26
-1
@@ -46,6 +46,8 @@ EventHub — платформа для управления событиями
|
||||
- `default_duration_minutes` — integer 1..1440
|
||||
- `default_recurrence` — `null` или
|
||||
`{ "enabled": boolean, "freq": "DAILY"|"WEEKLY"|"MONTHLY", "interval": integer ≥ 1 }`
|
||||
- `waitlist_enabled` — boolean (только смысл для commercial; default `false`):
|
||||
лист ожидания на полных слотах (Back#72)
|
||||
- Невалидное значение известного ключа → **400** `{error: "invalid_settings", key: "…"}`
|
||||
(см. EventHub/EventHubBack#63, UI: EventHub/EventHubFront#44)
|
||||
|
||||
@@ -135,6 +137,22 @@ Trial стартует **только** явным `POST /v1/subscription` с `a
|
||||
no-op успех (как для `cancelled`).
|
||||
- WS: `booking_update` участнику и владельцу (и specialist при confirm на «своём» событии).
|
||||
|
||||
#### Лист ожидания (commercial, опционально)
|
||||
|
||||
Включается флагом `settings.waitlist_enabled=true` на commercial-календаре
|
||||
(default `false`; personal игнорируется).
|
||||
|
||||
- `POST /v1/events/:id/waitlist` — встать в очередь: commercial, `booking_open`,
|
||||
`waitlist_enabled`, слот полный (`pending`+`confirmed` ≥ capacity), нет своей
|
||||
активной booking, ещё не в очереди. Иначе `400`: `waitlist_disabled` |
|
||||
`not_full` | `already_booked` | `already_on_waitlist` | …
|
||||
- `DELETE /v1/events/:id/waitlist` — выйти из очереди (`left`); `404` если не в waiting.
|
||||
- `GET /v1/events/:id/waitlist` — гость: `{enabled, joined, position?, total}`;
|
||||
owner/specialist: список waiting (FIFO по `created_at`).
|
||||
- **Promote:** при освобождении места (cancel / decline / expire / timeout-cancel)
|
||||
первый `waiting` → booking по политике `confirmation` календаря; статус entry
|
||||
`promoted`; email + in-app `waitlist_promoted`.
|
||||
|
||||
#### Специалисты
|
||||
|
||||
- Специалист = существующий `user`, привязанный к commercial-календарю
|
||||
@@ -228,7 +246,10 @@ Legacy: прямой `POST /v1/calendars/:id/specialists` **не использ
|
||||
- **Pilot / ops:** SMTP / transactional email; backup; secrets / certs / alerts; legal stubs;
|
||||
позиция и боевой эквайринг **подписки владельца** (не оплата услуги клиентом); DNS/SPF
|
||||
без покупки домена без явного ок.
|
||||
- Waitlist на событие (после уведомлений).
|
||||
- Waitlist на событие — **сделано** (Back#72): таблица `waitlist_entry`;
|
||||
API `POST/DELETE/GET /v1/events/:id/waitlist`; только commercial с
|
||||
`settings.waitlist_enabled=true`; join при полном слоте; FIFO promote при
|
||||
cancel/decline/expire + email/in-app `waitlist_promoted`. UI join — Front#70.
|
||||
- Серверный logout / revoke session; загрузка файлов avatar/cover —
|
||||
**сделано** (Back#71); вложения к событию — позже.
|
||||
- Email-reminder booking — **сделано** (Back#70, §2.6); Web Push / prefs — позже.
|
||||
@@ -591,6 +612,10 @@ src/
|
||||
- `POST /v1/events/:id/bookings` — запись на событие. Recurring master: тело
|
||||
`{ "occurrence_start": "<ISO8601>" }` обязательно; booking на материализованный instance.
|
||||
- `GET /v1/events/:id/bookings` — список бронирований события (владелец).
|
||||
- `POST /v1/events/:id/waitlist` — лист ожидания (commercial + `settings.waitlist_enabled`);
|
||||
см. §2.1.2 «Лист ожидания».
|
||||
- `DELETE /v1/events/:id/waitlist` — выйти из очереди.
|
||||
- `GET /v1/events/:id/waitlist` — статус (гость) или список (owner/specialist).
|
||||
- `GET /v1/bookings/:id` — статус бронирования.
|
||||
- `PUT /v1/bookings/:id` — подтвердить/отклонить (`confirm`|`decline`); владелец —
|
||||
любые booking календаря; active specialist — только события со своим `specialist_id`.
|
||||
|
||||
Reference in New Issue
Block a user