1차완료

This commit is contained in:
byun
2026-06-02 19:34:36 +09:00
parent 9f0f4326fe
commit b6863cd260
28 changed files with 1667 additions and 460 deletions

View File

@@ -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(