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
|
2025-07-03 09:15:10 +00:00
|
|
|
|
- [Система RBAC](rbac-system.md) - Роли, разрешения, топики
|
2025-06-02 21:50:39 +00:00
|
|
|
|
- [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) - Оптимизированные запросы
|
|
|
|
|
|
2025-06-28 10:47:08 +00:00
|
|
|
|
### Администрирование
|
|
|
|
|
- **Админ-панель**: Управление пользователями, ролями, переменными среды
|
|
|
|
|
- **Управление публикациями**: Просмотр, поиск, фильтрация по статусу (опубликованные/черновики/удаленные)
|
2025-06-30 18:25:26 +00:00
|
|
|
|
- **Управление топиками**: Упрощенное редактирование топиков с иерархическим отображением
|
|
|
|
|
- **Клик по строке**: Модалка редактирования открывается при клике на строку таблицы
|
|
|
|
|
- **Ненавязчивый крестик**: Серая кнопка "×" для удаления, краснеет при hover
|
|
|
|
|
- **Простой HTML редактор**: Обычный contenteditable div с моноширинным шрифтом
|
|
|
|
|
- **Редактируемые поля**: ID (просмотр), название, slug, описание, сообщество, родители
|
|
|
|
|
- **Дерево топиков**: Визуализация родительско-дочерних связей с отступами и символами `└─`
|
|
|
|
|
- **Безопасное удаление**: Предупреждения о каскадном удалении дочерних топиков
|
|
|
|
|
- **Автообновление**: Рефреш списка после операций с корректной инвалидацией кешей
|
2025-07-04 09:39:41 +00:00
|
|
|
|
- **Модерация реакций**: Полная система управления реакциями пользователей
|
|
|
|
|
- **Просмотр всех реакций**: Таблица с типом, текстом, автором, публикацией и статистикой
|
|
|
|
|
- **Фильтрация по типам**: Лайки, дизлайки, комментарии, цитаты, согласие/несогласие, вопросы, предложения, доказательства/опровержения
|
|
|
|
|
- **Поиск и фильтры**: По тексту реакции, автору, email или ID публикации
|
|
|
|
|
- **Эмоджи-индикаторы**: Визуальное отображение типов реакций (👍 👎 💬 ❝ ✅ ❌ ❓ 💡 🔬 🚫)
|
|
|
|
|
- **Модерация**: Редактирование текста, мягкое удаление и восстановление
|
|
|
|
|
- **Статистика**: Рейтинг и количество комментариев к каждой реакции
|
|
|
|
|
- **Безопасность**: RBAC защита и аудит всех операций
|
2025-06-28 10:47:08 +00:00
|
|
|
|
- **Просмотр данных**: Body, media, авторы, темы с удобной навигацией
|
|
|
|
|
- **DRY принцип**: Переиспользование существующих резолверов из reader.py и editor.py
|
|
|
|
|
|
2025-06-02 21:50:39 +00:00
|
|
|
|
### 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
|
2025-07-03 09:15:10 +00:00
|
|
|
|
- **RBAC**: Система ролей reader/author/artist/expert/editor/admin с наследованием
|
|
|
|
|
- **Права на топики**: Специальные разрешения для создания, редактирования и слияния топиков
|
2025-06-02 21:50:39 +00:00
|
|
|
|
- **Производительность**: 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-26 14:19:42 +00:00
|
|
|
|
- **Оптимизированная сортировка авторов** с кешированием по параметрам
|
2025-06-02 21:50:39 +00:00
|
|
|
|
|
|
|
|
|
## 🔧 Конфигурация
|
|
|
|
|
|
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
|
|
|
|
```
|