0.5.8-panel-upgrade-community-crud-fix
All checks were successful
Deploy on push / deploy (push) Successful in 6s
All checks were successful
Deploy on push / deploy (push) Successful in 6s
This commit is contained in:
156
CHANGELOG.md
156
CHANGELOG.md
@@ -1,5 +1,159 @@
|
||||
# Changelog
|
||||
|
||||
## [0.5.8] - 2025-06-30
|
||||
|
||||
### Улучшения интерфейса публикаций
|
||||
|
||||
- **НОВОЕ**: Статусы публикаций иконками:
|
||||
- **Опубликовано**: ✅ (зелёный бэдж) - быстрая визуальная идентификация опубликованных статей
|
||||
- **Черновик**: 📝 (жёлтый бэдж) - чёткое обозначение незавершённых публикаций
|
||||
- **Удалено**: 🗑️ (красный бэдж) - явное указание на удалённые материалы
|
||||
- **Компактный дизайн**: Статус-бэджи 32×32px с центрированными иконками для экономии места
|
||||
- **Tooltip поддержка**: При наведении показывается текстовое описание статуса для полной ясности
|
||||
|
||||
- **УЛУЧШЕНО**: Выравнивание элементов управления:
|
||||
- **Логичная группировка**: Поиск и элементы управления размещены в одной строке слева направо
|
||||
- **Убран разброс**: Элементы больше не разбросаны по разным концам экрана (`justify-content: space-between`)
|
||||
- **Удалён фильтр статуса**: Упрощён интерфейс за счёт удаления избыточного селектора фильтрации
|
||||
- **Flex gap**: Равномерные отступы 1.5rem между элементами управления
|
||||
- **Responsive дизайн**: Элементы корректно переносятся на мобильных устройствах (`flex-wrap`)
|
||||
|
||||
- **Архитектурные улучшения**:
|
||||
- **Функция getShoutStatusTitle()**: Отдельная функция для получения текстового описания статуса
|
||||
- **Обновлённые CSS классы**: Модернизированные стили для status-badge с flexbox центрированием
|
||||
- **Лучшая семантика**: Title атрибуты для accessibility и пользовательского опыта
|
||||
|
||||
### Сортировка топиков и управление сообществами
|
||||
|
||||
- **НОВОЕ**: Сортировка топиков в админ-панели:
|
||||
- **Выпадающий селектор**: Выбор между сортировкой по ID и названию
|
||||
- **Направление сортировки**: По возрастанию/убыванию с интуитивными стрелочками ↑↓
|
||||
- **Умная русская сортировка**: Использование `localeCompare('ru')` для корректной сортировки русских названий
|
||||
- **Рекурсивная сортировка**: Дочерние топики также сортируются по выбранному критерию
|
||||
- **Реактивность**: Автоматическое пересортирование при изменении параметров
|
||||
- **Сохранение иерархии**: Древовидная структура сохраняется при любом типе сортировки
|
||||
|
||||
- **НОВОЕ**: Полноценное управление сообществами:
|
||||
- **Новая вкладка "Сообщества"**: Отдельная секция в админ-панели для управления сообществами
|
||||
- **Подробная таблица**: ID, название, slug, описание, создатель, статистика (публикации/подписчики/авторы), дата создания
|
||||
- **Клик для редактирования**: Нажатие на строку открывает модалку редактирования сообщества
|
||||
- **Удаление с подтверждением**: Тонкая кнопка "×" для удаления с двойным подтверждением
|
||||
- **Полная CRUD функциональность**: Создание, редактирование, удаление сообществ
|
||||
- **Исправлена проблема с загрузкой**: Добавлен relationship для `created_by` в ORM модели Community
|
||||
- **Резолвер поля created_by**: Корректное получение информации о создателе сообщества
|
||||
|
||||
### Улучшенное управление пользователями
|
||||
|
||||
- **КАРДИНАЛЬНО НОВАЯ модалка редактирования пользователя**:
|
||||
- **Красивый современный дизайн**: Карточки для ролей, секционное разделение, современная типографика
|
||||
- **Полное редактирование профиля**: Email, имя, slug, роли (не только роли как раньше)
|
||||
- **Умная валидация**: Проверка email, обязательных полей, уникальности slug
|
||||
- **Информационная панель**: Отображение ID, даты регистрации, последней активности
|
||||
- **Интерактивные карточки ролей**: Описание каждой роли с иконками состояния
|
||||
- **Расширенная GraphQL схема**: `AdminUserUpdateInput` теперь поддерживает email, name, slug
|
||||
- **Улучшенный резолвер**: `adminUpdateUser` обрабатывает профильные поля с проверкой уникальности
|
||||
- **Реальная валидация**: Проверка email и slug на уникальность в базе данных
|
||||
- **Детальное логирование**: Подробные сообщения об изменениях в профиле и ролях
|
||||
|
||||
- **ТЕХНИЧЕСКАЯ АРХИТЕКТУРА**:
|
||||
- **Переименование компонента**: `RolesModal` → `UserEditModal` для отражения расширенного функционала
|
||||
- **Новые CSS стили**: Добавлены стили для форм, карточек ролей, валидации в `Form.module.css`
|
||||
- **Обновленный API интерфейс**: `onSave` теперь принимает полный объект пользователя вместо только ролей
|
||||
- **Реактивная форма**: Автоочистка ошибок при изменении полей, сброс состояния при открытии
|
||||
|
||||
### Полноценное редактирование топиков в админ-панели
|
||||
|
||||
- **НОВОЕ**: Редактирование всех полей топиков:
|
||||
- **Колонка ID**: Отображение идентификаторов топиков в таблице для точной идентификации
|
||||
- **Редактирование названия**: Изменение `title` прямо в модальном окне
|
||||
- **Простой HTML редактор**: Обычный `contenteditable` div вместо сложного редактора кода
|
||||
- **Управление сообществом**: Изменение `community` ID с валидацией
|
||||
- **Управление иерархией**: Редактирование `parent_ids` (список родительских топиков через запятую)
|
||||
- **Картинки**: Редактирование URL картинки (`pic`)
|
||||
|
||||
- **Улучшения UI/UX**:
|
||||
- **Клик по строке для редактирования**: Убрана кнопка "Редактировать", модалка открывается кликом на любом месте строки
|
||||
- **Ненавязчивый крестик удаления**: Простая кнопка "×" серого цвета, которая становится красной при наведении
|
||||
- **Колонка "Родители"**: Отображение списка parent_ids в основной таблице
|
||||
- **Простой HTML редактор**: Обычный contenteditable div с моноширинным шрифтом и placeholder
|
||||
- **Подтверждение удаления**: Модальное окно при клике на крестик
|
||||
|
||||
- **Архитектурные улучшения**:
|
||||
- **TopicInput расширен**: Добавлены поля `community` и `parent_ids` в GraphQL схему
|
||||
- **Новые мутации**: `UPDATE_TOPIC_MUTATION` и `DELETE_TOPIC_MUTATION` в mutations.ts
|
||||
- **TopicEditModal**: Переиспользуемый компонент с простым интерфейсом
|
||||
- **Парсинг parent_ids**: Автоматическое преобразование строки "1, 5, 12" в массив чисел
|
||||
- **Синхронизация данных**: createEffect для синхронизации формы с выбранным топиком
|
||||
|
||||
- **Технические детали**:
|
||||
- **Кликабельные строки**: Hover эффект и cursor pointer для лучшего UX
|
||||
- **Prevent event bubbling**: Правильная обработка клика на крестике без открытия модалки
|
||||
- **CSS стили**: Стили для hover эффектов крестика и placeholder в contenteditable
|
||||
- **Валидация**: Обязательное поле `slug`, проверка числовых полей
|
||||
- **Обработка ошибок**: Корректное отображение ошибок GraphQL
|
||||
- **Автообновление**: Перезагрузка списка топиков после успешного сохранения
|
||||
|
||||
### Рефакторинг админ-панели
|
||||
|
||||
- **ИСПРАВЛЕНО**: Переключение табов в админ-панели:
|
||||
- **Проблема**: Роутинг не работал корректно - табы не переключались при клике
|
||||
- **Решение**: Заменен `useLocation` на `useParams` для корректного получения активной вкладки
|
||||
- **Улучшения**: Исправлена логика навигации с `replace: true` для редиректа на `/admin/authors`
|
||||
- **Результат**: Теперь переключение между табами работает плавно и корректно
|
||||
|
||||
- **НОВОЕ**: Управление топиками в админ-панели:
|
||||
- **Иерархическое отображение**: Темы показываются в виде дерева с отступами и символами `└─`
|
||||
- **Удаление в один клик**: Кнопка удаления с модальным окном подтверждения
|
||||
- **Информативная таблица**: Название, slug, описание, сообщество, действия
|
||||
- **Предупреждения**: Информация о том что дочерние топики также будут удалены
|
||||
- **Автообновление**: Список перезагружается после успешного удаления
|
||||
|
||||
### Codegen рефакторинг
|
||||
|
||||
- **GraphQL Codegen**: Настроена автоматическая генерация TypeScript типов:
|
||||
- **Файл конфигурации**: `codegen.ts` с настройками для client-side генерации
|
||||
- **Автоматические типы**: Генерация из GraphQL схемы в `panel/graphql/generated/`
|
||||
- **Структура**: Разделение на queries, mutations и index файлы
|
||||
- **TypeScript интеграция**: Полная типизация для админ-панели
|
||||
|
||||
- **Архитектурные улучшения**:
|
||||
- **Модульная структура**: Разделение GraphQL операций по назначению
|
||||
- **Type safety**: Строгая типизация для всех GraphQL операций
|
||||
- **Developer Experience**: Автокомплит и проверка типов в IDE
|
||||
|
||||
### Улучшения системы кеширования
|
||||
|
||||
- **НОВОЕ**: Функция `invalidate_topic_followers_cache()` в модуле cache:
|
||||
- **Централизованная логика**: Все операции по инвалидации кешей подписчиков в одном месте
|
||||
- **Комплексная обработка**: Инвалидация кешей как самого топика, так и всех его подписчиков
|
||||
- **Правильная последовательность**: Получение подписчиков ДО удаления данных из БД
|
||||
- **Подробное логирование**: Отслеживание всех операций инвалидации для отладки
|
||||
|
||||
- **Исправлена логика удаления топиков**:
|
||||
- **Проблема**: При удалении топика не обновлялись счетчики подписок у всех подписчиков
|
||||
- **Решение**: Добавлена инвалидация персональных кешей для каждого подписчика:
|
||||
- `author:follows-topics:{follower_id}` - список подписок на топики
|
||||
- `author:followers:{follower_id}` - счетчики подписчиков
|
||||
- `author:stat:{follower_id}` - общая статистика автора
|
||||
- **Результат**: Система поддерживает консистентность кешей при удалении топиков
|
||||
|
||||
- **Архитектурные улучшения**:
|
||||
- **Разделение ответственности**: Cache модуль отвечает за кеширование, резолверы за бизнес-логику
|
||||
- **Переиспользуемость**: Функцию можно использовать в других операциях с топиками
|
||||
- **Тестируемость**: Логику кеширования легко мокать и тестировать отдельно
|
||||
|
||||
### GraphQL Schema
|
||||
|
||||
- **Новые операции**:
|
||||
- `delete_topic_by_id(id: Int!)` - удаление топика по ID для админ-панели
|
||||
- Обновленный `get_topics_all` для корректной типизации
|
||||
|
||||
### Исправления резолверов
|
||||
|
||||
- **Использование существующей схемы**: Приведение кода в соответствие с truth source схемой GraphQL
|
||||
- **Упрощение**: Убраны дублирующиеся резолверы, используются существующие `get_topics_all`
|
||||
- **Чистота кода**: Удалена дублированная логика инвалидации кешей
|
||||
|
||||
## [0.5.7] - 2025-06-28
|
||||
|
||||
### Новая функциональность админ-панели
|
||||
@@ -466,7 +620,7 @@
|
||||
- Modified `load_reactions_by` to include deleted reactions when `include_deleted=true` for proper comment tree building
|
||||
- Fixed featured/unfeatured logic in reaction processing:
|
||||
- Dislike reactions now properly take precedence over likes
|
||||
- Featured status now requires more than 4 likes from users with featured articles
|
||||
- Featured status now requires more than 4 likes from authors with featured articles
|
||||
- Removed unnecessary filters for deleted reactions since rating reactions are physically deleted
|
||||
- Author's featured status now based on having non-deleted articles with featured_at
|
||||
|
||||
|
Reference in New Issue
Block a user