44 lines
1.5 KiB
Python
44 lines
1.5 KiB
Python
"""B02_ProjRegister FastAPI 라우터."""
|
|
|
|
from typing import Any
|
|
|
|
from fastapi import APIRouter, Depends, HTTPException
|
|
|
|
from common_util.common_util_auth import require_company
|
|
|
|
from .B02_ProjRegister_Repository import create_project
|
|
from .B02_ProjRegister_Schema import CreateProjectRequest, CreateProjectResponse
|
|
|
|
router = APIRouter(prefix="/api/b02", tags=["B02_ProjRegister"])
|
|
|
|
|
|
@router.post("/project", response_model=CreateProjectResponse)
|
|
async def post_project(
|
|
payload: CreateProjectRequest,
|
|
session: dict[str, Any] = Depends(require_company),
|
|
) -> CreateProjectResponse:
|
|
"""신규 프로젝트를 생성한다."""
|
|
|
|
company_id = session.get("company_id")
|
|
if company_id is None:
|
|
raise HTTPException(status_code=403, detail="회사 연결이 필요합니다.")
|
|
|
|
try:
|
|
result = await create_project(
|
|
user_id=int(session["user_id"]),
|
|
company_id=int(company_id),
|
|
name=payload.name.strip(),
|
|
region=payload.region.strip(),
|
|
road_type=payload.road_type,
|
|
project_year=payload.project_year,
|
|
estimated_length_m=payload.estimated_length_m,
|
|
memo=payload.memo.strip() if payload.memo else None,
|
|
)
|
|
return CreateProjectResponse(**result)
|
|
except ValueError as exc:
|
|
raise HTTPException(status_code=400, detail=str(exc)) from exc
|
|
except Exception as exc:
|
|
raise HTTPException(
|
|
status_code=500, detail="프로젝트 생성 처리 중 오류가 발생했습니다."
|
|
) from exc
|