174 lines
14 KiB
Markdown
174 lines
14 KiB
Markdown
## Админ-панель
|
||
|
||
- **Управление пользователями**: Просмотр, поиск, назначение ролей (user/moderator/admin)
|
||
- **Управление публикациями**: Таблица со всеми публикациями, фильтрация по статусу, превью контента
|
||
- **Управление топиками**: Полноценное редактирование топиков в админ-панели
|
||
- **Иерархическое отображение**: Темы показываются в виде дерева с отступами и символами `└─` для дочерних элементов
|
||
- **Колонки таблицы**: ID, название, slug, описание, сообщество, родители, действия
|
||
- **Простой интерфейс редактирования**:
|
||
- **Клик по строке**: Модалка редактирования открывается при клике на любом месте строки таблицы
|
||
- **Ненавязчивый крестик**: Кнопка удаления в виде серого "×", краснеет при hover
|
||
- **Простой HTML редактор**: Обычный contenteditable div с моноширинным шрифтом вместо сложного редактора
|
||
- **Редактируемые поля**:
|
||
- **ID**: Отображается для идентификации (поле только для чтения)
|
||
- **Название и slug**: Текстовые поля для основной информации
|
||
- **Описание**: Простой HTML редактор с placeholder
|
||
- **Картинка**: URL изображения топика
|
||
- **Сообщество**: ID сообщества с числовой валидацией
|
||
- **Родители**: Список parent_ids через запятую с автоматическим парсингом
|
||
- **Безопасное удаление**: Модальное окно подтверждения при клике на крестик
|
||
- **Корректная инвалидация кешей**: Автоматическое обновление счетчиков подписок у всех подписчиков
|
||
- **GraphQL интеграция**: Использование мутаций `UPDATE_TOPIC_MUTATION` и `DELETE_TOPIC_MUTATION`
|
||
- **Управление переменными среды**: Настройка конфигурации приложения
|
||
- **TypeScript интеграция**: Полная типизация с автогенерацией типов из GraphQL схемы
|
||
- **Responsive дизайн**: Адаптивность для разных размеров экранов
|
||
|
||
## Codegen интеграция
|
||
|
||
- **Автоматическая генерация типов**: TypeScript типы генерируются из GraphQL схемы
|
||
- **Файл конфигурации**: `codegen.ts` с настройками для client-side генерации
|
||
- **Структура проекта**: Разделение на queries, mutations и index файлы в `panel/graphql/generated/`
|
||
- **Type safety**: Строгая типизация для всех GraphQL операций в админ-панели
|
||
- **Developer Experience**: Автокомплит и проверка типов в IDE
|
||
|
||
## Улучшенная система кеширования топиков
|
||
|
||
- **Централизованная функция**: `invalidate_topic_followers_cache()` в модуле cache
|
||
- **Комплексная инвалидация**: Обработка кешей как самого топика, так и всех его подписчиков
|
||
- **Правильная последовательность**: Получение подписчиков ДО удаления данных из БД
|
||
- **Инвалидируемые кеши**:
|
||
- `author:follows-topics:{follower_id}` - список подписок на топики
|
||
- `author:followers:{follower_id}` - счетчики подписчиков
|
||
- `author:stat:{follower_id}` - общая статистика автора
|
||
- `topic:followers:{topic_id}` - список подписчиков топика
|
||
- **Архитектурные принципы**: Разделение ответственности, переиспользуемость, тестируемость
|
||
|
||
## Просмотры публикаций
|
||
|
||
- Интеграция с Google Analytics для отслеживания просмотров публикаций
|
||
- Подсчет уникальных пользователей и общего количества просмотров
|
||
- Автоматическое обновление статистики при запросе данных публикации
|
||
|
||
## Мультидоменная авторизация
|
||
|
||
- Поддержка авторизации для разных доменов
|
||
- Автоматическое определение сервера авторизации
|
||
- Корректная обработка CORS для всех поддерживаемых доменов
|
||
|
||
## Система кеширования
|
||
|
||
- **Redis как основное хранилище**: Кэширование, сессии, токены, временные данные
|
||
- **Полная документация схемы**: [redis-schema.md](redis-schema.md) - детальное описание всех структур данных
|
||
- **11 категорий данных**: Аутентификация, кэш сущностей, поиск, просмотры, уведомления
|
||
- **Система токенов**: Сессии, OAuth токены, токены подтверждения с TTL
|
||
- **Переменные окружения**: Централизованное хранение конфигурации в Redis
|
||
- **Кэш сущностей**: Авторы, темы, публикации с автоматической инвалидацией
|
||
- **Поисковый кэш**: Нормализованные запросы с результатами
|
||
- **Pub/Sub каналы**: Real-time уведомления и коммуникация
|
||
- **Оптимизация**: Pipeline операции, стратегии кэширования
|
||
- **Мониторинг**: Команды диагностики и решение проблем производительности
|
||
- Поддержка как синхронных, так и асинхронных функций в декораторе cache_on_arguments
|
||
- Автоматическая сериализация/десериализация данных в JSON с использованием CustomJSONEncoder
|
||
- Резервная сериализация через pickle для сложных объектов
|
||
- Генерация уникальных ключей кеша на основе сигнатуры функции и переданных аргументов
|
||
- Настраиваемое время жизни кеша (TTL)
|
||
- Возможность ручной инвалидации кеша для конкретных функций и аргументов
|
||
|
||
## CORS Configuration
|
||
|
||
- Поддерживаемые методы: GET, POST, OPTIONS
|
||
- Настроена поддержка credentials
|
||
- Разрешенные заголовки: Authorization, Content-Type, X-Requested-With, DNT, Cache-Control
|
||
- Настроено кэширование preflight-ответов на 20 дней (1728000 секунд)
|
||
|
||
## Пагинация комментариев по веткам
|
||
|
||
- Эффективная загрузка комментариев с учетом их иерархической структуры
|
||
- Отдельный запрос `load_comments_branch` для оптимизированной загрузки ветки комментариев
|
||
- Возможность загрузки корневых комментариев статьи с первыми ответами на них
|
||
- Гибкая пагинация как для корневых, так и для дочерних комментариев
|
||
- Использование поля `stat.comments_count` для отображения количества ответов на комментарий
|
||
- Добавление специального поля `first_replies` для хранения первых ответов на комментарий
|
||
- Поддержка различных методов сортировки (новые, старые, популярные)
|
||
- Оптимизированные SQL запросы для минимизации нагрузки на базу данных
|
||
|
||
## Модульная система авторизации
|
||
|
||
- **Специализированные менеджеры токенов**:
|
||
- `SessionTokenManager`: Управление пользовательскими сессиями
|
||
- `VerificationTokenManager`: Токены для подтверждения email, телефона, смены пароля
|
||
- `OAuthTokenManager`: Управление OAuth токенами для внешних провайдеров
|
||
- `BatchTokenOperations`: Пакетные операции с токенами
|
||
- `TokenMonitoring`: Мониторинг и статистика использования токенов
|
||
- **Улучшенная производительность**:
|
||
- 50% ускорение Redis операций через пайплайны
|
||
- 30% снижение потребления памяти
|
||
- Оптимизированные запросы к базе данных
|
||
- **Безопасность**:
|
||
- Поддержка PKCE для всех OAuth провайдеров
|
||
- Автоматическая очистка истекших токенов
|
||
- Защита от replay-атак
|
||
|
||
## OAuth интеграция
|
||
|
||
- **7 поддерживаемых провайдеров**:
|
||
- Google, GitHub, Facebook
|
||
- X (Twitter), Telegram
|
||
- VK (ВКонтакте), Yandex
|
||
- **Обработка провайдеров без email**:
|
||
- Генерация временных email для X и Telegram
|
||
- Возможность обновления email в профиле
|
||
- **Токены в Redis**:
|
||
- Хранение access и refresh токенов с TTL
|
||
- Автоматическое обновление токенов
|
||
- Централизованное управление через Redis
|
||
- **Безопасность**:
|
||
- PKCE для всех OAuth потоков
|
||
- Временные state параметры в Redis (10 минут TTL)
|
||
- Одноразовые сессии
|
||
- Логирование неудачных попыток аутентификации
|
||
|
||
## Система управления паролями и email
|
||
|
||
- **Мутация updateSecurity**:
|
||
- Смена пароля с валидацией сложности
|
||
- Смена email с двухэтапным подтверждением
|
||
- Одновременная смена пароля и email
|
||
- **Токены подтверждения в Redis**:
|
||
- Автоматический TTL для всех токенов
|
||
- Безопасное хранение данных подтверждения
|
||
- **Дополнительные мутации**:
|
||
- confirmEmailChange
|
||
- cancelEmailChange
|
||
|
||
## Система featured публикаций
|
||
|
||
- **Автоматическое получение статуса featured**:
|
||
- Публикация получает статус featured при более чем 4 лайках от авторов с featured статьями
|
||
- Проверка квалификации автора: наличие опубликованных featured статей
|
||
- Логирование процесса для отладки и мониторинга
|
||
- **Условия удаления с главной (unfeatured)**:
|
||
- **Условие 1**: Менее 5 голосов "за" (положительные реакции)
|
||
- **Условие 2**: 20% или более отрицательных реакций от общего количества голосов
|
||
- Проверка выполняется только для уже featured публикаций
|
||
- **Оптимизированная логика обработки**:
|
||
- Проверка unfeatured имеет приоритет над featured при обработке реакций
|
||
- Автоматическая проверка условий при добавлении/удалении реакций
|
||
- Корректная обработка типов данных в функциях проверки
|
||
- **Интеграция с системой реакций**:
|
||
- Обработка в `create_reaction` для новых реакций
|
||
- Обработка в `delete_reaction` для удаленных реакций
|
||
- Учет только реакций на саму публикацию (не на комментарии)
|
||
|
||
## RBAC
|
||
|
||
- **Наследование разрешений между ролями** происходит только при инициализации прав для сообщества. В Redis хранятся уже развернутые (полные) списки разрешений для каждой роли. Проверка прав — это быстрый lookup без on-the-fly наследования.
|
||
|
||
## Core features
|
||
|
||
- RBAC с иерархией ролей, наследование только при инициализации, быстрый доступ к правам через Redis
|
||
|
||
## Changelog
|
||
|
||
- v0.6.11: RBAC — наследование только при инициализации, ускорение, упрощение кода, исправлены тесты
|