simpler-parent-select

This commit is contained in:
2025-07-01 01:20:48 +03:00
parent 2683982180
commit bb41c02d62
18 changed files with 3281 additions and 49 deletions

View File

@@ -1,5 +1,97 @@
# Changelog
## [0.6.0] - 2025-07-01
### Исправления авторизации
- **КРИТИЧНО**: Исправлена ошибка "Сессия не найдена в Redis" в админ-панели:
- **Проблема**: Несоответствие полей в JWT токенах - при создании использовалось поле `id`, а при декодировании ожидалось `user_id`
- **Исправления**:
- В `SessionTokenManager.create_session_token` изменено создание JWT с поля `id` на `user_id`
- В `JWTCodec.encode` добавлена поддержка обоих полей (`user_id` и `id`) для обратной совместимости
- Обновлена обработка словарей в `JWTCodec.encode` для корректной работы с новым форматом
- **Результат**: Авторизация в админ-панели работает корректно, токены правильно верифицируются в Redis
### Исправления типизации
- **ИСПРАВЛЕНО**: Ошибки mypy в `resolvers/topic.py`:
- Добавлены аннотации типов для переменных `current_parent_ids`, `source_parent_ids`, `old_parent_ids`, `parent_parent_ids`
- Исправлена типизация при работе с `parent_ids` как `list[int]` с использованием `list()` для явного преобразования
- Заменен метод `contains()` на `op("@>")` для корректной работы с PostgreSQL JSON массивами
- Добавлено явное приведение типов для `invalidate_topic_followers_cache(int(source_topic.id))`
- Добавлены `# type: ignore[assignment]` комментарии для присваивания значений SQLAlchemy Column полям
- **Результат**: Код проходит проверку mypy без ошибок
### Новые интерфейсы управления иерархией топиков
- **НОВОЕ**: Три варианта интерфейса для управления иерархией тем в админ-панели:
#### Простой интерфейс назначения родителей
- **TopicSimpleParentModal**: Простое и понятное назначение родительских тем
- **Возможности**:
- 🔍 **Поиск родителя**: Быстрый поиск подходящих родительских тем по названию
- 🏠 **Опция корневой темы**: Возможность сделать тему корневой одним кликом
- 📍 **Отображение текущего расположения**: Показ полного пути темы в иерархии
- 📋 **Предварительный просмотр**: Показ нового расположения перед применением
-**Валидация**: Автоматическая проверка циклических зависимостей
- 🏘️ **Фильтрация по сообществу**: Показ только тем из того же сообщества
- **UX особенности**:
- Radio buttons для четкого выбора одного варианта
- Отображение полных путей до корня для каждой темы
- Информационные панели с детальным описанием каждой опции
- Блокировка некорректных действий (циклы, разные сообщества)
- Простой и интуитивный интерфейс без сложных элементов
#### Вариант 2: Простой селектор родителей
- **TopicParentModal**: Быстрый выбор родительской темы для одного топика
- **Возможности**:
- Поиск по названию для быстрого нахождения родителя
- Отображение текущего и нового местоположения в иерархии
- Опция "Сделать корневой темой" (🏠)
- Показ полного пути до корня для каждой темы
- Фильтрация только совместимых родителей (то же сообщество, без циклов)
- Предотвращение выбора потомков как родителей
- **UX особенности**:
- Radio buttons для четкого выбора
- Отображение slug и ID для точной идентификации
- Информационные панели с текущим состоянием
- Валидация с блокировкой некорректных действий
#### Вариант 3: Массовый редактор иерархии
- **TopicBulkParentModal**: Одновременное изменение родителя для множества тем
- **Возможности**:
- Два режима: "Установить родителя" и "Сделать корневыми"
- Проверка совместимости (только темы одного сообщества)
- Предварительный просмотр изменений "Было → Станет"
- Поиск по названию среди доступных родителей
- Валидация для предотвращения циклов и ошибок
- Отображение количества затрагиваемых тем
- **UX особенности**:
- Список выбранных тем с их текущими путями
- Цветовая индикация состояний (до/после изменения)
- Предупреждения о несовместимых действиях
- Массовое применение с подтверждением
### Техническая архитектура
- **НОВАЯ мутация `set_topic_parent`**: Простое API для назначения родительской темы
- **Исправления GraphQL схемы**: Добавлены поля `message` и `stats` в `CommonResult`
- **Унифицированная валидация**: Проверка циклических зависимостей и принадлежности к сообществу
- **Простой интерфейс**: Radio buttons вместо сложного drag & drop для лучшего UX
- **Поиск и фильтрация**: Быстрый поиск подходящих родительских тем
- **Переиспользование компонентов**: Единый стиль с существующими модальными окнами
- **Автоматическая инвалидация кешей**: Обновление кешей при изменении иерархии
- **Детальное логирование**: Отслеживание всех операций с иерархией для отладки
### Интеграция с существующей системой
- **Кнопка "🏠 Назначить родителя"**: Простая кнопка для назначения родительской темы
- **Требует выбора одной темы**: Работает только с одной выбранной темой за раз
- **Совместимость**: Работает с существующей системой `parent_ids` в JSON формате
- **Обновление кешей**: Автоматическая инвалидация при изменении иерархии
- **Логирование**: Детальное отслеживание всех операций с иерархией
- **Отладка слияния**: Исправлена ошибка GraphQL `Cannot query field 'message'` в системе слияния тем
## [0.5.10] - 2025-06-30
### auth/internal fix
@@ -9,6 +101,14 @@
- Исправлена функция `admin_delete_invites_batch` - завершена реализация для корректной обработки пакетного удаления приглашений
- Исправлена ошибка в функции `get_shouts_with_links` в файле `resolvers/reader.py` - добавлено значение по умолчанию для поля `slug` у авторов публикаций в полях `authors` и `created_by`, чтобы избежать ошибки "Cannot return null for non-nullable field Author.slug"
- Исправлена ошибка в функции `admin_get_shouts` в файле `resolvers/admin.py` - добавлена полная загрузка информации об авторах для полей `created_by`, `updated_by` и `deleted_by` с корректной обработкой поля `slug` и значениями по умолчанию, чтобы избежать ошибки "Cannot return null for non-nullable field Author.slug"
- Исправлена ошибка базы данных "relation invite does not exist" - раскомментирована таблица `invite.Invite` в функции `create_all_tables()` в файле `services/schema.py` для создания необходимой таблицы приглашений
- **УЛУЧШЕНО**: Верстка админ-панели приглашений:
- **Поиск на всю ширину**: Поле поиска теперь занимает всю ширину в отдельной строке для удобства ввода длинных запросов
- **Сортировка в заголовках**: Добавлены кликабельные иконки сортировки (↑↓) прямо в заголовки колонок таблицы
- **Компактная панель фильтров**: Фильтр статуса и кнопки управления размещены в отдельной строке под поиском
- **Улучшенный UX**: Hover эффекты для сортируемых колонок, визуальные индикаторы активной сортировки
- **Адаптивный дизайн**: Корректное отображение на мобильных устройствах с переносом элементов
- **Современный стиль**: Обновленная цветовая схема и типографика для лучшей читаемости
### Улучшения админ-панели для приглашений