docs: default calendar on verify and search discovery tops. Refs EventHub/EventHubBack#49 EventHub/EventHubBack#50

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-20 13:12:26 +03:00
parent 444a5b1e1c
commit 1ccd3e533f
2 changed files with 18 additions and 5 deletions
+16 -3
View File
@@ -19,6 +19,11 @@ EventHub — платформа для управления событиями
- Гибкое подтверждение заявок: auto (автоматически), manual (вручную), timeout (авто через N - Гибкое подтверждение заявок: auto (автоматически), manual (вручную), timeout (авто через N
секунд) секунд)
- Теги календаря, рейтинг (средняя оценка, количество голосов) - Теги календаря, рейтинг (средняя оценка, количество голосов)
- После успешной верификации email (`POST /v1/verify`, статус пользователя → `active`) система
идемпотентно создаёт дефолтный **personal**-календарь владельцу (`logic_calendar:ensure_default_calendar/1`):
название — `nickname` или «Мой календарь», `confirmation=manual`. Повторный вызов не создаёт дубликат,
если у пользователя уже есть active personal-календарь. Существующим пользователям без календаря
backfill не выполняется.
**Новые поля (задача #12):** **Новые поля (задача #12):**
- `short_name` — короткое уникальное имя для API и поиска - `short_name` — короткое уникальное имя для API и поиска
@@ -111,9 +116,16 @@ EventHub — платформа для управления событиями
- Возможность пожаловаться на отзыв (создание `report`). - Возможность пожаловаться на отзыв (создание `report`).
### 2.5. Поиск и фильтрация ### 2.5. Поиск и фильтрация
- Полнотекстовый поиск по названиям событий, календарей, тегам. - **Discovery (пустой поиск):** `GET /v1/search` без `q`, `tags`, `from`/`to`, `lat`/`lon`, `sort`
возвращает топ публичных календарей и событий по рейтингу из `stats_tops`
(`core_calendar:get_top_calendars_by_rating/1`, `core_event:get_top_events_by_rating/1`).
Параметр `type` (`event` | `calendar`) ограничивает один тип; без `type` — оба в `results`.
Если tops пусты или после фильтра `can_access` ничего не осталось — fallback на полный scan
(как при фильтрованном поиске без `q`).
- Полнотекстовый поиск по названиям событий, календарей, тегам (при наличии `q` или любого
фильтра из списка выше).
- Фильтрация по дате, категории, местоположению, рейтингу. - Фильтрация по дате, категории, местоположению, рейтингу.
- Пагинация результатов. - Пагинация результатов (`limit`, `offset`; default `limit=20`, max `100`).
- Поиск должен учитывать права доступа (не показывать скрытые/заблокированные календари). - Поиск должен учитывать права доступа (не показывать скрытые/заблокированные календари).
### 2.6. Расширенные возможности ### 2.6. Расширенные возможности
@@ -263,6 +275,7 @@ src/
### Пользовательские (порт 8080) ### Пользовательские (порт 8080)
- `GET /health` — health + build identity: `status`, `service`, `version`, `build`, `git_sha`, `built_at` (как admin health). - `GET /health` — health + build identity: `status`, `service`, `version`, `build`, `git_sha`, `built_at` (как admin health).
- `POST /v1/register` — регистрация. - `POST /v1/register` — регистрация.
- `POST /v1/verify` — подтверждение email; при успехе — `active` и дефолтный personal-календарь.
- `POST /v1/login` — вход. - `POST /v1/login` — вход.
- `POST /v1/refresh` — обновление токена. - `POST /v1/refresh` — обновление токена.
- `GET /v1/user/me` — профиль пользователя. - `GET /v1/user/me` — профиль пользователя.
@@ -272,7 +285,7 @@ src/
email/role/status; неизвестные поля → `400`. Ответ — полный профиль как GET. email/role/status; неизвестные поля → `400`. Ответ — полный профиль как GET.
- `GET /v1/user/bookings` — бронирования пользователя. - `GET /v1/user/bookings` — бронирования пользователя.
- `GET /v1/user/reviews` — отзывы пользователя. - `GET /v1/user/reviews` — отзывы пользователя.
- `GET /v1/search` — поиск. - `GET /v1/search` — поиск; пустой запрос (только auth + пагинация/`type`) — discovery tops.
- `GET /v1/calendars` — список календарей. - `GET /v1/calendars` — список календарей.
- `GET /v1/calendars/:id` — календарь. - `GET /v1/calendars/:id` — календарь.
- `GET /v1/calendars/:calendar_id/events` — события календаря. - `GET /v1/calendars/:calendar_id/events` — события календаря.
+2 -2
View File
@@ -19,7 +19,7 @@ Deep-link на календарь, владельцем которого явл
Эндпоинты: Эндпоинты:
- `POST /v1/register` — регистрация (`email`, `password`); статус пользователя `pending` до верификации. - `POST /v1/register` — регистрация (`email`, `password`); статус пользователя `pending` до верификации.
- `POST /v1/verify` — подтверждение email `{ token }`. - `POST /v1/verify` — подтверждение email `{ token }`; после успеха у пользователя есть дефолтный personal-календарь.
- `POST /v1/login` — вход; ответ `{ token, refresh_token, user }`. Сессия `auth_session` с `client_type=web`. - `POST /v1/login` — вход; ответ `{ token, refresh_token, user }`. Сессия `auth_session` с `client_type=web`.
- `POST /v1/refresh` — ротация пары токенов по `{ refresh_token }`. - `POST /v1/refresh` — ротация пары токенов по `{ refresh_token }`.
- `GET /v1/user/me` — профиль текущего пользователя. - `GET /v1/user/me` — профиль текущего пользователя.
@@ -101,7 +101,7 @@ Redirects: `/discover` → `/search`; `/calendars/:id` → `/c/:id`; `/calendars
`GET /v1/user/me` — отображение полей. `PATCH /v1/user/me` — язык (`language`), mood в `preferences.mood`, прочие поля профиля. Язык при первом визите — из браузера; при первом логине без `language` в профиле — записывается в профиль. Mood по умолчанию `calm`, в профиль при логине не сидится. `GET /v1/user/me` — отображение полей. `PATCH /v1/user/me` — язык (`language`), mood в `preferences.mood`, прочие поля профиля. Язык при первом визите — из браузера; при первом логине без `language` в профиле — записывается в профиль. Mood по умолчанию `calm`, в профиль при логине не сидится.
### 5.3. Поиск (участник) ### 5.3. Поиск (участник)
`GET /v1/search` — фильтры (`type`, `q`, даты, теги, geo, sort, пагинация). Переход к календарю/событию. `GET /v1/search` — фильтры (`type`, `q`, даты, теги, geo, sort, пагинация). Без фильтров (страница «Найти») — топ календарей и событий по рейтингу; с `q`/фильтрами — полнотекстовый поиск. Переход к календарю/событию.
### 5.4. Календари ### 5.4. Календари
- Список своих: `GET /v1/calendars` - Список своих: `GET /v1/calendars`