This commit is contained in:
31
CHANGELOG.md
31
CHANGELOG.md
@@ -1,32 +1,33 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
## [0.9.18] - 2025-01-09
|
## [0.9.19] - 2025-09-01
|
||||||
|
|
||||||
### 🔍 Search System Redis Storage
|
### 🔧 Reactions Type Compatibility Fix
|
||||||
- **💾 Redis-based vector index storage**: Переключились обратно на Redis для хранения векторного индекса
|
- **🐛 rating functions**: Исправлена ошибка `AttributeError: 'str' object has no attribute 'value'` в создании реакций
|
||||||
- Заменили файловое хранение в `/dump` на Redis ключи для надежности
|
- Функции `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` папку на сервере
|
- Исправлена проблема с правами доступа на `/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
|
## [0.9.17] - 2025-08-31
|
||||||
|
|
||||||
### 👥 Author Statistics Enhancement
|
### 👥 Author Statistics Enhancement
|
||||||
- **📊 Полная статистика авторов**: Добавлены все недостающие счётчики в AuthorStat
|
- **📊 Полная статистика авторов**: Добавлены все недостающие счётчики в AuthorStat
|
||||||
- `topics`: Количество уникальных тем, в которых участвовал автор
|
- `topics`: Количество уникальных тем, в которых участвовал автор
|
||||||
|
- `viewed_shouts`: Общее количество просмотров всех публикаций автора
|
||||||
- `coauthors`: Количество соавторов
|
- `coauthors`: Количество соавторов
|
||||||
- `replies_count`: Количество вызванных комментариев
|
- `topics`: Темы, в которых у автора есть публикации
|
||||||
- `rating_shouts`: Рейтинг публикаций автора (сумма реакций LIKE/AGREE/ACCEPT/PROOF/CREDIT минус DISLIKE/DISAGREE/REJECT/DISPROOF)
|
- `rating_shouts`: Рейтинг публикаций автора
|
||||||
- `rating_comments`: Рейтинг комментариев автора (реакции на его комментарии)
|
- `rating_comments`: Рейтинг комментариев автора (реакции на его комментарии)
|
||||||
- `replies_count`: Количество вызванных комментариев
|
- `replies_count`: Количество вызванных комментариев
|
||||||
- `comments`: Количество созданных комментариев и цитат
|
- `comments`: Количество созданных комментариев и цитат
|
||||||
- `viewed_shouts`: Общее количество просмотров всех публикаций автора
|
|
||||||
- **🔄 Улучшенная сортировка**: Поддержка сортировки по всем новым полям статистики
|
- **🔄 Улучшенная сортировка**: Поддержка сортировки по всем новым полям статистики
|
||||||
- **⚡ Оптимизированные запросы**: Batch-запросы для получения всей статистики одним вызовом
|
- **⚡ Оптимизированные запросы**: Batch-запросы для получения всей статистики одним вызовом
|
||||||
- **🧪 Подробное логирование**: Эмодзи-маркеры для каждого типа статистики
|
- **🧪 Подробное логирование**: Эмодзи-маркеры для каждого типа статистики
|
||||||
|
|||||||
@@ -15,9 +15,21 @@ POSITIVE_REACTIONS = [ReactionKind.ACCEPT.value, ReactionKind.LIKE.value, Reacti
|
|||||||
NEGATIVE_REACTIONS = [ReactionKind.REJECT.value, ReactionKind.DISLIKE.value, ReactionKind.DISPROOF.value]
|
NEGATIVE_REACTIONS = [ReactionKind.REJECT.value, ReactionKind.DISLIKE.value, ReactionKind.DISPROOF.value]
|
||||||
|
|
||||||
|
|
||||||
def is_negative(x: ReactionKind) -> bool:
|
def is_negative(x: ReactionKind | str) -> bool:
|
||||||
return x.value in NEGATIVE_REACTIONS
|
"""Проверяет, является ли реакция негативной.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
x: ReactionKind enum или строка с названием реакции
|
||||||
|
"""
|
||||||
|
value = x.value if isinstance(x, ReactionKind) else x
|
||||||
|
return value in NEGATIVE_REACTIONS
|
||||||
|
|
||||||
|
|
||||||
def is_positive(x: ReactionKind) -> bool:
|
def is_positive(x: ReactionKind | str) -> bool:
|
||||||
return x.value in POSITIVE_REACTIONS
|
"""Проверяет, является ли реакция позитивной.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
x: ReactionKind enum или строка с названием реакции
|
||||||
|
"""
|
||||||
|
value = x.value if isinstance(x, ReactionKind) else x
|
||||||
|
return value in POSITIVE_REACTIONS
|
||||||
|
|||||||
Reference in New Issue
Block a user