抽象redis得定制简历
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
"""定制简历 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)
|
||||
Reference in New Issue
Block a user