P2: calendar_share API (не стартовать без сценария) #73

Closed
opened 2026-08-14 16:15:20 +03:00 by cursor-ai · 3 comments
Owner

Проблема

Таблица calendar_share есть, user HTTP API и UI нет. Сейчас совместная работа = specialist_invite + inbox.

Ожидаемый результат

Не стартовать, пока нет сценария «соредактор personal». Если сценарий появится: invite/accept/revoke + ACL.

Критерии приёмки

  • Явный продуктовый ок на сценарий
  • Иначе задача остаётся отложенной

Родитель

EventHub/EventHubSpec#8 (волна 7)

Приоритет

P2 / Future

## Проблема Таблица `calendar_share` есть, user HTTP API и UI нет. Сейчас совместная работа = specialist_invite + inbox. ## Ожидаемый результат Не стартовать, пока нет сценария «соредактор personal». Если сценарий появится: invite/accept/revoke + ACL. ## Критерии приёмки - [ ] Явный продуктовый ок на сценарий - [ ] Иначе задача остаётся отложенной ## Родитель https://git.sabilin.com/EventHub/EventHubSpec/issues/8 (волна 7) ## Приоритет P2 / Future
cursor-ai added the FutureTask labels 2026-08-14 16:15:20 +03:00
cursor-ai self-assigned this 2026-08-14 16:15:20 +03:00
Author
Owner

Беру в работу.

Сценарий: calendar_share для personal (соредактор) и commercial (заместитель); invite/accept/revoke + ACL read|write|admin; shared в GET /v1/calendars; для personal — mirror_to_default (выбор соавтора, default true); personal вне search/discovery.

Согласование с Front#49 Time Arc: busy += mirror; ghost/demand у write|admin; Following не смешиваем с share.

Беру в работу. Сценарий: calendar_share для personal (соредактор) и commercial (заместитель); invite/accept/revoke + ACL read|write|admin; shared в GET /v1/calendars; для personal — mirror_to_default (выбор соавтора, default true); personal вне search/discovery. Согласование с Front#49 Time Arc: busy += mirror; ghost/demand у write|admin; Following не смешиваем с share.
Author
Owner

Готово (Back#73).

Реализовано:

  • calendar_share_invite + grants (id, rights, mirror_to_default); personal и commercial
  • API share-invites / shares / accept+mirror; list calendars owned∪shared
  • ACL can_access/can_edit; personal вне search
  • Front: shared в списке, invites+mirror, SharesPanel, Time Arc busy/ghost (write|admin), ownIds только owned
  • Unit: logic_calendar_share_tests (8 ok)
  • Спека: EventHubBackSpec §2.1.3, EventHubFrontSpec §3.3

Согласовано с Front#49 Time Arc.

Готово (Back#73). Реализовано: - calendar_share_invite + grants (id, rights, mirror_to_default); personal и commercial - API share-invites / shares / accept+mirror; list calendars owned∪shared - ACL can_access/can_edit; personal вне search - Front: shared в списке, invites+mirror, SharesPanel, Time Arc busy/ghost (write|admin), ownIds только owned - Unit: logic_calendar_share_tests (8 ok) - Спека: EventHubBackSpec §2.1.3, EventHubFrontSpec §3.3 Согласовано с Front#49 Time Arc.
Author
Owner

На stage accept share отдавал 500: миграция 20260815220000_calendar_share_invite лежала в src/migrations/, но не была в migration_engine:?ALL_MIGRATIONS. Таблица осталась со старым PK=calendar_id.

Фикс 1c701a5:

  • зарегистрированы orphan-миграции waitlist / push / calendar_share;
  • rebuild calendar_share (delete+recreate), т.к. transform_table не меняет ключ;
  • eunit на transform + registry.

Проверено на stage build 207: invite/decline/accept 200, grant в GET shares.

На stage accept share отдавал 500: миграция `20260815220000_calendar_share_invite` лежала в `src/migrations/`, но не была в `migration_engine:?ALL_MIGRATIONS`. Таблица осталась со старым PK=`calendar_id`. Фикс `1c701a5`: - зарегистрированы orphan-миграции waitlist / push / calendar_share; - rebuild `calendar_share` (delete+recreate), т.к. `transform_table` не меняет ключ; - eunit на transform + registry. Проверено на stage build 207: invite/decline/accept 200, grant в GET shares.
Sign in to join this conversation.