1차완료
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import json
|
||||
from fastapi import APIRouter, Depends, HTTPException, UploadFile, File, Form, Body
|
||||
from sqlalchemy.orm import Session
|
||||
from sqlalchemy import desc, text
|
||||
from sqlalchemy import desc, text, func
|
||||
from typing import List, Optional
|
||||
from datetime import datetime
|
||||
from database import get_db
|
||||
@@ -18,7 +18,7 @@ def _fmt(imp: models.Improvement):
|
||||
"part_name": imp.part_name, "status": imp.status,
|
||||
"manufacturer_id": imp.manufacturer_id,
|
||||
"manufacturer_name": imp.manufacturer.name if imp.manufacturer else None,
|
||||
"manufacturer_company": imp.manufacturer.company if imp.manufacturer else None,
|
||||
"manufacturer_company": None,
|
||||
"created_by_name": imp.creator.name if imp.creator else None,
|
||||
"sw_deploy_target": str(imp.sw_deploy_target) if imp.sw_deploy_target else None,
|
||||
"sw_deployed_at": str(imp.sw_deployed_at) if imp.sw_deployed_at else None,
|
||||
@@ -27,7 +27,7 @@ def _fmt(imp: models.Improvement):
|
||||
"report_ids": [ir.report_id for ir in imp.report_links],
|
||||
"report_count": len(imp.report_links),
|
||||
"attachments": [{"path": a.file_path, "name": a.file_name} for a in imp.attachments],
|
||||
"logs": [{"old": l.old_status, "new": l.new_status, "memo": l.memo,
|
||||
"logs": [{"old_status": l.old_status, "new_status": l.new_status, "memo": l.memo,
|
||||
"changed_at": l.changed_at.isoformat(),
|
||||
"by": l.changer.name if l.changer else None} for l in imp.logs],
|
||||
}
|
||||
@@ -52,7 +52,22 @@ def get_improvement(imp_id: int, db: Session = Depends(get_db),
|
||||
if not imp: raise HTTPException(404)
|
||||
if current_user.role == "manufacturer" and imp.manufacturer_id != current_user.id:
|
||||
raise HTTPException(403)
|
||||
return _fmt(imp)
|
||||
result = _fmt(imp)
|
||||
rids = [ir.report_id for ir in imp.report_links]
|
||||
if rids:
|
||||
seq_subq = db.query(
|
||||
models.Report.id.label("rid"),
|
||||
func.row_number().over(
|
||||
order_by=[models.Report.reported_at.asc(), models.Report.id.asc()]
|
||||
).label("seq")
|
||||
).subquery()
|
||||
seqs = {row.rid: row.seq for row in
|
||||
db.query(seq_subq.c.rid, seq_subq.c.seq)
|
||||
.filter(seq_subq.c.rid.in_(rids)).all()}
|
||||
result["report_links"] = [{"id": rid, "seq": seqs.get(rid, rid)} for rid in rids]
|
||||
else:
|
||||
result["report_links"] = []
|
||||
return result
|
||||
|
||||
@router.post("")
|
||||
async def create_improvement(
|
||||
|
||||
Reference in New Issue
Block a user