定制简历 添加 原简历id 简历名字段
This commit is contained in:
@@ -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="定制简历完整 JSON(CustomizeResume 结构)")
|
||||
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="更新时间")
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user