### 🔄 Изменения - **SQLAlchemy KeyError** - исправление ошибки `KeyError: Reaction` при инициализации - **Исправлена ошибка SQLAlchemy**: Устранена проблема `InvalidRequestError: When initializing mapper Mapper[Shout(shout)], expression Reaction failed to locate a name (Reaction)` ### 🧪 Тестирование - **Исправление тестов** - адаптация к новой структуре моделей - **RBAC инициализация** - добавление `rbac.initialize_rbac()` в `conftest.py` - **Создан тест для getSession**: Добавлен комплексный тест `test_getSession_cookies.py` с проверкой всех сценариев - **Покрытие edge cases**: Тесты проверяют работу с валидными/невалидными токенами, отсутствующими пользователями - **Мокирование зависимостей**: Использование unittest.mock для изоляции тестируемого кода ### 🔧 Рефакторинг - **Упрощена архитектура**: Убраны сложные конструкции с отложенными импортами, заменены на чистую архитектуру - **Перемещение моделей** - `Author` и связанные модели перенесены в `orm/author.py`: Вынесены базовые модели пользователей (`Author`, `AuthorFollower`, `AuthorBookmark`, `AuthorRating`) из `orm.author` в отдельный модуль - **Устранены циклические импорты**: Разорван цикл между `auth.core` → `orm.community` → `orm.author` через реструктуризацию архитектуры - **Создан модуль `utils/password.py`**: Класс `Password` вынесен в utils для избежания циклических зависимостей - **Оптимизированы импорты моделей**: Убран прямой импорт `Shout` из `orm/community.py`, заменен на строковые ссылки ### 🔧 Авторизация с cookies - **getSession теперь работает с cookies**: Мутация `getSession` теперь может получать токен из httpOnly cookies даже без заголовка Authorization - **Убрано требование авторизации**: `getSession` больше не требует декоратор `@login_required`, работает автономно - **Поддержка dual-авторизации**: Токен может быть получен как из заголовка Authorization, так и из cookie `session_token` - **Автоматическая установка cookies**: Middleware автоматически устанавливает httpOnly cookies при успешном `getSession` - **Обновлена GraphQL схема**: `SessionInfo` теперь содержит поля `success`, `error` и опциональные `token`, `author` - **Единообразная обработка токенов**: Все модули теперь используют централизованные функции для работы с токенами - **Улучшена обработка ошибок**: Добавлена детальная валидация токенов и пользователей в `getSession` - **Логирование операций**: Добавлены подробные логи для отслеживания процесса авторизации ### 📝 Документация - **Обновлена схема GraphQL**: `SessionInfo` тип теперь соответствует новому формату ответа - Обновлена документация RBAC - Обновлена документация авторизации с cookies
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
# ORM Models
|
||||
# Re-export models for convenience
|
||||
from orm.author import Author, AuthorBookmark, AuthorFollower, AuthorRating
|
||||
|
||||
from . import (
|
||||
collection,
|
||||
community,
|
||||
draft,
|
||||
invite,
|
||||
notification,
|
||||
rating,
|
||||
reaction,
|
||||
shout,
|
||||
topic,
|
||||
)
|
||||
from .collection import Collection, ShoutCollection
|
||||
from .community import Community, CommunityFollower
|
||||
from .draft import Draft, DraftAuthor, DraftTopic
|
||||
from .invite import Invite
|
||||
from .notification import Notification, NotificationSeen
|
||||
|
||||
# from .rating import Rating # rating.py содержит только константы, не классы
|
||||
from .reaction import REACTION_KINDS, Reaction, ReactionKind
|
||||
from .shout import Shout, ShoutAuthor, ShoutReactionsFollower, ShoutTopic
|
||||
from .topic import Topic, TopicFollower
|
||||
|
||||
__all__ = [
|
||||
# "Rating", # rating.py содержит только константы, не классы
|
||||
"REACTION_KINDS",
|
||||
# Models
|
||||
"Author",
|
||||
"AuthorBookmark",
|
||||
"AuthorFollower",
|
||||
"AuthorRating",
|
||||
"Collection",
|
||||
"Community",
|
||||
"CommunityFollower",
|
||||
"Draft",
|
||||
"DraftAuthor",
|
||||
"DraftTopic",
|
||||
"Invite",
|
||||
"Notification",
|
||||
"NotificationSeen",
|
||||
"Reaction",
|
||||
"ReactionKind",
|
||||
"Shout",
|
||||
"ShoutAuthor",
|
||||
"ShoutCollection",
|
||||
"ShoutReactionsFollower",
|
||||
"ShoutTopic",
|
||||
"Topic",
|
||||
"TopicFollower",
|
||||
# Modules
|
||||
"collection",
|
||||
"community",
|
||||
"draft",
|
||||
"invite",
|
||||
"notification",
|
||||
"rating",
|
||||
"reaction",
|
||||
"shout",
|
||||
"topic",
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user