This commit is contained in:
36
CHANGELOG.md
36
CHANGELOG.md
@@ -1,21 +1,5 @@
|
|||||||
# Changelog
|
# 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
|
## [0.9.13] - 2025-08-27
|
||||||
|
|
||||||
### 🚨 Исправлено
|
### 🚨 Исправлено
|
||||||
@@ -33,16 +17,34 @@
|
|||||||
- Добавлен фикстура `create_test_users_in_backend_db` для регистрации пользователей через API
|
- Добавлен фикстура `create_test_users_in_backend_db` для регистрации пользователей через API
|
||||||
- Убраны несуществующие GraphQL запросы (`get_community_stats`)
|
- Убраны несуществующие 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 моделях
|
- Убраны зависимости от несуществующих полей в ORM моделях
|
||||||
- Обновлены сервисы аутентификации для корректной работы без `username`
|
- Обновлены сервисы аутентификации для корректной работы без `username`
|
||||||
- Исправлены все места использования `username` в коде
|
- Исправлены все места использования `username` в коде
|
||||||
- **Улучшена тестовая инфраструктура**:
|
- **Улучшена тестовая инфраструктура**: Более надежное создание тестовой БД
|
||||||
|
- Добавлена функция `force_create_all_tables` с созданием таблиц по одной
|
||||||
|
- Улучшена фикстура `db_session` с множественными fallback стратегиями
|
||||||
|
- Добавлена проверка импорта всех моделей ORM на уровне модуля
|
||||||
|
- Улучшена диагностика проблем с созданием таблиц
|
||||||
- Тесты теперь используют реальный HTTP API вместо прямых DB проверок
|
- Тесты теперь используют реальный HTTP API вместо прямых DB проверок
|
||||||
- Правильная изоляция тестовых данных через отдельную БД
|
- Правильная изоляция тестовых данных через отдельную БД
|
||||||
- Корректная работа с системой ролей и правами
|
- Корректная работа с системой ролей и правами
|
||||||
|
- **Исправлена логика счетчика просмотров**: Улучшена работа ViewedStorage
|
||||||
|
- Исправлен метод `get_shout` для корректной работы с ID и slug
|
||||||
|
- Добавлен fallback для получения slug по ID из БД
|
||||||
|
- Оптимизирована передача параметров в resolvers
|
||||||
|
|
||||||
## [0.9.12] - 2025-08-26
|
## [0.9.12] - 2025-08-26
|
||||||
|
|
||||||
|
|||||||
@@ -318,7 +318,9 @@ def get_shouts_with_links(
|
|||||||
stat = orjson.loads(row.stat)
|
stat = orjson.loads(row.stat)
|
||||||
elif isinstance(row.stat, dict):
|
elif isinstance(row.stat, dict):
|
||||||
stat = row.stat
|
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}
|
shout_dict["stat"] = {**stat, "views_count": viewed}
|
||||||
|
|
||||||
# Обработка main_topic и topics
|
# Обработка main_topic и topics
|
||||||
|
|||||||
@@ -205,11 +205,16 @@ class ViewedStorage:
|
|||||||
if shout_slug:
|
if shout_slug:
|
||||||
return self.views_by_shout.get(shout_slug, 0)
|
return self.views_by_shout.get(shout_slug, 0)
|
||||||
|
|
||||||
# 🔎 Для ID ищем по всем slug'ам (пока нет прямого ID -> views mapping)
|
# 🔎 Для ID ищем slug в БД и затем получаем views_count
|
||||||
# TODO: можно добавить views_by_id кеш для оптимизации
|
|
||||||
if shout_id:
|
if shout_id:
|
||||||
# Простое решение: возвращаем 0 если нет slug
|
try:
|
||||||
# В production лучше добавить отдельный кеш по ID
|
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
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
|
|||||||
2
uv.lock
generated
2
uv.lock
generated
@@ -413,7 +413,7 @@ wheels = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "discours-core"
|
name = "discours-core"
|
||||||
version = "0.9.10"
|
version = "0.9.13"
|
||||||
source = { editable = "." }
|
source = { editable = "." }
|
||||||
dependencies = [
|
dependencies = [
|
||||||
{ name = "alembic" },
|
{ name = "alembic" },
|
||||||
|
|||||||
Reference in New Issue
Block a user