from redis.exceptions import RedisError from app.utils.redis_client import get_redis_client async def mark_user_online(user_id: int) -> None: try: redis = get_redis_client() key = f"presence:user:{user_id}" count = await redis.incr(key) if count == 1: await redis.expire(key, 3600) except RedisError: return async def mark_user_offline(user_id: int) -> None: try: redis = get_redis_client() key = f"presence:user:{user_id}" value = await redis.decr(key) if value <= 0: await redis.delete(key) except RedisError: return async def is_user_online(user_id: int) -> bool: try: redis = get_redis_client() value = await redis.get(f"presence:user:{user_id}") return bool(value and str(value).isdigit() and int(value) > 0) except RedisError: return False