39 lines
1.4 KiB
Python
39 lines
1.4 KiB
Python
"""简历上传解析接口"""
|
|
|
|
from fastapi import APIRouter, UploadFile, File
|
|
from pydantic import BaseModel, Field
|
|
|
|
from app.core.context import RequestContext
|
|
from app.core.database import get_db
|
|
from app.services.resume_service import ResumeService
|
|
|
|
router = APIRouter(prefix="/resume", tags=["简历"])
|
|
|
|
|
|
@router.post("/upload", summary="上传简历文件并AI解析")
|
|
async def upload_resume(file: UploadFile = File(...)):
|
|
"""上传简历文件(PDF/Word/TXT),AI解析后生成结构化简历,返回简历ID"""
|
|
user_id = RequestContext.user_id.get()
|
|
content = await file.read()
|
|
|
|
service = ResumeService()
|
|
# 文件解析 + AI 结构化(不占数据库连接)
|
|
parsed = await service.parse_and_extract(file.filename, content)
|
|
# 短事务:只做数据库写入
|
|
resume_id = None
|
|
async for session in get_db():
|
|
resume_id = await service.save_resume(session, user_id, file.filename, parsed)
|
|
return {"resumeId": resume_id}
|
|
|
|
|
|
class PolishParam(BaseModel):
|
|
content: list[str] = Field(..., description="待润色的简历段落文本数组")
|
|
|
|
|
|
@router.post("/polish", summary="AI润色简历段落")
|
|
async def polish_resume(param: PolishParam):
|
|
"""对前端提交的简历段落做表达层面的润色(格式/错字/表达),不改内容,返回等长数组"""
|
|
service = ResumeService()
|
|
result = await service.polish_paragraphs(param.content)
|
|
return {"content": result}
|