feat: 사용자 요구사항 기능 완전 구현 및 전체 카테고리 추가
Some checks failed
SonarQube Analysis / SonarQube Scan (push) Has been cancelled

- 사용자 요구사항 저장/로드/엑셀 내보내기 기능 완전 구현
- 백엔드 API 수정: Request Body 방식으로 변경
- 데이터베이스 스키마: material_id 컬럼 추가
- 프론트엔드 상태 관리 개선: 저장 후 자동 리로드
- 입력 필드 연결 문제 해결: 누락된 onChange 핸들러 추가
- NewMaterialsPage에 '전체' 카테고리 버튼 추가 (기본 선택)
- Docker 환경 개선: 프론트엔드 볼륨 마운트 및 포트 수정
- UI 개선: 벌레 이모지 제거, 디버그 코드 정리
This commit is contained in:
Hyungi Ahn
2025-09-30 08:55:20 +09:00
parent 0f9a5ad2ea
commit 50570e4624
34 changed files with 942 additions and 181 deletions

View File

@@ -2,6 +2,7 @@ from fastapi import APIRouter, Depends, HTTPException, UploadFile, File, Form, R
from sqlalchemy.orm import Session
from sqlalchemy import text
from typing import List, Optional, Dict
from pydantic import BaseModel
import os
import shutil
from datetime import datetime
@@ -2629,6 +2630,7 @@ async def get_user_requirements(
{
"id": req.id,
"file_id": req.file_id,
"material_id": req.material_id,
"original_filename": req.original_filename,
"job_no": req.job_no,
"revision": req.revision,
@@ -2651,17 +2653,20 @@ async def get_user_requirements(
except Exception as e:
raise HTTPException(status_code=500, detail=f"사용자 요구사항 조회 실패: {str(e)}")
class UserRequirementCreate(BaseModel):
file_id: int
material_id: Optional[int] = None
requirement_type: str
requirement_title: str
requirement_description: Optional[str] = None
requirement_spec: Optional[str] = None
priority: str = "NORMAL"
assigned_to: Optional[str] = None
due_date: Optional[str] = None
@router.post("/user-requirements")
async def create_user_requirement(
file_id: int,
requirement_type: str,
requirement_title: str,
material_id: Optional[int] = None,
requirement_description: Optional[str] = None,
requirement_spec: Optional[str] = None,
priority: str = "NORMAL",
assigned_to: Optional[str] = None,
due_date: Optional[str] = None,
requirement: UserRequirementCreate,
db: Session = Depends(get_db)
):
"""
@@ -2681,15 +2686,15 @@ async def create_user_requirement(
""")
result = db.execute(insert_query, {
"file_id": file_id,
"material_id": material_id,
"requirement_type": requirement_type,
"requirement_title": requirement_title,
"requirement_description": requirement_description,
"requirement_spec": requirement_spec,
"priority": priority,
"assigned_to": assigned_to,
"due_date": due_date
"file_id": requirement.file_id,
"material_id": requirement.material_id,
"requirement_type": requirement.requirement_type,
"requirement_title": requirement.requirement_title,
"requirement_description": requirement.requirement_description,
"requirement_spec": requirement.requirement_spec,
"priority": requirement.priority,
"assigned_to": requirement.assigned_to,
"due_date": requirement.due_date
})
requirement_id = result.fetchone()[0]