0.7.5-topicfix

This commit is contained in:
2025-07-03 00:20:10 +03:00
parent 27c5a57709
commit 441cca8045
19 changed files with 2008 additions and 3213 deletions

View File

@@ -1,5 +1,70 @@
# Changelog
## [0.7.5] - 2025-07-02
### Исправление критических проблем админ-панели
#### Исправление ошибки GraphQL AdminShoutInfo
- **ИСПРАВЛЕНО**: Ошибка `Cannot return null for non-nullable field AdminShoutInfo.id`:
- **Проблема**: Метод `_serialize_shout` в `services/admin.py` мог возвращать `None` для обязательных полей GraphQL схемы
- **Причина**: GraphQL схема объявляет поля `id`, `title`, `slug`, `body`, `layout`, `lang`, `created_at`, `created_by`, `community` как non-nullable (`!`), но резолвер возвращал `None`
- **Решение**:
- Обновлен метод `_serialize_shout` для проверки обязательных полей и использования fallback значений
- Метод `get_author_info` всегда возвращает валидные данные (system user для ID=0, fallback для удаленных)
- Метод `_get_community_info` всегда возвращает валидные данные (дефолтное сообщество для ID=0)
- Добавлена фильтрация объектов с недостающими данными в `get_shouts`
- **Результат**: GraphQL поле `adminGetShouts` теперь корректно возвращает массив валидных `AdminShoutInfo` объектов без null значений
#### Исправление проблемы с загрузкой топиков в админке
- **ИСПРАВЛЕНО**: В админке загружались не все топики из-за жесткого лимита в 100 записей:
- **Проблема**: Функция `get_topics_with_stats` в `resolvers/topic.py` принудительно ограничивала лимит до 100 записей: `limit = max(1, min(100, limit or 10))`
- **Масштаб**: В основном сообществе 729 топиков, но загружалось только первые 100 (потеря 86% данных)
- **Решение**:
- Создан новый админский резолвер `adminGetTopics` в `resolvers/admin.py` без лимитов
- Добавлен соответствующий GraphQL запрос `ADMIN_GET_TOPICS_QUERY` в `panel/graphql/queries.ts`
- Обновлена функция `loadTopicsByCommunity` в `panel/context/data.tsx` для использования нового резолвера
- Расширена GraphQL схема `schema/admin.graphql` с новым запросом `adminGetTopics(community_id: Int!): [Topic!]!`
- **Результат**: Теперь в админке загружаются ВСЕ топики сообщества (729 вместо 100 для основного сообщества)
## [0.7.4] - 2025-07-02
### Кардинальная архитектурная реорганизация админки и аутентификации
- **РАЗДЕЛЕНИЕ ОТВЕТСТВЕННОСТИ**: Полное разделение на сервисный слой и GraphQL резолверы:
- `services/admin.py` (561 строка) - вся бизнес-логика админки
- `services/auth.py` (723 строки) - вся бизнес-логика аутентификации
- `resolvers/admin.py` (308 строк) - тонкие GraphQL обёртки (-83% кода)
- `resolvers/auth.py` (296 строк) - тонкие GraphQL обёртки (-74% кода)
- **УПРОЩЕНИЕ АРХИТЕКТУРЫ**: Резолверы теперь 3-5 строчные функции без дублирования
- **DRY ПРИНЦИП**: Централизация всей повторяющейся логики в сервисном слое
- **КАЧЕСТВО КОДА**: Все ошибки типов исправлены, mypy проходит без ошибок
- **ПРОИЗВОДИТЕЛЬНОСТЬ**: Оптимизированные запросы и кэширование в сервисном слое
- **ИСПРАВЛЕНЫ ЦИКЛИЧЕСКИЕ ИМПОРТЫ**: Устранены проблемы с зависимостями между модулями
- **РЕЗУЛЬТАТ**: Общий размер резолверов уменьшился с 2911 до 604 строк (-79%)
## [0.7.3] - 2025-07-02
### Кардинальный рефакторинг админки (1792→308 строк = -83%)
- **АРХИТЕКТУРА**: Создан сервисный слой `services/admin.py` (553 строки) с бизнес-логикой
- **УПРОЩЕНИЕ**: `resolvers/admin.py` теперь содержит только тонкие GraphQL обёртки (308 строк)
- **DRY**: Вся дублированная логика вынесена в сервис AdminService
- **ЧИТАЕМОСТЬ**: Резолверы стали простыми 3-5 строчными функциями
- **ПОДДЕРЖКА**: Бизнес-логика централизована и легко тестируется
- **ПРОИЗВОДИТЕЛЬНОСТЬ**: Убрана избыточная сложность в обработке данных
- **РЕЗУЛЬТАТ**: Общий размер кода уменьшился с 1792 до 861 строк (-52%)
## [0.7.2] - 2025-07-02
### Рефакторинг админ-панели для DRY принципа
- **УЛУЧШЕНО**: Добавлены вспомогательные функции для устранения дублирования кода в `resolvers/admin.py`:
- `normalize_pagination()` - нормализация параметров пагинации
- `calculate_pagination_info()` - вычисление информации о пагинации
- `handle_admin_error()` - стандартная обработка ошибок
- `get_author_info()` - получение информации об авторе
- `create_success_response()` - создание стандартных ответов для мутаций
- **УЛУЧШЕНО**: Упрощены резолверы `adminGetUsers`, `adminGetInvites`, `updateEnvVariable`, `updateEnvVariables`
- **УЛУЧШЕНО**: Устранено дублирование логики пагинации и обработки ошибок
- **УЛУЧШЕНО**: Более консистентная обработка информации об авторах в приглашениях
- **КАЧЕСТВО КОДА**: Соблюдение принципа DRY - код стал более читаемым и поддерживаемым
## [0.7.1] - 2025-07-02