follow-cache-invalidate-before-fix
All checks were successful
Deploy on push / deploy (push) Successful in 5m18s
All checks were successful
Deploy on push / deploy (push) Successful in 5m18s
This commit is contained in:
@@ -109,6 +109,13 @@ async def follow(
|
|||||||
)
|
)
|
||||||
.first()
|
.first()
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# 🔧 ИСПРАВЛЕНИЕ: Инвалидируем кэш ДО проверки existing_sub,
|
||||||
|
# чтобы всегда возвращать актуальный список подписок (даже при ошибке "already following")
|
||||||
|
cache_key_pattern = f"author:follows-{entity_type}s:{follower_id}"
|
||||||
|
await redis.execute("DEL", cache_key_pattern)
|
||||||
|
logger.debug(f"Инвалидирован кэш подписок: {cache_key_pattern}")
|
||||||
|
|
||||||
if existing_sub:
|
if existing_sub:
|
||||||
logger.info(f"Пользователь {follower_id} уже подписан на {what.lower()} с ID {entity_id}")
|
logger.info(f"Пользователь {follower_id} уже подписан на {what.lower()} с ID {entity_id}")
|
||||||
error = "already following"
|
error = "already following"
|
||||||
@@ -120,20 +127,10 @@ async def follow(
|
|||||||
session.commit()
|
session.commit()
|
||||||
logger.info(f"Пользователь {follower_id} подписался на {what.lower()} с ID {entity_id}")
|
logger.info(f"Пользователь {follower_id} подписался на {what.lower()} с ID {entity_id}")
|
||||||
|
|
||||||
# Инвалидируем кэш подписок пользователя после любой операции
|
|
||||||
cache_key_pattern = f"author:follows-{entity_type}s:{follower_id}"
|
|
||||||
await redis.execute("DEL", cache_key_pattern)
|
|
||||||
logger.debug(f"Инвалидирован кэш подписок: {cache_key_pattern}")
|
|
||||||
|
|
||||||
if cache_method:
|
if cache_method:
|
||||||
logger.debug("Обновление кэша сущности")
|
logger.debug("Обновление кэша сущности")
|
||||||
await cache_method(entity_dict)
|
await cache_method(entity_dict)
|
||||||
|
|
||||||
# Инвалидируем кэш подписок пользователя для обновления списка подписок
|
|
||||||
cache_key_pattern = f"author:follows-{entity_type}s:{follower_id}"
|
|
||||||
await redis.execute("DEL", cache_key_pattern)
|
|
||||||
logger.debug(f"Инвалидирован кэш подписок: {cache_key_pattern}")
|
|
||||||
|
|
||||||
if what == "AUTHOR" and not existing_sub:
|
if what == "AUTHOR" and not existing_sub:
|
||||||
logger.debug("Отправка уведомления автору о подписке")
|
logger.debug("Отправка уведомления автору о подписке")
|
||||||
if isinstance(follower_dict, dict) and isinstance(entity_id, int):
|
if isinstance(follower_dict, dict) and isinstance(entity_id, int):
|
||||||
|
|||||||
Reference in New Issue
Block a user