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
секунд)
- Теги календаря, рейтинг (средняя оценка, количество голосов)
- После успешной верификации email (`POST /v1/verify`, статус пользователя → `active`) система
идемпотентно создаёт дефолтный **personal**-календарь владельцу (`logic_calendar:ensure_default_calendar/1`):
название — `nickname` или «Мой календарь», `confirmation=manual`. Повторный вызов не создаёт дубликат,
если у пользователя уже есть active personal-календарь. Существующим пользователям без календаря
backfill не выполняется.
**Новые поля (задача #12):**
- `short_name` — короткое уникальное имя для API и поиска
@@ -111,9 +116,16 @@ EventHub — платформа для управления событиями
- Возможность пожаловаться на отзыв (создание `report`).
### 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. Расширенные возможности
@@ -263,6 +275,7 @@ src/
### Пользовательские (порт 8080)
- `GET /health` — health + build identity: `status`, `service`, `version`, `build`, `git_sha`, `built_at` (как admin health).
- `POST /v1/register` — регистрация.
- `POST /v1/verify` — подтверждение email; при успехе — `active` и дефолтный personal-календарь.
- `POST /v1/login` — вход.
- `POST /v1/refresh` — обновление токена.
- `GET /v1/user/me` — профиль пользователя.
@@ -272,7 +285,7 @@ src/
email/role/status; неизвестные поля → `400`. Ответ — полный профиль как GET.
- `GET /v1/user/bookings` — бронирования пользователя.
- `GET /v1/user/reviews` — отзывы пользователя.
- `GET /v1/search` — поиск.
- `GET /v1/search` — поиск; пустой запрос (только auth + пагинация/`type`) — discovery tops.
- `GET /v1/calendars` — список календарей.
- `GET /v1/calendars/:id` — календарь.
- `GET /v1/calendars/:calendar_id/events` — события календаря.