Task: Контракт calendar.settings для org defaults #63

Closed
opened 2026-07-29 10:17:41 +03:00 by cursor-ai · 3 comments
Owner

Проблема

Front Story: настройки календаря организации (адрес по умолчанию, опционально recurrence/duration). В спеке у calendar уже есть settings :: map, но продуктовые ключи и валидация не зафиксированы.

Влияние

Без контракта Front либо шлёт произвольный map (риск поломки/игнора), либо дублирует defaults только на клиенте.

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

Документированный whitelist ключей calendar.settings для org defaults; GET/PUT calendar принимает/отдаёт их стабильно; eunit на валидацию неизвестных/битых значений (reject или strip — выбрать).

Варианты решения

  1. A (рекомендуется): свободный map + documented keys; unknown keys сохранять (forward-compat) или strip с логом.
  2. B: жёсткая schema decode (jsone/maps) — только известные ключи, иначе 400.
  3. C: first-class колонки вместо settings — только если A окажется тесным.

Связано с Front Story «Настройки календаря под организацию».

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

  • В EventHubBackSpec описаны ключи defaults (location, optional recurrence/duration)
  • PUT calendar с settings кругло путешествует (round-trip)
  • eunit на happy path + invalid location shape
  • Кросс-линк на Front Story

Приоритет

P2

## Проблема Front Story: настройки календаря организации (адрес по умолчанию, опционально recurrence/duration). В спеке у `calendar` уже есть `settings :: map`, но продуктовые ключи и валидация не зафиксированы. ## Влияние Без контракта Front либо шлёт произвольный map (риск поломки/игнора), либо дублирует defaults только на клиенте. ## Ожидаемый результат Документированный whitelist ключей `calendar.settings` для org defaults; GET/PUT calendar принимает/отдаёт их стабильно; eunit на валидацию неизвестных/битых значений (reject или strip — выбрать). ## Варианты решения 1. **A (рекомендуется):** свободный map + documented keys; unknown keys сохранять (forward-compat) или strip с логом. 2. **B:** жёсткая schema decode (jsone/maps) — только известные ключи, иначе 400. 3. **C:** first-class колонки вместо settings — только если A окажется тесным. Связано с Front Story «Настройки календаря под организацию». ## Критерии приёмки - [ ] В `EventHubBackSpec` описаны ключи defaults (location, optional recurrence/duration) - [ ] PUT calendar с settings кругло путешествует (round-trip) - [ ] eunit на happy path + invalid location shape - [ ] Кросс-линк на Front Story ## Приоритет P2
cursor-ai added the Task label 2026-07-29 10:17:41 +03:00
Author
Owner

Связанная Front Story: EventHub/EventHubFront#44

Рекомендация: whitelist keys в settings map (A).

Связанная Front Story: EventHub/EventHubFront#44 Рекомендация: whitelist keys в `settings` map (**A**).
Author
Owner

Stage probe (29.07.2026) — зачем нужен контракт defaults

Стенд: https://stage.calentiq.com/ · UI 0.2.49 · API 0.2.162.

Live-симптом на Front

В карточке события: Адрес: undefined (0, 0). UI default address на уровне календаря нет.

Это усиливает потребность в документированных ключах calendar.settings (как минимум default_location) и согласованной валидации, чтобы Front не писал/не показывал мусорные координаты.

Связано: Front#44.

## Stage probe (29.07.2026) — зачем нужен контракт defaults Стенд: `https://stage.calentiq.com/` · UI **0.2.49** · API **0.2.162**. ### Live-симптом на Front В карточке события: **`Адрес: undefined (0, 0)`**. UI default address на уровне календаря нет. Это усиливает потребность в документированных ключах `calendar.settings` (как минимум `default_location`) и согласованной валидации, чтобы Front не писал/не показывал мусорные координаты. Связано: [Front#44](https://git.sabilin.com/EventHub/EventHubFront/issues/44).
Author
Owner

Готово

Контракт calendar.settings для org defaults:

  • ключи: default_location, default_duration_minutes, default_recurrence
  • unknown keys (в т.ч. week_patterns) — passthrough
  • битая форма known → 400 / {invalid_settings, Key}

Коммит: 4986baf на master.
Eunit: logic_calendar_tests — ok.

Связано: EventHub/EventHubFront#44, спека EventHubBackSpec §2.1.

## Готово Контракт `calendar.settings` для org defaults: - ключи: `default_location`, `default_duration_minutes`, `default_recurrence` - unknown keys (в т.ч. `week_patterns`) — passthrough - битая форма known → `400` / `{invalid_settings, Key}` Коммит: `4986baf` на `master`. Eunit: `logic_calendar_tests` — ok. Связано: EventHub/EventHubFront#44, спека EventHubBackSpec §2.1.
Sign in to join this conversation.