# 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-форма на странице входа в админ-панель: - Добавлен тег `