Files
offerpai_python_ai/app/services/customize_resume_store.py
T
2026-04-24 19:35:40 +08:00

47 lines
1.6 KiB
Python

"""定制简历 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)