0.7.5-topicfix
This commit is contained in:
65
CHANGELOG.md
65
CHANGELOG.md
@@ -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
|
||||
|
||||
|
Reference in New Issue
Block a user