import redis.asyncio as redis from shared.config import settings # Redis connection redis_client = redis.from_url(settings.REDIS_URL) class CacheService: @staticmethod async def set(key: str, value: str, expire: int = 3600): """Set cache with expiration""" await redis_client.set(key, value, ex=expire) @staticmethod async def get(key: str) -> str: """Get cache value""" return await redis_client.get(key) @staticmethod async def delete(key: str): """Delete cache key""" await redis_client.delete(key) @staticmethod async def exists(key: str) -> bool: """Check if key exists""" return await redis_client.exists(key) @staticmethod async def set_location( user_id: int, latitude: float, longitude: float, expire: int = 300 ): """Cache user location with expiration (5 minutes default)""" location_data = f"{latitude},{longitude}" await redis_client.set(f"location:{user_id}", location_data, ex=expire) @staticmethod async def get_location(user_id: int) -> tuple[float, float] | None: """Get cached user location""" location_data = await redis_client.get(f"location:{user_id}") if location_data: lat, lng = location_data.decode().split(",") return float(lat), float(lng) return None