사용자 지시(2026-09-02) — 프로젝트 등록에서도 수정 모달과 같은 항목 수신. - 시행청·연도기번·사업량·설계일자·과업책임자·분야별책임자·설계자·회사 로고 8칸 추가. 담당자는 select + 「신규 등록…」(관리자만), 로고는 회사 대표 로고가 기본값 - 담당자·자산 회사 경계 검사를 check_project_refs(company_id, data) 로 옮겨 B01 수정과 공용 - GET /admin/members 문턱을 require_company 로 — 일반 사용자도 담당자 선택 필요. _scope_company 가 남의 회사를 막고 쓰기는 관리자 그대로 - fix: road_type 스키마가 옛 값(branch·stream)을 받고 화면 선택지 work 를 막아 「작업임도」 등록이 422 로 떨어지던 것 수정 — ^(main|fire|work)$ - 검증(5174 실조작): 등록 칸 14개로 수정 모달과 동일, 등록된 행에 8칸 그대로 저장 (road_type=work, logo_asset_id=1, designer=3), 해당 프로젝트 표제란 12칸 전부 채워짐. pytest 151 passed (신규 test_b02_register_schema.py 8건) Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
44 lines
1.8 KiB
Python
44 lines
1.8 KiB
Python
"""B02_ProjRegister 요청/응답 스키마."""
|
|
|
|
from datetime import date
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
class CreateProjectRequest(BaseModel):
|
|
"""신규 프로젝트 생성 요청."""
|
|
|
|
name: str = Field(..., min_length=1, max_length=255)
|
|
region: str = Field(..., min_length=1, max_length=100)
|
|
# 화면 선택지와 같은 3종 — 간선·산불진화·작업임도 (지선임도 폐지, 계류보전은 사방사업).
|
|
# 옛 값(branch·stream)을 받고 work 를 막고 있어 「작업임도」 등록이 422 로 떨어졌다.
|
|
road_type: str = Field(..., pattern="^(main|fire|work)$")
|
|
project_year: int = Field(..., ge=2000, le=2100)
|
|
estimated_length_m: float | None = Field(default=None, ge=0)
|
|
memo: str | None = Field(default=None, max_length=1000)
|
|
# 도면 표제란·표지 값 — 등록 때부터 받는다 (2026-09-02 사용자 지시).
|
|
# 프로젝트 수정 모달(B01)과 같은 칸이며, 비워 두면 도면에 빈칸으로 나간다.
|
|
client_org: str | None = Field(default=None, max_length=255)
|
|
project_number: str | None = Field(default=None, max_length=100)
|
|
work_amount: str | None = Field(default=None, max_length=100)
|
|
design_date: date | None = None
|
|
pm_user_id: int | None = Field(default=None, gt=0)
|
|
field_lead_user_id: int | None = Field(default=None, gt=0)
|
|
designer_user_id: int | None = Field(default=None, gt=0)
|
|
logo_asset_id: int | None = Field(default=None, gt=0)
|
|
|
|
|
|
class CreateProjectResponse(BaseModel):
|
|
"""신규 프로젝트 생성 응답."""
|
|
|
|
project_id: str
|
|
name: str
|
|
region: str | None
|
|
road_type: str | None
|
|
project_year: int | None
|
|
estimated_length_m: float | None
|
|
memo: str | None
|
|
status: str
|
|
storage_path: str
|
|
created_at: str
|