docs(spec): guest public search and commercial week. Refs EventHub/EventHubFront#58
This commit is contained in:
+8
-5
@@ -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`);
|
||||
|
||||
@@ -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 скрыт)
|
||||
|
||||
Reference in New Issue
Block a user