import json import redis from pydantic import BaseModel import random class RedisRecoveryData(BaseModel): user_id: int RECOVERY_REDIS_KEY = "pin_recovery:{pin_code}" def generate_recovery_key(user_id) -> str: pin_code = str(random.randint(100000, 999999)) redis_client = redis.Redis(host='localhost', port=6379, db=0, decode_responses=True) redis_client.set(RECOVERY_REDIS_KEY.format(pin_code=pin_code), json.dumps({"user_id": user_id})) redis_client.expire(RECOVERY_REDIS_KEY.format(pin_code=pin_code), 1800) # Expire in 30 minutes return RECOVERY_REDIS_KEY.format(pin_code=pin_code) def get_recovery_data(pin_code: str) -> RedisRecoveryData: redis_client = redis.Redis(host='localhost', port=6379, db=0) data = redis_client.get(RECOVERY_REDIS_KEY.format(pin_code=pin_code)) json_data = json.loads(str(data)) if data else None if json_data: return RedisRecoveryData(**json_data) return RedisRecoveryData(user_id=-1)