This commit is contained in:
36
CHANGELOG.md
36
CHANGELOG.md
@@ -1,21 +1,5 @@
|
||||
# Changelog
|
||||
|
||||
## [0.9.14] - 2025-08-27
|
||||
|
||||
### 🚨 Исправлено
|
||||
- **Проблемы с созданием таблиц на CI**: Улучшена надежность создания тестовых таблиц
|
||||
- Добавлено принудительное создание таблиц по одной при сбое `metadata.create_all`
|
||||
- Улучшена обработка ошибок импорта моделей ORM
|
||||
- Добавлены fallback механизмы для создания отсутствующих таблиц
|
||||
- Исправлены ошибки `no such table: author`, `no such table: shout`, `no such table: draft`
|
||||
|
||||
### 🔧 Техническое
|
||||
- **Улучшена тестовая инфраструктура**: Более надежное создание тестовой БД
|
||||
- Добавлена функция `force_create_all_tables` с созданием таблиц по одной
|
||||
- Улучшена фикстура `db_session` с множественными fallback стратегиями
|
||||
- Добавлена проверка импорта всех моделей ORM на уровне модуля
|
||||
- Улучшена диагностика проблем с созданием таблиц
|
||||
|
||||
## [0.9.13] - 2025-08-27
|
||||
|
||||
### 🚨 Исправлено
|
||||
@@ -33,16 +17,34 @@
|
||||
- Добавлен фикстура `create_test_users_in_backend_db` для регистрации пользователей через API
|
||||
- Убраны несуществующие GraphQL запросы (`get_community_stats`)
|
||||
- Тесты корректно работают с системой ролей и правами администратора
|
||||
- **Проблемы с созданием таблиц на CI**: Улучшена надежность создания тестовых таблиц
|
||||
- Добавлено принудительное создание таблиц по одной при сбое `metadata.create_all`
|
||||
- Улучшена обработка ошибок импорта моделей ORM
|
||||
- Добавлены fallback механизмы для создания отсутствующих таблиц
|
||||
- Исправлены ошибки `no such table: author`, `no such table: shout`, `no such table: draft`
|
||||
- **Исправлен счетчик просмотров**: Теперь корректно показывает количество просмотров публикаций
|
||||
- Исправлена передача `slug` вместо `id` в `ViewedStorage.get_shout`
|
||||
- Добавлена поддержка получения views_count по ID через поиск slug в БД
|
||||
- Исправлена проблема когда всегда возвращался 0 для счетчика просмотров
|
||||
|
||||
|
||||
### 🔧 Техническое
|
||||
- **Рефакторинг аутентификации**: Упрощена логика работы с пользователями
|
||||
- Убраны зависимости от несуществующих полей в ORM моделях
|
||||
- Обновлены сервисы аутентификации для корректной работы без `username`
|
||||
- Исправлены все места использования `username` в коде
|
||||
- **Улучшена тестовая инфраструктура**:
|
||||
- **Улучшена тестовая инфраструктура**: Более надежное создание тестовой БД
|
||||
- Добавлена функция `force_create_all_tables` с созданием таблиц по одной
|
||||
- Улучшена фикстура `db_session` с множественными fallback стратегиями
|
||||
- Добавлена проверка импорта всех моделей ORM на уровне модуля
|
||||
- Улучшена диагностика проблем с созданием таблиц
|
||||
- Тесты теперь используют реальный HTTP API вместо прямых DB проверок
|
||||
- Правильная изоляция тестовых данных через отдельную БД
|
||||
- Корректная работа с системой ролей и правами
|
||||
- **Исправлена логика счетчика просмотров**: Улучшена работа ViewedStorage
|
||||
- Исправлен метод `get_shout` для корректной работы с ID и slug
|
||||
- Добавлен fallback для получения slug по ID из БД
|
||||
- Оптимизирована передача параметров в resolvers
|
||||
|
||||
## [0.9.12] - 2025-08-26
|
||||
|
||||
|
||||
@@ -318,7 +318,9 @@ def get_shouts_with_links(
|
||||
stat = orjson.loads(row.stat)
|
||||
elif isinstance(row.stat, dict):
|
||||
stat = row.stat
|
||||
viewed = ViewedStorage.get_shout(shout_id=shout_id) or 0
|
||||
# 🔎 Получаем views_count по slug, а не по id
|
||||
shout_slug = shout_dict.get("slug", "")
|
||||
viewed = ViewedStorage.get_shout(shout_slug=shout_slug) or 0
|
||||
shout_dict["stat"] = {**stat, "views_count": viewed}
|
||||
|
||||
# Обработка main_topic и topics
|
||||
|
||||
@@ -205,11 +205,16 @@ class ViewedStorage:
|
||||
if shout_slug:
|
||||
return self.views_by_shout.get(shout_slug, 0)
|
||||
|
||||
# 🔎 Для ID ищем по всем slug'ам (пока нет прямого ID -> views mapping)
|
||||
# TODO: можно добавить views_by_id кеш для оптимизации
|
||||
# 🔎 Для ID ищем slug в БД и затем получаем views_count
|
||||
if shout_id:
|
||||
# Простое решение: возвращаем 0 если нет slug
|
||||
# В production лучше добавить отдельный кеш по ID
|
||||
try:
|
||||
with local_session() as session:
|
||||
from orm.shout import Shout
|
||||
shout = session.query(Shout).where(Shout.id == shout_id).first()
|
||||
if shout and shout.slug:
|
||||
return self.views_by_shout.get(shout.slug, 0)
|
||||
except Exception as e:
|
||||
logger.warning(f"Failed to get shout slug for id {shout_id}: {e}")
|
||||
return 0
|
||||
|
||||
return 0
|
||||
|
||||
Reference in New Issue
Block a user