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:
+16
-3
@@ -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` — события календаря.
|
||||||
|
|||||||
@@ -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`
|
||||||
|
|||||||
Reference in New Issue
Block a user