rating-patch
Some checks failed
Deploy on push / deploy (push) Failing after 1m33s

This commit is contained in:
2025-09-01 16:29:50 +03:00
parent b342a01a8f
commit 143157a771
2 changed files with 32 additions and 19 deletions

View File

@@ -1,32 +1,33 @@
# Changelog
## [0.9.18] - 2025-01-09
## [0.9.19] - 2025-09-01
### 🔍 Search System Redis Storage
- **💾 Redis-based vector index storage**: Переключились обратно на Redis для хранения векторного индекса
- Заменили файловое хранение в `/dump` на Redis ключи для надежности
### 🔧 Reactions Type Compatibility Fix
- **🐛 rating functions**: Исправлена ошибка `AttributeError: 'str' object has no attribute 'value'` в создании реакций
- Функции `is_positive()` и `is_negative()` в `orm/rating.py` теперь поддерживают как `ReactionKind` enum, так и строки
- Добавлена проверка типа аргумента с автоматическим извлечением `.value` для enum объектов
- Исправлена ошибка в `resolvers/reaction.py` при создании рейтинговых реакций
## [0.9.18] - 2025-09-01
### 🔍 Search Index Persistent Storage
- **💾 vector index storage**: Переключились обратно на Redis для хранения векторного индекса
- файловое хранение в `/dump` на Redis ключи для надежности
- Исправлена проблема с правами доступа на `/dump` папку на сервере
- Векторный индекс теперь сохраняется по ключам `search_index:{name}:data` и `search_index:{name}:metadata`
- **🛠️ Improved reliability**: Убрали зависимость от файловой системы для критичных данных
- **⚡ Better performance**: Redis обеспечивает более быстрый доступ к индексу
- **🔧 Technical changes**:
- Заменили `save_index_to_file()` на `save_index_to_redis()`
- Заменили `load_index_from_file()` на `load_index_from_redis()`
- Обновили автосохранение для использования Redis вместо файлов
- Удалили неиспользуемые импорты (`gzip`, `pathlib`, `cast`)
- Векторный индекс теперь сохраняется
## [0.9.17] - 2025-08-31
### 👥 Author Statistics Enhancement
- **📊 Полная статистика авторов**: Добавлены все недостающие счётчики в AuthorStat
- `topics`: Количество уникальных тем, в которых участвовал автор
- `viewed_shouts`: Общее количество просмотров всех публикаций автора
- `coauthors`: Количество соавторов
- `replies_count`: Количество вызванных комментариев
- `rating_shouts`: Рейтинг публикаций автора (сумма реакций LIKE/AGREE/ACCEPT/PROOF/CREDIT минус DISLIKE/DISAGREE/REJECT/DISPROOF)
- `topics`: Темы, в которых у автора есть публикации
- `rating_shouts`: Рейтинг публикаций автора
- `rating_comments`: Рейтинг комментариев автора (реакции на его комментарии)
- `replies_count`: Количество вызванных комментариев
- `comments`: Количество созданных комментариев и цитат
- `viewed_shouts`: Общее количество просмотров всех публикаций автора
- **🔄 Улучшенная сортировка**: Поддержка сортировки по всем новым полям статистики
- **⚡ Оптимизированные запросы**: Batch-запросы для получения всей статистики одним вызовом
- **🧪 Подробное логирование**: Эмодзи-маркеры для каждого типа статистики

View File

@@ -15,9 +15,21 @@ POSITIVE_REACTIONS = [ReactionKind.ACCEPT.value, ReactionKind.LIKE.value, Reacti
NEGATIVE_REACTIONS = [ReactionKind.REJECT.value, ReactionKind.DISLIKE.value, ReactionKind.DISPROOF.value]
def is_negative(x: ReactionKind) -> bool:
return x.value in NEGATIVE_REACTIONS
def is_negative(x: ReactionKind | str) -> bool:
"""Проверяет, является ли реакция негативной.
Args:
x: ReactionKind enum или строка с названием реакции
"""
value = x.value if isinstance(x, ReactionKind) else x
return value in NEGATIVE_REACTIONS
def is_positive(x: ReactionKind) -> bool:
return x.value in POSITIVE_REACTIONS
def is_positive(x: ReactionKind | str) -> bool:
"""Проверяет, является ли реакция позитивной.
Args:
x: ReactionKind enum или строка с названием реакции
"""
value = x.value if isinstance(x, ReactionKind) else x
return value in POSITIVE_REACTIONS