diff --git a/EventHubBackSpec.md b/EventHubBackSpec.md index fd7f09d..1bc993a 100644 --- a/EventHubBackSpec.md +++ b/EventHubBackSpec.md @@ -519,27 +519,30 @@ src/ `specialist_id`). Confirm/decline — существующий `PUT /v1/bookings/:id`. - `GET /v1/user/reviews` — отзывы пользователя. - `GET /v1/user/following` — календари, которые пользователь отслеживает (follow). -- `GET /v1/search` — поиск; пустой запрос (только auth + пагинация/`type`) — discovery tops. +- `GET /v1/search` — поиск; **без токена** (гость) — только commercial по `can_access`; + пустой запрос + пагинация/`type` — discovery tops. С Bearer — как раньше (включая свои personal). В calendar-результатах — `image_url` (если задан на календаре). Upload/multipart **не** входит в контракт: поле URL. -- `GET /v1/calendars` — список календарей. +- `GET /v1/calendars` — список календарей (auth). - `POST /v1/calendars` — создать календарь (`commercial` → нужна уже active sub/trial; иначе `402`; auto-start trial нет). -- `GET /v1/calendars/:id` — календарь (`following`, `booking_open` для текущего контекста). +- `GET /v1/calendars/:id` — календарь. **Без токена** для active commercial (`following: false`); + personal без доступа → `403`. С сессией: `following`, `booking_open`. - `PUT /v1/calendars/:id` — обновить календарь (`personal→commercial` → нужна уже active sub/trial, иначе `402`). - `DELETE /v1/calendars/:id` — удалить календарь. - `POST /v1/calendars/:id/follow` — отслеживать чужой календарь. - `DELETE /v1/calendars/:id/follow` — снять follow. - `GET /v1/users/lookup?q=` — typeahead пользователей для invite (минимальный PII, rate-limit). -- `GET /v1/calendars/:id/specialists` — список специалистов (владелец). +- `GET /v1/calendars/:id/specialists` — список специалистов (гость на commercial — да; + personal — как `can_access`). - `PUT/DELETE /v1/calendars/:id/specialists/:user_id` — deactivate / убрать специалиста (владелец). - `GET/POST /v1/calendars/:id/specialist-invites` — исходящие invite / создать (владелец). - `DELETE /v1/calendars/:id/specialist-invites/:invite_id` — отменить pending (владелец). - `GET /v1/user/specialist-invites` — входящие приглашения. - `POST /v1/specialist-invites/:id/accept` | `…/decline` — ответ invitee. - `POST /v1/specialist-invites/accept` `{ token }` — accept по email deep-link. -- `GET /v1/calendars/:calendar_id/events` — события календаря. +- `GET /v1/calendars/:calendar_id/events` — события календаря (гость: commercial). В JSON каждого события commercial-календаря — опциональное поле `booking_occupancy`: `"free"` | `"pending"` | `"confirmed"`. Считается по **active** bookings события (`pending` | `confirmed`); diff --git a/EventHubFrontSpec.md b/EventHubFrontSpec.md index c713336..e5e433b 100644 --- a/EventHubFrontSpec.md +++ b/EventHubFrontSpec.md @@ -160,15 +160,15 @@ CONTROL→bookings. Контент: free gaps / события сегодня / ## 4. Маршруты Публичные: -- `/login`, `/register`, `/verify` +- `/login`, `/register`, `/verify`, `/forgot-password`, `/reset-password` +- `/search`, `/discover` — каталог без сессии +- `/c/:calendarId`, `/c/:calendarId/e/:eventId` — read-only неделя commercial-студии; + запись / follow / «мой календарь» → `/login?next=` Защищённые (`ProtectedRoute`): - `/default` — resolve единственного personal → `/c/:id` (post-login и tab «Календарь») - `/default/e/:eventId` — то же + карточка события - `/` — alias → `/default` -- `/c/:calendarId` — workspace с календарём -- `/c/:calendarId/e/:eventId` — workspace + карточка события -- `/search` — поиск календарей/событий - `/bookings` — grouped inbox: (A) к подтверждению (owner/specialist pending) + (B) мои записи участника; deep-link в `/c/.../e/...` - `/calendars` — управление своими календарями (create только Студия; personal delete UI скрыт)