docs: sync Front#43 specialist duty overlay on personal

Accepted invites + active specialist check; personal owner does not
mirror foreign roster.

Refs EventHub/EventHubFront#43
This commit is contained in:
2026-07-29 21:16:55 +03:00
parent 9d79babac5
commit 2fa4635a9f
2 changed files with 12 additions and 0 deletions
+11
View File
@@ -75,6 +75,11 @@ Deep-link на календарь, владельцем которого явл
- **Свой default personal:** поверх сетки — overlay confirmed записей на чужие commercial
слоты (Front-only: `GET /v1/user/bookings` → events/calendars). Заголовок
`событие · студия · специалист`; клик → `/c/:foreignCalId/e/:eventId` (не в своём cal).
Дополнительно (Front#43): overlay **своих** рабочих слотов commercial, где
`specialist_id` = текущий user — gate через accepted `GET /v1/user/specialist-invites`
+ проверка active в `GET …/specialists`, затем `GET …/events?from&to`; title
`событие · студия`. Personal владельца без accepted invite / без своих слотов
чужой roster **не** зеркалит.
- **Guest на чужом commercial (D9 модель B):** roster карточек активных специалистов →
тап → сетка только со слотами `event.specialist_id` = выбранный; «Все слоты студии»
снимает фильтр. Это **не** chip-filter на общей сетке. Book как обычно — без
@@ -214,6 +219,12 @@ cover (`.eh-discover-media--photo`); иначе mood wash + initials (`.eh-disco
`GET /v1/user/bookings` на чужих commercial — догрузить event/calendar и нарисовать
на **своём default personal** grid; title `событие · студия · специалист`;
клик → `/c/:foreignCalId/e/:eventId`. Back API не менялся.
- **Specialist duty overlay на personal (Front-only, Front#43):** на своём personal —
слоты commercial, где `event.specialist_id` = текущий user. Gate: accepted invites
(`GET /v1/user/specialist-invites`) → unique `calendar_id` → active specialist
(`GET /v1/calendars/:id/specialists`) → list events viewport. Title `событие · студия`;
клик → `/c/:commercialId/e/:eventId`. Legacy specialist без invite-записи — вне MVP.
Не зеркалить чужой roster на personal owner.
- Статусы: `pending` | `confirmed` | `cancelled` | `expired`; confirmation: `auto` | `manual` | timeout.
Past+pending / `expired` в «Мои записи» и на `EventActionCard` — бейдж «истекла»,
Cancel скрыт. На past-событии Book скрыт. Defensive: если API ещё отдал past