47 lines
1.6 KiB
Python
47 lines
1.6 KiB
Python
"""定制简历 Redis 存取模块
|
|
|
|
提供定制简历的保存(自动回滚备份)、查询、回滚能力。
|
|
各 Service 统一复用,不直接操作 Redis key。
|
|
"""
|
|
|
|
from app.core.redis import RedisManager
|
|
from app.schemas.skill_gap 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)
|