diff --git a/EventHubBackSpec.md b/EventHubBackSpec.md index 1bc993a..fd857eb 100644 --- a/EventHubBackSpec.md +++ b/EventHubBackSpec.md @@ -513,10 +513,10 @@ src/ - `GET /v1/user/bookings` — бронирования пользователя **как участника**. - `GET /v1/user/booking-requests` — **actionable** pending-заявки к подтверждению, где текущий пользователь — **owner** календаря события или **assigned specialist** - (`event.specialist_id` = user и specialist active). Past-pending помечается `expired` и - **не** попадает в ответ. Ответ — массив объектов booking + `role` (`owner`|`specialist`) + - вложенный `event` (`id`, `calendar_id`, `calendar_title`, `title`, `start_time`, `duration`, - `specialist_id`). Confirm/decline — существующий `PUT /v1/bookings/:id`. + (`event.specialist_id` = user и specialist active). Учитываются и материализованные + occurrence (`is_instance`). Past-pending помечается `expired` и **не** попадает в ответ. +- `GET /v1/user/studio-bookings` — pending **и confirmed** на тех же календарях (журнал студии). + Форма ответа как у booking-requests (`role` + вложенный `event`). - `GET /v1/user/reviews` — отзывы пользователя. - `GET /v1/user/following` — календари, которые пользователь отслеживает (follow). - `GET /v1/search` — поиск; **без токена** (гость) — только commercial по `can_access`; diff --git a/EventHubFrontSpec.md b/EventHubFrontSpec.md index e5e433b..29eb473 100644 --- a/EventHubFrontSpec.md +++ b/EventHubFrontSpec.md @@ -254,7 +254,8 @@ cover (`.eh-discover-media--photo`); иначе mood wash + initials (`.eh-disco (actionable pending, где user — owner календаря или `event.specialist_id`; past-pending Back отдаёт как `expired` и **не** включает в inbox); те же `PUT /v1/bookings/:id` `{ action: confirm | decline }` (на `expired` → `409`) -- UI `/bookings`: две группы (пустые скрывать): **К подтверждению** + **Мои записи** +- UI `/bookings`: три группы (пустые скрывать): **К подтверждению** (`booking-requests`) + + **Записи студии** (`GET /v1/user/studio-bookings`, confirmed) + **Мои записи** (upcoming/past participant). `specialist_invite` сюда **не** попадает. Empty state: title + hint + CTA Discover / «Мои календари». Время слота на list-карточках — soft (secondary to title).