[0.9.7] - 2025-08-18
### 🔄 Изменения
- **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
2025-08-18 14:25:25 +03:00
|
|
|
# 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",
|
|
|
|
|
]
|