upgrade schema, resolvers, panel added

This commit is contained in:
2025-05-16 09:23:48 +03:00
parent 8a60bec73a
commit 2d382be794
80 changed files with 8641 additions and 1100 deletions

View File

@@ -1,13 +1,163 @@
#### [0.4.20] - 2025-05-03
- Исправлена ошибка в классе `CacheRevalidationManager`: добавлена инициализация атрибута `_redis`
- Улучшена обработка соединения с Redis в менеджере ревалидации кэша:
- Автоматическое восстановление соединения в случае его потери
- Проверка соединения перед выполнением операций с кэшем
- Дополнительное логирование для упрощения диагностики проблем
- Исправлен резолвер `unpublish_shout`:
- Корректное формирование синтетического поля `publication` с `published_at: null`
- Возвращение полноценного словаря с данными вместо объекта модели
- Улучшена загрузка связанных данных (авторы, темы) для правильного формирования ответа
# Changelog
## [Unreleased]
### Изменено
- Радикально упрощена структура клиентской части приложения:
- Удалены все избыточные файлы и директории
- Перемещены модули auth.ts и api.ts из директории client/lib в корень директории client
- Обновлены импорты во всех компонентах для использования модулей из корня директории
- Создана минималистичная архитектура с 5 файлами (App, login, admin, auth, api)
- Следование принципу DRY - устранено дублирование кода
- Выделены общие модули для авторизации и работы с API
- Единый стиль кода и документации для всех компонентов
- Устранены все жесткие редиректы в пользу SolidJS Router
- Упрощена структура проекта для лучшей поддерживаемости
- Упрощена структура клиентской части приложения:
- Оставлены только два основных ресурса: логин и панель управления пользователями
- Удалены избыточные компоненты и файлы
- Упрощена логика авторизации и навигации
- Устранены жесткие редиректы в пользу SolidJS Router
- Созданы компактные и автономные компоненты login.tsx и admin.tsx
- Оптимизированы стили для минимального набора компонентов
### Добавлено
- Создана панель управления пользователями в админке:
- Добавлен компонент UsersList для управления пользователями
- Реализованы функции блокировки/разблокировки пользователей
- Добавлена возможность отключения звука (mute) для пользователей
- Реализовано управление ролями пользователей через модальное окно
- Добавлены GraphQL мутации для управления пользователями в schema/admin.graphql
- Улучшен интерфейс админ-панели с табами для навигации
- Расширена схема GraphQL для админки:
- Добавлены типы AdminUserInfo и AdminUserUpdateInput
- Добавлены мутации adminUpdateUser, adminToggleUserBlock, adminToggleUserMute
- Добавлены запросы adminGetUsers и adminGetRoles
- Пагинация списка пользователей в админ-панели
- Серверная поддержка пагинации в API для админ-панели
- Поиск пользователей по email, имени и ID
### Улучшено
- Улучшен интерфейс админ-панели:
- Добавлены вкладки для переключения между разделами
- Оптимизирован компонент UsersList для работы с большим количеством пользователей
- Добавлены индикаторы статуса для заблокированных и отключенных пользователей
- Улучшена обработка ошибок при выполнении операций с пользователями
- Добавлены подтверждения для критичных операций (блокировка, изменение ролей)
### Полностью переработан клиентский код:
- Создан компактный API клиент с изолированным кодом для доступа к API
- Реализована модульная архитектура с четким разделением ответственности
- Добавлены типизированные интерфейсы для всех компонентов и модулей
- Реализована система маршрутизации с защищенными маршрутами
- Добавлен компонент AuthProvider для управления авторизацией
- Оптимизирована загрузка компонентов с использованием ленивой загрузки
- Унифицирован стиль кода и именования
### Исправлено
- Исправлена проблема с перенаправлением в SolidJS, которое сбрасывало состояние приложения:
- Обновлена функция logout для использования колбэка навигации вместо жесткого редиректа
- Добавлен компонент LoginPage для авторизации без перезагрузки страницы
- Реализована ленивая загрузка компонентов с использованием Suspense
- Улучшена структура роутинга в админ-панели
- Оптимизирован код согласно принципам DRY и KISS
### Улучшения для авторизации в админ-панели
- Исправлена проблема с авторизацией в админ-панели
- Добавлена поддержка httpOnly cookies для безопасного хранения токена авторизации
- Реализован механизм выхода из системы через отзыв токенов
- Добавлен компонент для отображения списка пользователей в админке
- Добавлена постраничная навигация между управлением переменными окружения и списком пользователей
- Улучшена обработка сессий в API GraphQL
### Исправлено
- Переработан резолвер login_mutation для соответствия общему стилю других мутаций в кодбазе
- Реализована корректная обработка логина через `AuthResult`, устранена ошибка GraphQL "Cannot return null for non-nullable field Mutation.login"
- Улучшена обработка ошибок в модуле авторизации:
- Добавлена проверка корректности объекта автора перед созданием токена
- Исправлен порядок импорта резолверов для корректной регистрации обработчиков
- Добавлено расширенное логирование для отладки авторизации
- Гарантирован непустой возврат из резолвера login для предотвращения GraphQL ошибки
- Исправлена ошибка "Author password is empty" при авторизации:
- Добавлено поле password в метод dict() класса Author для корректной передачи при создании экземпляра из словаря
- Устранена ошибка `Author object has no attribute username` при создании токена авторизации:
- Добавлено свойство username в класс Author для совместимости с `TokenStorage`
- Исправлена HTML-форма на странице входа в админ-панель:
- Добавлен тег `<form>` для устранения предупреждения браузера о полях пароля вне формы
- Улучшена доступность и UX формы логина
- Добавлены атрибуты `autocomplete` для улучшения работы с менеджерами паролей
- Внедрена более строгая валидация полей и фокусировка на ошибках
### Added
- Подробная документация модуля аутентификации в `docs/auth.md`
- Система ролей и разрешений (RBAC)
- Защита от брутфорс атак
- Мультиязычная поддержка в email уведомлениях
- Подробная документация по системе авторизации в `docs/auth.md`
- Описание OAuth интеграции
- Руководство по RBAC
- Примеры использования на фронтенде
- Инструкции по безопасности
- Документация по тестированию
- Страница входа для неавторизованных пользователей в админке
- Публичное GraphQL API для модуля аутентификации:
- Типы: `AuthResult`, `Permission`, `SessionInfo`, `OAuthProvider`
- Мутации: `login`, `registerUser`, `sendLink`, `confirmEmail`, `getSession`, `changePassword`
- Запросы: `signOut`, `me`, `isEmailUsed`, `getOAuthProviders`
### Changed
- Переработана структура модуля auth для лучшей модульности
- Улучшена обработка ошибок в auth endpoints
- Оптимизировано хранение сессий в Redis
- Усилена безопасность хеширования паролей
- Удалена поддержка удаленной аутентификации в пользу единой локальной системы аутентификации
- Удалены настройки `AUTH_MODE` и `AUTH_URL`
- Удалены зависимости от внешнего сервиса авторизации
- Упрощен код аутентификации
- Консолидация типов для авторизации:
- Удален дублирующий тип `UserInfo`
- Расширен тип `Author` полями для работы с авторизацией (`roles`, `email_verified`)
- Использование единого типа `Author` во всех запросах авторизации
### Fixed
- Исправлена проблема с кэшированием разрешений
- Улучшена валидация email и username
- Исправлена обработка истекших токенов
- Исправлена ошибка в функции `get_with_stat` в модуле resolvers/stat.py: добавлен вызов метода `.unique()` для результатов запросов с joined eager loads
- Исправлены ошибки в декораторах auth:
- Добавлены проверки на None для объекта `info` в декораторах `admin_auth_required` и `require_permission`
- Улучшена обработка ошибок в GraphQL контексте
- Добавлен AuthenticationMiddleware с использованием InternalAuthentication для работы с request.auth
- Исправлена ошибка с классом InternalAuthentication:
- Добавлен класс AuthenticatedUser
- Реализован корректный возврат кортежа (AuthCredentials, BaseUser) из метода authenticate
#### [0.4.21] - 2023-09-10
### Изменено
- Переработана пагинация в админ-панели: переход с модели page/perPage на limit/offset
- Улучшена производительность при работе с большими списками пользователей
- Оптимизирован GraphQL API для управления пользователями
### Исправлено
- Исправлена ошибка GraphQL "Unknown argument 'page' on field 'Query.adminGetUsers'"
- Согласованы параметры пагинации между клиентом и сервером
#### [0.4.20] - 2023-09-01
### Добавлено
- Пагинация списка пользователей в админ-панели
- Серверная поддержка пагинации в API для админ-панели
- Поиск пользователей по email, имени и ID
### Изменено
- Улучшен интерфейс админ-панели
- Переработана обработка GraphQL запросов для списка пользователей
### Исправлено
- Проблемы с авторизацией и проверкой токенов
- Обработка ошибок в API модулях
#### [0.4.19] - 2025-04-14
- dropped `Shout.description` and `Draft.description` to be UX-generated