docs(spec): phase2 scope, Spec#18 pilot stub subscription, SMTP note. Refs EventHub/EventHubSpec#8 Fixes EventHub/EventHubSpec#18

This commit is contained in:
2026-08-14 20:08:38 +03:00
parent 0fa213a1f8
commit 436e0a70c0
3 changed files with 41 additions and 15 deletions
+23 -6
View File
@@ -224,13 +224,23 @@ Legacy: прямой `POST /v1/calendars/:id/specialists` **не использ
по тем же правилам (owner — все события своих календарей; specialist — только свои слоты);
past-pending → `expired` и из ответа исключается.
#### Фаза 2 (вне текущего контракта реализации)
- `calendar_share` (`read` | `write` | `admin`): не путать с follow, specialist_invite и платной subscription.
- Реальный эквайринг, waitlist, оплата услуги клиентом (B2C).
#### Фаза 2 (вне текущего контракта реализации; трекер Spec#8)
- **Pilot / ops:** SMTP / transactional email; backup; secrets / certs / alerts; legal stubs;
позиция и боевой эквайринг **подписки владельца** (не оплата услуги клиентом); DNS/SPF
без покупки домена без явного ок.
- Waitlist на событие (после уведомлений).
- Серверный logout / revoke session; загрузка файлов (avatar/cover); полноценные
уведомления / reminders.
- `calendar_share` (`read` | `write` | `admin`): низкий приоритет; не путать с follow,
specialist_invite и платной subscription. User HTTP API и UI — до отдельной задачи
(таблица в схеме есть, см. §2.1.3).
- `client_type=mobile` — хвост, когда появится нативный клиент.
- **Не в фазе 2:** оплата услуги клиентом (B2C) — вне горизонта продукта.
### 2.1.3. Share / приглашения (фаза 2)
Таблица `calendar_share` (`calendar_id`, `user_id`, `rights`: `read` | `write` | `admin`)
существует в схеме. User HTTP API и клиентский UI — Future до отдельной задачи.
существует в схеме. User HTTP API и клиентский UI — не стартовать, пока нет явного
сценария соредактора personal (совместная работа сейчас: specialist_invite + booking inbox).
### 2.2. События (расширенная версия с повторяющимися событиями)
@@ -379,7 +389,12 @@ Legacy: прямой `POST /v1/calendars/:id/specialists` **не использ
- Пользователи могут оформить подписку (`subscription`) с разными планами: monthly, quarterly,
biannual, annual.
- Цены (`logic_subscription:plan_price/1`, minor units): monthly **999**, quarterly **2499**,
biannual **4499**, annual **7999**; trial — 0. Платёжный шлюз — заглушка (`process_payment` → ok).
biannual **4499**, annual **7999**; trial — 0.
- **Пилот (Spec#18, вариант A):** боевого PSP **нет**. `process_payment` — заглушка → ok.
Владелец получает commercial через: (1) `POST /v1/subscription` `action=start_trial`,
и/или (2) admin activate (`POST /v1/admin/subscriptions/:id`). Реальный эквайринг
подписки владельца — отдельная задача после пилота (не блокер soft-launch).
- **Вне горизонта:** оплата услуги клиентом (B2C) — не в фазе 2 / не в пилоте.
- Статус подписки: `active`, `expired`, `cancelled`.
- Отслеживание использования пробного периода (`trial_used`); trial стартует **только**
явным `POST /v1/subscription` (`action=start_trial`), не при create/upgrade commercial
@@ -500,7 +515,9 @@ src/
- `POST /v1/register` — регистрация.
- `POST /v1/verify` — подтверждение email; при успехе — `active` и дефолтный personal-календарь.
- `POST /v1/forgot-password``{email}` → всегда `200` (без enumeration); письмо со сбросом
только для `active` (stub `logic_email:send_password_reset/2`, как verification).
только для `active`. Почта: `logic_email` через SMTP (`SMTP_HOST` и др.); без хоста —
log-only. HTML+plain шаблоны: `priv/email/layout.html` (CalenTIQ). Ссылки: `PUBLIC_APP_URL` + `/verify?token=`,
`/invites?token=`, `/reset-password?token=` (бренд CalenTIQ).
- `POST /v1/reset-password``{token, password}` (пароль ≥ 8 символов); успех → новый hash,
токен удалён, refresh-сессии user отозваны; `404`/`410`/`400`/`403`.
- `POST /v1/login` — вход.