- Unify API: lib/api.ts uses /api/v1, inbox uses /api/inbox (rewrites) - Remove localhost refs: openapi, inbox page - Add rewrites: /api/inbox|tmc -> inbox-server, /api/v1 -> FastAPI - Add stub routes: knowledge/insights, recommendations, search, log-error - Transfer from PAPA: prompts (inspection, tmc), scripts, supabase, data/tmc-requests - Fix inbox-server: ORDER BY created_at, package.json - Remove redundant app/api/inbox/files route (rewrites handle it) - knowledge/ in gitignore (large PDFs) Co-authored-by: Cursor <cursoragent@cursor.com>
184 lines
4.6 KiB
Markdown
184 lines
4.6 KiB
Markdown
# API Документация
|
||
|
||
## Базовый URL
|
||
```
|
||
http://localhost:3000/api
|
||
```
|
||
|
||
## Аутентификация
|
||
|
||
> **Примечание:** Аутентификация будет реализована в будущих версиях. Сейчас все endpoints доступны без авторизации.
|
||
|
||
## Endpoints
|
||
|
||
### GET /api/aircraft
|
||
|
||
Получение списка воздушных судов.
|
||
|
||
**Ответ:**
|
||
```json
|
||
[
|
||
{
|
||
"id": "1",
|
||
"registrationNumber": "RA-12345",
|
||
"serialNumber": "SN-001",
|
||
"aircraftType": "Boeing 737-800",
|
||
"operator": "Аэрофлот",
|
||
"status": "Активен",
|
||
"flightHours": 12500
|
||
}
|
||
]
|
||
```
|
||
|
||
### POST /api/ai-data
|
||
|
||
Получение данных для ИИ агента.
|
||
|
||
**Тело запроса:**
|
||
```json
|
||
{
|
||
"dataType": "aircraft",
|
||
"filters": {
|
||
"registrationNumber": "RA-12345",
|
||
"operator": "Аэрофлот"
|
||
}
|
||
}
|
||
```
|
||
|
||
**Параметры:**
|
||
- `dataType` (string, required): Тип данных (`aircraft`, `risks`, `audits`, `organizations`, `checklists`, `applications`, `users`, `documents`, `regulations`, `all`)
|
||
- `filters` (object, optional): Фильтры для данных
|
||
|
||
**Ответ:**
|
||
```json
|
||
{
|
||
"dataType": "aircraft",
|
||
"count": 3,
|
||
"data": [...]
|
||
}
|
||
```
|
||
|
||
### POST /api/ai-chat
|
||
|
||
Отправка сообщения ИИ агенту.
|
||
|
||
**Тело запроса:**
|
||
```json
|
||
{
|
||
"message": "Сколько ВС у Аэрофлота?",
|
||
"history": [
|
||
{
|
||
"role": "user",
|
||
"content": "Привет"
|
||
},
|
||
{
|
||
"role": "assistant",
|
||
"content": "Привет! Чем могу помочь?"
|
||
}
|
||
],
|
||
"files": []
|
||
}
|
||
```
|
||
|
||
**Ответ:**
|
||
```json
|
||
{
|
||
"response": "У Аэрофлота 150 воздушных судов.",
|
||
"timestamp": "2025-01-21T10:00:00.000Z"
|
||
}
|
||
```
|
||
|
||
**Rate Limit:** 50 запросов в минуту
|
||
|
||
### GET /api/regulations
|
||
|
||
Получение нормативных документов.
|
||
|
||
**Query параметры:**
|
||
- `source` (string, optional): Фильтр по источнику (`ICAO`, `EASA`, `FAA`, `MAK`, `ARMAC`, `RUSSIAN_RULES`, `AIR_CODE`)
|
||
- `type` (string, optional): Фильтр по типу (`convention`, `annex`, `regulation`, `rule`, `code`)
|
||
- `search` (string, optional): Поисковый запрос
|
||
|
||
**Ответ:**
|
||
```json
|
||
{
|
||
"documents": [
|
||
{
|
||
"id": "chicago-convention",
|
||
"title": "Конвенция о международной гражданской авиации",
|
||
"source": "ICAO",
|
||
"type": "convention",
|
||
"category": "Основополагающий документ",
|
||
"version": "2024",
|
||
"lastUpdated": "2025-01-21T00:00:00.000Z",
|
||
"content": "...",
|
||
"url": "https://www.icao.int/..."
|
||
}
|
||
],
|
||
"total": 19
|
||
}
|
||
```
|
||
|
||
### POST /api/regulations/update
|
||
|
||
Обновление нормативных документов (требует авторизации).
|
||
|
||
**Тело запроса:**
|
||
```json
|
||
{
|
||
"source": "ICAO"
|
||
}
|
||
```
|
||
|
||
**Ответ:**
|
||
```json
|
||
{
|
||
"success": true,
|
||
"message": "Нормативные документы успешно обновлены",
|
||
"results": {
|
||
"timestamp": "2025-01-21T10:00:00.000Z",
|
||
"sources": [...]
|
||
}
|
||
}
|
||
```
|
||
|
||
## Коды ошибок
|
||
|
||
- `400` - Неверный запрос (ошибка валидации)
|
||
- `401` - Не авторизован
|
||
- `403` - Доступ запрещен
|
||
- `404` - Ресурс не найден
|
||
- `429` - Превышен лимит запросов
|
||
- `500` - Внутренняя ошибка сервера
|
||
|
||
## Формат ошибки
|
||
|
||
```json
|
||
{
|
||
"error": "Описание ошибки",
|
||
"code": "ERROR_CODE",
|
||
"details": {}
|
||
}
|
||
```
|
||
|
||
## Rate Limiting
|
||
|
||
- `/api/ai-chat`: 50 запросов в минуту
|
||
- `/api/ai-data`: 100 запросов в минуту
|
||
- Остальные endpoints: 200 запросов в минуту
|
||
|
||
При превышении лимита возвращается статус `429` с заголовками:
|
||
- `X-RateLimit-Limit`: Максимальное количество запросов
|
||
- `X-RateLimit-Remaining`: Оставшееся количество
|
||
- `X-RateLimit-Reset`: Время сброса лимита (timestamp)
|
||
|
||
## Валидация данных
|
||
|
||
Все входные данные валидируются с использованием Zod схем. При ошибке валидации возвращается статус `400` с деталями ошибок.
|
||
|
||
## Версионирование
|
||
|
||
Текущая версия API: `v1`
|
||
|
||
В будущем версионирование будет реализовано через префикс пути: `/api/v1/...`
|