44 lines
1.4 KiB
Python
44 lines
1.4 KiB
Python
"""
|
||
services/project_service.py
|
||
|
||
报告生成所需的最小项目查询,替代 eval_report 中重型的 write_service。
|
||
仅提供按 uuid / 数字 id 查询项目并返回 WriteProject,用于校验项目存在性与取项目名。
|
||
"""
|
||
|
||
from __future__ import annotations
|
||
|
||
from fastapi import HTTPException
|
||
from sqlalchemy.orm import Session
|
||
|
||
from database.models import Project
|
||
from schemas.write import WriteProject
|
||
|
||
|
||
def get_project(project_id: str, db: Session) -> WriteProject:
|
||
"""获取后评价报告项目详情。支持 uuid 或数字 id;优先 uuid。"""
|
||
project = None
|
||
if project_id:
|
||
project = db.query(Project).filter(Project.uuid == project_id).first()
|
||
if not project:
|
||
try:
|
||
pid = int(project_id)
|
||
project = db.query(Project).filter(Project.id == pid).first()
|
||
except (ValueError, TypeError):
|
||
pass
|
||
if not project:
|
||
raise HTTPException(status_code=404, detail="项目不存在")
|
||
|
||
return WriteProject(
|
||
id=str(project.id),
|
||
uuid=project.uuid,
|
||
name=project.name,
|
||
description=project.description or "",
|
||
createdAt=project.created_at.strftime("%Y-%m-%d") if project.created_at else "",
|
||
updatedAt=project.updated_at.strftime("%Y-%m-%d") if project.updated_at else "",
|
||
docCount=project.doc_count,
|
||
status=project.status,
|
||
kbProjectId=None,
|
||
color=project.color,
|
||
documents=[],
|
||
)
|