定制简历 添加 原简历id 简历名字段

This commit is contained in:
zk
2026-06-18 16:36:03 +08:00
parent 0ddc4b5a6b
commit 1edc28e332
4 changed files with 26 additions and 11 deletions
+3 -1
View File
@@ -6,7 +6,7 @@
from datetime import datetime
from typing import Optional
from sqlalchemy import BigInteger, DateTime, JSON
from sqlalchemy import BigInteger, DateTime, JSON, String
from sqlalchemy.orm import Mapped, mapped_column
from app.core.database import Base
@@ -19,6 +19,8 @@ class UserJobCustomizeResume(Base):
id: Mapped[int] = mapped_column(BigInteger, primary_key=True)
user_id: Mapped[int] = mapped_column(BigInteger, nullable=False, comment="用户ID")
job_id: Mapped[int] = mapped_column(BigInteger, nullable=False, comment="岗位ID,关联 bg_job.id")
resume_id: Mapped[Optional[int]] = mapped_column(BigInteger, nullable=True, comment="原简历ID,关联 bg_user_resume.id")
resume_name: Mapped[Optional[str]] = mapped_column(String(256), nullable=True, comment="定制简历名称")
content: Mapped[Optional[dict]] = mapped_column(JSON, nullable=False, comment="定制简历完整 JSONCustomizeResume 结构)")
create_time: Mapped[datetime] = mapped_column(DateTime, default=datetime.now, comment="创建时间")
update_time: Mapped[datetime] = mapped_column(DateTime, default=datetime.now, onupdate=datetime.now, comment="更新时间")
+21 -8
View File
@@ -72,8 +72,11 @@ def _rollback_key(user_id: int, job_id: int) -> str:
return f"{ROLLBACK_PREFIX}{user_id}:{job_id}"
async def save(user_id: int, job_id: int, cr: CustomizeResume) -> None:
"""保存定制简历:备份旧版本到 Redis 用于回滚 + 写数据库"""
async def save(user_id: int, job_id: int, cr: CustomizeResume, resume_id: int | None = None, resume_name: str | None = None) -> None:
"""保存定制简历:备份旧版本到 Redis 用于回滚 + 写数据库
resume_id / resume_name 仅在首次创建(INSERT)时写入,UPDATE 不更新。
"""
content = cr.model_dump(by_alias=True)
async for session in get_db():
@@ -86,23 +89,33 @@ async def save(user_id: int, job_id: int, cr: CustomizeResume) -> None:
await session.execute(update(UserJobCustomizeResume).where(
UserJobCustomizeResume.id == record.id).values(content=content))
else:
session.add(UserJobCustomizeResume(id=next_id(), user_id=user_id, job_id=job_id, content=content))
session.add(UserJobCustomizeResume(id=next_id(), user_id=user_id, job_id=job_id, resume_id=resume_id, resume_name=resume_name, content=content))
async def get(user_id: int, job_id: int) -> dict | None:
"""查询定制简历,查不到则加载默认简历构建返回"""
data = None
"""查询定制简历,查不到则加载默认简历构建返回
返回结构:{id, resumeId, resumeName, resume, education, work, internship, project, competition}
fallback 默认简历时:id=None, resumeId=默认简历id, resumeName=原简历名
"""
async for session in get_db():
result = await session.execute(select(UserJobCustomizeResume).where(
UserJobCustomizeResume.user_id == user_id, UserJobCustomizeResume.job_id == job_id))
result = await session.execute(select(UserJobCustomizeResume).where(UserJobCustomizeResume.user_id == user_id, UserJobCustomizeResume.job_id == job_id))
record = result.scalar_one_or_none()
if record:
data = CustomizeResume.model_validate(record.content).model_dump(by_alias=True)
data["id"] = record.id
data["resumeId"] = record.resume_id
data["resumeName"] = record.resume_name
return data
else:
# 没有定制简历,加载默认简历构建
detail = await load_default_resume_detail(session, user_id)
data = build_from_detail(detail).model_dump(by_alias=True)
return data
data["id"] = None
data["resumeId"] = detail.resume.id
data["resumeName"] = detail.resume.resume_name or ""
return data
return None
async def rollback(user_id: int, job_id: int) -> None:
+1 -1
View File
@@ -99,7 +99,7 @@ class JobAgentChatService:
continue
self._apply_optimize_result(cr, mod_name, idx, result)
# 5. 存数据库
await customize_resume_store.save(user_id, job_id, cr)
await customize_resume_store.save(user_id, job_id, cr, resume_id=detail.resume.id, resume_name=f"{detail.resume.resume_name or ''}-定制")
log.info(f"岗位简历优化已保存 [user={user_id}, job={job_id}]")
# 6. 返回
return cr.model_dump(by_alias=True)
+1 -1
View File
@@ -132,7 +132,7 @@ class SkillGapService:
if new_skills:
log.info(f"定制简历追加技能: {new_skills}")
# 6. 存数据库
await customize_resume_store.save(user_id, job_id, cr)
await customize_resume_store.save(user_id, job_id, cr, resume_id=detail.resume.id, resume_name=f"{detail.resume.resume_name or ''}-定制")
log.info(f"定制简历已保存 [user={user_id}, job={job_id}]")
@staticmethod