Первоначальная версия VidConf
This commit is contained in:
184
docs/api/README.md
Normal file
184
docs/api/README.md
Normal file
@@ -0,0 +1,184 @@
|
||||
# Документация API
|
||||
|
||||
VidConf REST + WebSocket API: аутентификация, профиль, динамические конференции, чат, администрирование, health check. Конференции создаются динамически — предустановленных комнат и бронирований нет (см. [ADR-001](../architecture/adr/001-dynamic-conferences-pivot.md)).
|
||||
|
||||
## Интерактивная документация
|
||||
|
||||
FastAPI автоматически генерирует интерактивные документы:
|
||||
- **Swagger UI:** `http://localhost:8000/docs`
|
||||
- **ReDoc:** `http://localhost:8000/redoc`
|
||||
- **OpenAPI JSON:** `http://localhost:8000/openapi.json`
|
||||
|
||||
## Аутентификация & авторизация
|
||||
|
||||
**[Полная документация: docs/api/auth.md](auth.md)**
|
||||
|
||||
| Эндпоинт | Метод | Описание |
|
||||
|----------|-------|---------|
|
||||
| `/api/v1/auth/registration-options` | GET | Публичные опции регистрации (выбор команды) |
|
||||
| `/api/v1/auth/register` | POST | Регистрация нового пользователя |
|
||||
| `/api/v1/auth/verify-email` | POST | Подтверждение email по токену |
|
||||
| `/api/v1/auth/token` | POST | OAuth2 вход (email + пароль) → access + refresh токены |
|
||||
| `/api/v1/auth/refresh` | POST | Ротация refresh-токена → новый access-токен |
|
||||
| `/api/v1/auth/logout` | POST | Отзыв refresh-токена |
|
||||
|
||||
## Профиль пользователя
|
||||
|
||||
**[Полная документация: docs/api/users.md](users.md)**
|
||||
|
||||
| Эндпоинт | Метод | Описание |
|
||||
|----------|-------|---------|
|
||||
| `/api/v1/users/me` | GET | Профиль текущего пользователя |
|
||||
| `/api/v1/users/me` | PATCH | Обновить ФИО и команду |
|
||||
| `/api/v1/users/me/avatar` | POST | Загрузить аватар (JPEG/PNG/WebP, ≤2 МБ) |
|
||||
| `/api/v1/users/me/avatar` | DELETE | Удалить аватар |
|
||||
| `/api/v1/users` | GET | Поиск пользователей для пикера участников |
|
||||
|
||||
## Справочник команд
|
||||
|
||||
**[Полная документация: docs/api/teams.md](teams.md)**
|
||||
|
||||
| Эндпоинт | Метод | Описание |
|
||||
|----------|-------|---------|
|
||||
| `/api/v1/teams` | GET | Список всех команд (для выбора в профиле) |
|
||||
|
||||
**Для CRUD операций над командами см. [Администраторский API](./admin.md#команды).**
|
||||
|
||||
## LiveKit интеграция
|
||||
|
||||
| Эндпоинт | Метод | Описание |
|
||||
|----------|-------|---------|
|
||||
| `/api/v1/livekit/webhook` | POST | Приёмник webhook-событий от LiveKit |
|
||||
|
||||
## GET /api/health
|
||||
|
||||
Проверка доступности backend и зависимостей.
|
||||
|
||||
**Request:**
|
||||
```bash
|
||||
curl http://localhost:8000/api/health
|
||||
```
|
||||
|
||||
**Response (200 OK):**
|
||||
```json
|
||||
{
|
||||
"status": "ok",
|
||||
"db": true,
|
||||
"redis": true
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Динамические конференции
|
||||
|
||||
### Управление конференциями
|
||||
|
||||
**[Полная документация: docs/api/conferences.md](conferences.md)**
|
||||
|
||||
| Эндпоинт | Метод | Описание |
|
||||
|----------|-------|---------|
|
||||
| `/api/v1/conferences` | POST | Создать конференцию (мгновенную без scheduled_at или плановую) |
|
||||
| `/api/v1/conferences/my` | GET | Мои конференции: закреплённые + предстоящие разовые |
|
||||
| `/api/v1/conferences/calendar` | GET | Развёртка вхождений (occurrences) в диапазоне дат (≤62 дней) |
|
||||
| `/api/v1/conferences/resolve` | GET | Найти конференцию по номеру или ссылке (публичный, rate limit 10/мин) |
|
||||
| `/api/v1/conferences/{id}/join` | POST | Вход зарегистрированного пользователя (с пароль-опцион) |
|
||||
| `/api/v1/conferences/{id}/guest-join` | POST | Вход гостем (публичный, rate limit, display_name обязателен) |
|
||||
| `/api/v1/conferences/{id}` | PATCH | Изменить конференцию (владелец/администратор) |
|
||||
| `/api/v1/conferences/{id}` | DELETE | Удалить конференцию (запрещено для активной) |
|
||||
|
||||
**Ключевые особенности** (в отличие от прежней модели бронирования переговорных комнат, см. ADR-001):
|
||||
- Конференция имеет 9-значный номер (вместо room + booking)
|
||||
- Вход по номеру или постоянной ссылке (slug), без привязки к комнате
|
||||
- Гости представляются (display_name + email опционально) и участвуют в пайплайне
|
||||
- Закреплённые конференции могут повторяться (weekly/biweekly/monthly/every_n_days)
|
||||
- Нет конкуренции за ресурсы → EXCLUDE constraint не используется, конфликты — на уровне бизнес-логики
|
||||
|
||||
---
|
||||
|
||||
## Администраторский API
|
||||
|
||||
**[Полная документация: docs/api/admin.md](admin.md)**
|
||||
|
||||
| Эндпоинт | Метод | Описание |
|
||||
|----------|-------|---------|
|
||||
| `/api/v1/admin/conferences` | GET | Список всех конференций с фильтрацией и пагинацией (только админ) |
|
||||
| `/api/v1/admin/conferences/{id}` | PATCH | Изменить конференцию (только админ) |
|
||||
| `/api/v1/admin/conferences/{id}` | DELETE | Удалить конференцию (только админ, запрещено для активной) |
|
||||
| `/api/v1/admin/conferences/{id}/invitations` | POST | Поставить рассылку .ics-приглашений (202, асинхронно) |
|
||||
| `/api/v1/admin/users` | GET | Список пользователей с пагинацией (только админ) |
|
||||
| `/api/v1/admin/users/{id}` | PATCH | Изменить роль/блокировку/команду пользователя (только админ, запрет самоизменения роли/блокировки) |
|
||||
| `/api/v1/admin/teams` | GET | Список всех команд (только админ) |
|
||||
| `/api/v1/admin/teams` | POST | Создать команду (только админ, 409 при дубле названия) |
|
||||
| `/api/v1/admin/teams/{id}` | PATCH | Переименовать команду (только админ) |
|
||||
| `/api/v1/admin/teams/{id}` | DELETE | Удалить команду (только админ, у пользователей обнулится team_id) |
|
||||
| `/api/v1/admin/settings` | GET | Текущие настройки инстанса (только админ) |
|
||||
| `/api/v1/admin/settings` | PUT | Обновить настройки инстанса (только админ; AI-уровень/таймзона/домен регистрации валидируются) |
|
||||
|
||||
Все эндпоинты требуют JWT токен администратора (403 иначе).
|
||||
|
||||
---
|
||||
|
||||
## Чат конференции
|
||||
|
||||
### Обмен сообщениями в реальном времени
|
||||
|
||||
**[Полная документация: docs/api/chat.md](chat.md)**
|
||||
|
||||
| Эндпоинт | Протокол | Описание |
|
||||
|----------|----------|---------|
|
||||
| `/api/v1/conferences/{id}/chat` | WebSocket | Текстовый чат (auth по LiveKit-токену, история, broadcast через Redis pub/sub) |
|
||||
|
||||
**Особенности:**
|
||||
- Аутентификация на уровне протокола WS (первое сообщение `{"type":"auth","token":<LiveKit-токен>}`)
|
||||
- История: последние 50 сообщений открытой сессии конференции
|
||||
- Участники: зарегистрированные пользователи + гости (с пометкой `is_guest`)
|
||||
- Тоггл `chat.enabled` из настроек инстанса в БД, проверяется на каждом подключении
|
||||
- Отправитель видит своё сообщение через pub/sub (echo)
|
||||
|
||||
**Close-коды:** 4401 (невалидный auth), 4403 (чужая комната), 4404 (чат выключен / конференция не найдена / завершена).
|
||||
|
||||
**Frontend:** JoinOut содержит `chat_enabled` для отображения/скрытия UI панели без рестарта.
|
||||
|
||||
---
|
||||
|
||||
## Планируемый API
|
||||
|
||||
- Прямой доступ к транскрипту сеанса через API (`GET /api/sessions/{id}/transcript`) — сейчас фразы доступны только внутри пайплайна и итогового саммари, отдельного read-эндпоинта нет.
|
||||
|
||||
Транскрибация, суммаризация и рассылка саммари/приглашений уже реализованы
|
||||
асинхронно через Celery-воркеры (статус — `pipeline_status` в
|
||||
`conference_sessions`, см. [workers/README.md](../../workers/README.md)).
|
||||
|
||||
---
|
||||
|
||||
## Соглашения
|
||||
|
||||
**Все timestamps в UTC:**
|
||||
```json
|
||||
"created_at": "2026-07-15T14:30:00Z"
|
||||
```
|
||||
|
||||
**Авторизация:** JWT Bearer token в заголовке `Authorization` (для защищённых эндпоинтов)
|
||||
|
||||
**Публичные эндпоинты (без auth):**
|
||||
- `GET /api/v1/conferences/resolve` — поиск по номеру/ссылке (rate limit)
|
||||
- `POST /api/v1/conferences/{id}/guest-join` — вход гостем (rate limit)
|
||||
|
||||
**CORS:** Frontend настроен в dev-прокси (vite.config.ts: `/api` → `localhost:8000`)
|
||||
|
||||
**Плагины:** Конфигурация AI сервисов через `config/plugins.yaml`. См. [docs/plugins/contracts.md](../plugins/contracts.md).
|
||||
|
||||
---
|
||||
|
||||
## Тестирование
|
||||
|
||||
```bash
|
||||
# Health check
|
||||
curl http://localhost:8000/api/health
|
||||
|
||||
# Swagger docs
|
||||
open http://localhost:8000/docs
|
||||
```
|
||||
|
||||
Полная спецификация — в Swagger UI/ReDoc (см. выше) и в файлах этого каталога.
|
||||
Reference in New Issue
Block a user