core/docs/features.md
Untone 952b294345
All checks were successful
Deploy on push / deploy (push) Successful in 6s
0.5.8-panel-upgrade-community-crud-fix
2025-06-30 21:25:26 +03:00

13 KiB
Raw Blame History

Админ-панель

  • Управление пользователями: Просмотр, поиск, назначение ролей (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 - детальное описание всех структур данных
  • 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 при более чем 4 лайках от авторов с featured статьями
    • Проверка квалификации автора: наличие опубликованных featured статей
    • Логирование процесса для отладки и мониторинга
  • Условия удаления с главной (unfeatured):
    • Условие 1: Менее 5 голосов "за" (положительные реакции)
    • Условие 2: 20% или более отрицательных реакций от общего количества голосов
    • Проверка выполняется только для уже featured публикаций
  • Оптимизированная логика обработки:
    • Проверка unfeatured имеет приоритет над featured при обработке реакций
    • Автоматическая проверка условий при добавлении/удалении реакций
    • Корректная обработка типов данных в функциях проверки
  • Интеграция с системой реакций:
    • Обработка в create_reaction для новых реакций
    • Обработка в delete_reaction для удаленных реакций
    • Учет только реакций на саму публикацию (не на комментарии)