docs(spec): guest public search and commercial week. Refs EventHub/EventHubFront#58

This commit is contained in:
2026-08-14 11:03:05 +03:00
parent 8e8e361e77
commit e87236b981
2 changed files with 12 additions and 9 deletions
+8 -5
View File
@@ -519,27 +519,30 @@ src/
`specialist_id`). Confirm/decline — существующий `PUT /v1/bookings/:id`. `specialist_id`). Confirm/decline — существующий `PUT /v1/bookings/:id`.
- `GET /v1/user/reviews` — отзывы пользователя. - `GET /v1/user/reviews` — отзывы пользователя.
- `GET /v1/user/following` — календари, которые пользователь отслеживает (follow). - `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 В calendar-результатах — `image_url` (если задан на календаре). Upload/multipart
**не** входит в контракт: поле URL. **не** входит в контракт: поле URL.
- `GET /v1/calendars` — список календарей. - `GET /v1/calendars` — список календарей (auth).
- `POST /v1/calendars` — создать календарь (`commercial` → нужна уже active sub/trial; - `POST /v1/calendars` — создать календарь (`commercial` → нужна уже active sub/trial;
иначе `402`; auto-start 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` → нужна уже - `PUT /v1/calendars/:id` — обновить календарь (`personal→commercial` → нужна уже
active sub/trial, иначе `402`). active sub/trial, иначе `402`).
- `DELETE /v1/calendars/:id` — удалить календарь. - `DELETE /v1/calendars/:id` — удалить календарь.
- `POST /v1/calendars/:id/follow` — отслеживать чужой календарь. - `POST /v1/calendars/:id/follow` — отслеживать чужой календарь.
- `DELETE /v1/calendars/:id/follow` — снять follow. - `DELETE /v1/calendars/:id/follow` — снять follow.
- `GET /v1/users/lookup?q=` — typeahead пользователей для invite (минимальный PII, rate-limit). - `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 / убрать специалиста (владелец). - `PUT/DELETE /v1/calendars/:id/specialists/:user_id` — deactivate / убрать специалиста (владелец).
- `GET/POST /v1/calendars/:id/specialist-invites` — исходящие invite / создать (владелец). - `GET/POST /v1/calendars/:id/specialist-invites` — исходящие invite / создать (владелец).
- `DELETE /v1/calendars/:id/specialist-invites/:invite_id` — отменить pending (владелец). - `DELETE /v1/calendars/:id/specialist-invites/:invite_id` — отменить pending (владелец).
- `GET /v1/user/specialist-invites` — входящие приглашения. - `GET /v1/user/specialist-invites` — входящие приглашения.
- `POST /v1/specialist-invites/:id/accept` | `…/decline` — ответ invitee. - `POST /v1/specialist-invites/:id/accept` | `…/decline` — ответ invitee.
- `POST /v1/specialist-invites/accept` `{ token }` — accept по email deep-link. - `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-календаря — опциональное поле В JSON каждого события commercial-календаря — опциональное поле
`booking_occupancy`: `"free"` | `"pending"` | `"confirmed"`. `booking_occupancy`: `"free"` | `"pending"` | `"confirmed"`.
Считается по **active** bookings события (`pending` | `confirmed`); Считается по **active** bookings события (`pending` | `confirmed`);
+4 -4
View File
@@ -160,15 +160,15 @@ CONTROL→bookings. Контент: free gaps / события сегодня /
## 4. Маршруты ## 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`): Защищённые (`ProtectedRoute`):
- `/default` — resolve единственного personal → `/c/:id` (post-login и tab «Календарь») - `/default` — resolve единственного personal → `/c/:id` (post-login и tab «Календарь»)
- `/default/e/:eventId` — то же + карточка события - `/default/e/:eventId` — то же + карточка события
- `/` — alias → `/default` - `/` — alias → `/default`
- `/c/:calendarId` — workspace с календарём
- `/c/:calendarId/e/:eventId` — workspace + карточка события
- `/search` — поиск календарей/событий
- `/bookings` — grouped inbox: (A) к подтверждению (owner/specialist pending) + - `/bookings` — grouped inbox: (A) к подтверждению (owner/specialist pending) +
(B) мои записи участника; deep-link в `/c/.../e/...` (B) мои записи участника; deep-link в `/c/.../e/...`
- `/calendars` — управление своими календарями (create только Студия; personal delete UI скрыт) - `/calendars` — управление своими календарями (create только Студия; personal delete UI скрыт)