2025-06-02 21:50:39 +00:00
|
|
|
|
# Документация Discours.io API
|
2025-06-02 18:50:58 +00:00
|
|
|
|
|
2025-06-02 21:50:39 +00:00
|
|
|
|
## 🚀 Быстрый старт
|
2025-06-02 18:50:58 +00:00
|
|
|
|
|
2025-06-02 21:50:39 +00:00
|
|
|
|
### Запуск локально
|
|
|
|
|
```bash
|
|
|
|
|
# Стандартный запуск
|
|
|
|
|
python main.py
|
2025-06-02 18:50:58 +00:00
|
|
|
|
|
2025-06-02 21:50:39 +00:00
|
|
|
|
# С HTTPS (требует mkcert)
|
2025-06-16 17:20:23 +00:00
|
|
|
|
python dev.py
|
2025-05-16 06:23:48 +00:00
|
|
|
|
```
|
|
|
|
|
|
2025-06-02 21:50:39 +00:00
|
|
|
|
## 📚 Документация
|
|
|
|
|
|
|
|
|
|
### Авторизация и безопасность
|
|
|
|
|
- [Система авторизации](auth-system.md) - Токены, сессии, OAuth
|
|
|
|
|
- [Архитектура](auth-architecture.md) - Диаграммы и схемы
|
|
|
|
|
- [Миграция](auth-migration.md) - Переход на новую версию
|
|
|
|
|
- [Безопасность](security.md) - Пароли, email, RBAC
|
|
|
|
|
- [OAuth](oauth.md) - Google, GitHub, Facebook, X, Telegram, VK, Yandex
|
2025-06-16 17:20:23 +00:00
|
|
|
|
- [OAuth настройка](oauth-setup.md) - Инструкции по настройке OAuth провайдеров
|
2025-06-02 21:50:39 +00:00
|
|
|
|
|
|
|
|
|
### Функциональность
|
|
|
|
|
- [Система рейтингов](rating.md) - Лайки, дизлайки, featured статьи
|
|
|
|
|
- [Подписки](follower.md) - Follow/unfollow логика
|
|
|
|
|
- [Кэширование](caching.md) - Redis, производительность
|
2025-06-16 17:20:23 +00:00
|
|
|
|
- [Схема данных Redis](redis-schema.md) - Полная документация структур данных
|
2025-06-02 21:50:39 +00:00
|
|
|
|
- [Пагинация комментариев](comments-pagination.md) - Иерархические комментарии
|
|
|
|
|
- [Загрузка контента](load_shouts.md) - Оптимизированные запросы
|
|
|
|
|
|
|
|
|
|
### API и инфраструктура
|
|
|
|
|
- [API методы](api.md) - GraphQL эндпоинты
|
|
|
|
|
- [Функции системы](features.md) - Полный список возможностей
|
|
|
|
|
|
2025-06-19 08:28:48 +00:00
|
|
|
|
## ⚡ Ключевые возможности
|
2025-06-02 21:50:39 +00:00
|
|
|
|
|
|
|
|
|
### Авторизация
|
|
|
|
|
- **Модульная архитектура**: SessionTokenManager, VerificationTokenManager, OAuthTokenManager
|
|
|
|
|
- **OAuth провайдеры**: 7 поддерживаемых провайдеров с PKCE
|
|
|
|
|
- **RBAC**: user/moderator/admin роли
|
|
|
|
|
- **Производительность**: 50% ускорение Redis, 30% меньше памяти
|
|
|
|
|
|
|
|
|
|
### Nginx (упрощенная конфигурация)
|
|
|
|
|
- **KISS принцип**: ~60 строк вместо сложной конфигурации
|
|
|
|
|
- **Dokku дефолты**: Максимальное использование встроенных настроек
|
|
|
|
|
- **SSL/TLS**: TLS 1.2/1.3, HSTS, OCSP stapling
|
|
|
|
|
- **Статические файлы**: Кэширование на 1 год, gzip сжатие
|
|
|
|
|
- **Безопасность**: X-Frame-Options, X-Content-Type-Options
|
|
|
|
|
|
|
|
|
|
### Реакции и комментарии
|
|
|
|
|
- **Иерархические комментарии** с эффективной пагинацией
|
|
|
|
|
- **Физическое/логическое удаление** (рейтинги/комментарии)
|
|
|
|
|
- **Автоматический featured статус** на основе лайков
|
|
|
|
|
- **Distinct() оптимизация** для JOIN запросов
|
|
|
|
|
|
|
|
|
|
### Производительность
|
|
|
|
|
- **Redis pipeline операции** для пакетных запросов
|
|
|
|
|
- **Автоматическая очистка** истекших токенов
|
|
|
|
|
- **Connection pooling** и keepalive
|
|
|
|
|
- **Type-safe codebase** (mypy clean)
|
|
|
|
|
|
|
|
|
|
## 🔧 Конфигурация
|
|
|
|
|
|
2025-06-02 18:50:58 +00:00
|
|
|
|
```python
|
2025-06-02 21:50:39 +00:00
|
|
|
|
# JWT
|
2025-06-02 18:50:58 +00:00
|
|
|
|
JWT_SECRET_KEY = "your-secret-key"
|
|
|
|
|
JWT_EXPIRATION_HOURS = 720 # 30 дней
|
|
|
|
|
|
|
|
|
|
# Redis
|
|
|
|
|
REDIS_URL = "redis://localhost:6379/0"
|
|
|
|
|
|
2025-06-02 21:50:39 +00:00
|
|
|
|
# OAuth (необходимые провайдеры)
|
2025-06-16 17:20:23 +00:00
|
|
|
|
OAUTH_CLIENTS_GOOGLE_ID = "..."
|
|
|
|
|
OAUTH_CLIENTS_GITHUB_ID = "..."
|
2025-06-02 21:50:39 +00:00
|
|
|
|
# ... другие провайдеры
|
2025-05-19 08:25:41 +00:00
|
|
|
|
```
|
|
|
|
|
|
2025-06-02 21:50:39 +00:00
|
|
|
|
## 🛠 Использование API
|
2025-05-19 08:25:41 +00:00
|
|
|
|
|
2025-06-02 21:50:39 +00:00
|
|
|
|
```python
|
|
|
|
|
# Сессии
|
|
|
|
|
from auth.tokens.sessions import SessionTokenManager
|
|
|
|
|
sessions = SessionTokenManager()
|
|
|
|
|
token = await sessions.create_session(user_id, username=username)
|
2025-05-19 08:25:41 +00:00
|
|
|
|
|
2025-06-02 21:50:39 +00:00
|
|
|
|
# Мониторинг
|
|
|
|
|
from auth.tokens.monitoring import TokenMonitoring
|
|
|
|
|
monitoring = TokenMonitoring()
|
|
|
|
|
stats = await monitoring.get_token_statistics()
|
2025-05-19 08:25:41 +00:00
|
|
|
|
```
|