"""定制简历 Redis 存取模块 提供定制简历的保存(自动回滚备份)、查询、回滚能力。 各 Service 统一复用,不直接操作 Redis key。 """ from app.core.redis import RedisManager from app.schemas.customize_resume import CustomizeResume # Redis 常量 KEY_PREFIX = "customize:resume:" EXPIRE = 12 * 60 * 60 # 12小时 ROLLBACK_KEY_PREFIX = "customize:resume:rollback:" ROLLBACK_EXPIRE = 30 * 60 # 30分钟 async def save(user_id: int, cr: CustomizeResume) -> None: """保存定制简历,自动备份旧版本到回滚 key""" key = f"{KEY_PREFIX}{user_id}" rollback_key = f"{ROLLBACK_KEY_PREFIX}{user_id}" # 备份旧数据 old_data = await RedisManager.client.get(key) if old_data: await RedisManager.client.set(rollback_key, old_data, ex=ROLLBACK_EXPIRE) # 存新数据 await RedisManager.client.set(key, cr.model_dump_json(by_alias=True), ex=EXPIRE) async def get(user_id: int) -> dict | None: """查询定制简历,返回 dict 或 None""" key = f"{KEY_PREFIX}{user_id}" data = await RedisManager.client.get(key) if data: return CustomizeResume.model_validate_json(data).model_dump(by_alias=True) return None async def rollback(user_id: int) -> None: """回滚定制简历到上一版本""" rollback_key = f"{ROLLBACK_KEY_PREFIX}{user_id}" data = await RedisManager.client.get(rollback_key) if not data: raise ValueError("没有可回滚的版本") key = f"{KEY_PREFIX}{user_id}" await RedisManager.client.set(key, data, ex=EXPIRE) await RedisManager.client.delete(rollback_key)