2025-06-30 18:25:26 +00:00
|
|
|
|
## Админ-панель
|
|
|
|
|
|
|
|
|
|
- **Управление пользователями**: Просмотр, поиск, назначение ролей (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}` - список подписчиков топика
|
|
|
|
|
- **Архитектурные принципы**: Разделение ответственности, переиспользуемость, тестируемость
|
|
|
|
|
|
2024-12-11 23:03:19 +00:00
|
|
|
|
## Просмотры публикаций
|
|
|
|
|
|
|
|
|
|
- Интеграция с Google Analytics для отслеживания просмотров публикаций
|
|
|
|
|
- Подсчет уникальных пользователей и общего количества просмотров
|
2025-06-01 23:56:11 +00:00
|
|
|
|
- Автоматическое обновление статистики при запросе данных публикации
|
2024-12-16 16:13:16 +00:00
|
|
|
|
|
|
|
|
|
## Мультидоменная авторизация
|
|
|
|
|
|
2025-03-22 08:47:19 +00:00
|
|
|
|
- Поддержка авторизации для разных доменов
|
2024-12-16 16:44:24 +00:00
|
|
|
|
- Автоматическое определение сервера авторизации
|
|
|
|
|
- Корректная обработка CORS для всех поддерживаемых доменов
|
2024-12-16 16:13:16 +00:00
|
|
|
|
|
2025-03-20 08:55:21 +00:00
|
|
|
|
## Система кеширования
|
|
|
|
|
|
2025-06-16 17:20:23 +00:00
|
|
|
|
- **Redis как основное хранилище**: Кэширование, сессии, токены, временные данные
|
|
|
|
|
- **Полная документация схемы**: [redis-schema.md](redis-schema.md) - детальное описание всех структур данных
|
|
|
|
|
- **11 категорий данных**: Аутентификация, кэш сущностей, поиск, просмотры, уведомления
|
|
|
|
|
- **Система токенов**: Сессии, OAuth токены, токены подтверждения с TTL
|
|
|
|
|
- **Переменные окружения**: Централизованное хранение конфигурации в Redis
|
|
|
|
|
- **Кэш сущностей**: Авторы, темы, публикации с автоматической инвалидацией
|
|
|
|
|
- **Поисковый кэш**: Нормализованные запросы с результатами
|
|
|
|
|
- **Pub/Sub каналы**: Real-time уведомления и коммуникация
|
|
|
|
|
- **Оптимизация**: Pipeline операции, стратегии кэширования
|
|
|
|
|
- **Мониторинг**: Команды диагностики и решение проблем производительности
|
2025-03-20 08:55:21 +00:00
|
|
|
|
- Поддержка как синхронных, так и асинхронных функций в декораторе cache_on_arguments
|
|
|
|
|
- Автоматическая сериализация/десериализация данных в JSON с использованием CustomJSONEncoder
|
|
|
|
|
- Резервная сериализация через pickle для сложных объектов
|
|
|
|
|
- Генерация уникальных ключей кеша на основе сигнатуры функции и переданных аргументов
|
|
|
|
|
- Настраиваемое время жизни кеша (TTL)
|
|
|
|
|
- Возможность ручной инвалидации кеша для конкретных функций и аргументов
|
|
|
|
|
|
2024-12-17 16:51:00 +00:00
|
|
|
|
## CORS Configuration
|
|
|
|
|
|
|
|
|
|
- Поддерживаемые методы: GET, POST, OPTIONS
|
|
|
|
|
- Настроена поддержка credentials
|
2024-12-17 17:06:15 +00:00
|
|
|
|
- Разрешенные заголовки: Authorization, Content-Type, X-Requested-With, DNT, Cache-Control
|
2025-03-22 10:37:43 +00:00
|
|
|
|
- Настроено кэширование preflight-ответов на 20 дней (1728000 секунд)
|
|
|
|
|
|
|
|
|
|
## Пагинация комментариев по веткам
|
|
|
|
|
|
|
|
|
|
- Эффективная загрузка комментариев с учетом их иерархической структуры
|
|
|
|
|
- Отдельный запрос `load_comments_branch` для оптимизированной загрузки ветки комментариев
|
|
|
|
|
- Возможность загрузки корневых комментариев статьи с первыми ответами на них
|
|
|
|
|
- Гибкая пагинация как для корневых, так и для дочерних комментариев
|
2025-03-26 05:25:18 +00:00
|
|
|
|
- Использование поля `stat.comments_count` для отображения количества ответов на комментарий
|
2025-03-22 10:37:43 +00:00
|
|
|
|
- Добавление специального поля `first_replies` для хранения первых ответов на комментарий
|
|
|
|
|
- Поддержка различных методов сортировки (новые, старые, популярные)
|
2025-06-01 23:56:11 +00:00
|
|
|
|
- Оптимизированные SQL запросы для минимизации нагрузки на базу данных
|
2025-06-16 17:20:23 +00:00
|
|
|
|
|
|
|
|
|
## Модульная система авторизации
|
|
|
|
|
|
|
|
|
|
- **Специализированные менеджеры токенов**:
|
|
|
|
|
- `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
|
2025-06-19 08:28:48 +00:00
|
|
|
|
|
|
|
|
|
## Система featured публикаций
|
|
|
|
|
|
|
|
|
|
- **Автоматическое получение статуса featured**:
|
|
|
|
|
- Публикация получает статус featured при более чем 4 лайках от авторов с featured статьями
|
|
|
|
|
- Проверка квалификации автора: наличие опубликованных featured статей
|
|
|
|
|
- Логирование процесса для отладки и мониторинга
|
|
|
|
|
- **Условия удаления с главной (unfeatured)**:
|
|
|
|
|
- **Условие 1**: Менее 5 голосов "за" (положительные реакции)
|
|
|
|
|
- **Условие 2**: 20% или более отрицательных реакций от общего количества голосов
|
|
|
|
|
- Проверка выполняется только для уже featured публикаций
|
|
|
|
|
- **Оптимизированная логика обработки**:
|
|
|
|
|
- Проверка unfeatured имеет приоритет над featured при обработке реакций
|
|
|
|
|
- Автоматическая проверка условий при добавлении/удалении реакций
|
|
|
|
|
- Корректная обработка типов данных в функциях проверки
|
|
|
|
|
- **Интеграция с системой реакций**:
|
|
|
|
|
- Обработка в `create_reaction` для новых реакций
|
|
|
|
|
- Обработка в `delete_reaction` для удаленных реакций
|
|
|
|
|
- Учет только реакций на саму публикацию (не на комментарии)
|