docs(spec): document avatar/cover upload API (Back#71).
Refs EventHub/EventHubBack#71 Refs EventHub/EventHubSpec#8
This commit is contained in:
+8
-2
@@ -229,7 +229,8 @@ Legacy: прямой `POST /v1/calendars/:id/specialists` **не использ
|
||||
позиция и боевой эквайринг **подписки владельца** (не оплата услуги клиентом); DNS/SPF
|
||||
без покупки домена без явного ок.
|
||||
- Waitlist на событие (после уведомлений).
|
||||
- Серверный logout / revoke session; загрузка файлов (avatar/cover).
|
||||
- Серверный logout / revoke session; загрузка файлов avatar/cover —
|
||||
**сделано** (Back#71); вложения к событию — позже.
|
||||
- Email-reminder booking — **сделано** (Back#70, §2.6); Web Push / prefs — позже.
|
||||
- `calendar_share` (`read` | `write` | `admin`): низкий приоритет; не путать с follow,
|
||||
specialist_invite и платной subscription. User HTTP API и UI — до отдельной задачи
|
||||
@@ -724,7 +725,12 @@ src/
|
||||
- Система не поддерживает транзакционную целостность между несколькими таблицами на уровне
|
||||
приложения (полагаемся на Mnesia).
|
||||
- В текущей версии отсутствует полноценная система уведомлений (только таблица).
|
||||
- Загрузка файлов (вложения) пока не реализована.
|
||||
- Загрузка файлов: **avatar/cover** — `POST /v1/user/me/avatar`,
|
||||
`POST /v1/calendars/:id/cover` (multipart field `file`); MIME jpeg/png/webp
|
||||
(magic bytes), лимит `UPLOAD_MAX_BYTES` (default 2 MiB) → 413/415;
|
||||
хранение local disk `UPLOAD_DIR` (default `/app/data/uploads` на volume
|
||||
`eventhub-data`); отдача `GET /v1/media/:kind/:owner/:file` (public).
|
||||
Вложения к событию — пока не реализованы.
|
||||
- Серверный рендеринг календаря работает только для владельца календаря.
|
||||
- Автоматическое архивирование через `archive_controller` в локальном режиме использует
|
||||
`slave:start`, который устарел; в production планируется `peer`.
|
||||
|
||||
@@ -202,13 +202,13 @@ Redirects: `/discover` → `/search`; `/calendars/:id` → `/c/:id`; `/calendars
|
||||
Регистрация, верификация, вход, восстановление сессии.
|
||||
|
||||
### 5.2. Профиль
|
||||
`GET /v1/user/me` + форма на `/profile`. Редактируемые через `PATCH /v1/user/me`: `nickname`, `phone`, `timezone`, `avatar_url`, `language`; смена пароля — `current_password` + `password`. Read-only в UI: `id`, `email`, `role`, `status`. Mood — chip в AppShell рядом с BrandWordmark (+ compact на auth); persist `preferences.mood` через `PATCH /v1/user/me` (**не** в `/more`, **не** в calendar toolbar). Язык при первом визите — из браузера; при первом логине без `language` — пишется в профиль. Mood по умолчанию `calm`, при логине не сидится. Lens — только localStorage (не профиль).
|
||||
`GET /v1/user/me` + форма на `/profile`. Редактируемые через `PATCH /v1/user/me`: `nickname`, `phone`, `timezone`, `avatar_url`, `language`; смена пароля — `current_password` + `password`. Upload аватара: `POST /v1/user/me/avatar` (multipart `file`) → обновляет `avatar_url` (Front#69). Read-only в UI: `id`, `email`, `role`, `status`. Mood — chip в AppShell рядом с BrandWordmark (+ compact на auth); persist `preferences.mood` через `PATCH /v1/user/me` (**не** в `/more`, **не** в calendar toolbar). Язык при первом визите — из браузера; при первом логине без `language` — пишется в профиль. Mood по умолчанию `calm`, при логине не сидится. Lens — только localStorage (не профиль).
|
||||
|
||||
### 5.3. Поиск (участник)
|
||||
`GET /v1/search` — фильтры (`type`, `q`, `tags`, даты, `lat`/`lon`/`radius`, sort, order, пагинация). Без `q`/дат/tags/geo/sort — топы календарей и событий; иначе — поиск. В списке бейдж типа — `calendar`|`event` (не `personal`/`commercial`). Даты, теги, geo и сортировка свёрнуты по умолчанию. Переход к `/c/:id` или `/c/:id/e/:eventId`.
|
||||
В результатах calendar (и event, если Back отдаёт) может быть `image_url` — Discover показывает
|
||||
cover (`.eh-discover-media--photo`); иначе mood wash + initials (`.eh-discover-media--fallback`,
|
||||
не fake photo-hero). Битый `image_url` → fallback. **Upload API нет** — поле URL (seed / ручная установка).
|
||||
не fake photo-hero). Битый `image_url` → fallback. Cover upload владельца: `POST /v1/calendars/:id/cover` (Front#69); URL также можно задать через `PUT` `image_url`.
|
||||
|
||||
### 5.4. Календари
|
||||
- Список своих: `GET /v1/calendars`
|
||||
@@ -372,7 +372,8 @@ legal stubs; позиция по подписке **владельца**; DNS/SP
|
||||
|
||||
**Продукт (фаза 2):**
|
||||
- серверный logout / revoke session (`POST /v1/logout` + `{ refresh_token }`; клиент зовёт до clear storage)
|
||||
- загрузка файлов (avatar / cover / вложения)
|
||||
- загрузка файлов: avatar `POST /v1/user/me/avatar`, cover
|
||||
`POST /v1/calendars/:id/cover` (Back#71); UI — Front#69; вложения — позже
|
||||
- полноценный push / reminders (email-reminder booking: Back#70 /
|
||||
`process_reminders`; Web Push / prefs — позже)
|
||||
- waitlist на событие
|
||||
|
||||
Reference in New Issue
Block a user