크라우니캔버스 — /api/컬렉션 배선 + 결재함 실데이터 (임무 A)
개요
07-앱-계약.md §3에 정의됐으나 서버.한선에 라우트가 없어 항상 404였던/api/컬렉션/<id>를
배선하고, /api/결재함이 하드코딩 목 2건만 반환하던 것을 데이터/결재.psv 실PSV 우선 반영으로 교체.무엇을 했는지
/api/컬렉션/<id>?뷰=배선 — 서버.한선에_컬렉션ID추출()(기존_페이지ID추출패턴 재사용)
_처리컬렉션조회() 추가. 컬렉션.한선의 기존 조회함수 컬렉션_레코드맵빌드()(O(n) 단일빌드,
2026-07-24 P0 수리분 재사용)로 레코드를 읽어 editor.js 컬렉션뷰렌더가 기대하는
{"행":[{"항목":..,"구분":..,"단가":수,"수량":수,"금액":수}], "합계":수} 형식으로 응답.
미존재 id는 404.
- 시드:
데이터/컬렉션/CR-720-budget_레코드.psv— 컬렉션.한선 정본 저장함수
컬렉션_레코드생성()을 그대로 호출하는 일회성 스크립트(_임시시드.한선, 실행 후 삭제)로 3건
적재: 부품비 500×5000=2,500,000 · 가공비 800,000 · 조립비 150,000 (합계 3,450,000).
- 결재함 실데이터:
_처리결재함()이데이터/결재.psv(8필드 PSV: id|문서번호|제목|금액|상태|
|→¦ 이스케이프)를 우선 파싱해 반환하도록 교체, 파일
없음/빈파일/파싱 0건일 때만 기존 목 2건으로 폴백(로직 그대로 보존). 시드 2건: 사무용품
구매요청 420000(판정 옴) · 출장비 정산 850000(판정 티), 결재선 객체배열 포함.검증 (실측)
- STRICT 재컴파일(
CROWNY_STRICT=1 ./hanseonc_high 서버.한선) — 0경고. launchctl kickstart -k gui/$(id -u)/org.crowny.canvas재기동 후/health200.curl /api/컬렉션/CR-720-budget?뷰=table→ 200, 행 3건(부품비/가공비/조립비), 합계 3450000.curl /api/컬렉션/nonexistent-id→ 404{"오류":"컬렉션 없음: ..."}.curl /api/결재함→ 200, PSV 시드 2건 그대로 반영(판정 옴/티, 결재선 객체배열, 끊김=nexus
_실측증거 접미) 후
재요청 → 응답에 즉시 반영 확인(하드코딩 아님을 실측 확인), 이후 원복.관련 파일
/Users/ef/crowny-canvas/한선씨/서버.한선—_컬렉션ID추출·_처리컬렉션조회·_컬렉션행JSON
_처리결재함·_결재행JSON·_결재PSV목록 추가/교체.
/Users/ef/crowny-canvas/데이터/컬렉션/CR-720-budget_레코드.psv— 신규 시드(3건)./Users/ef/crowny-canvas/데이터/결재.psv— 신규 시드(2건)./Users/ef/crowny-canvas/서버.toau— 재컴파일 배포본.
잔여 이슈
- 결재.psv는 결재선 필드에
|가 실제로 들어가면 깨짐(현재 값엔 없음) — 값 안|금지 원칙
/api/컬렉션은 아직뷰파라미터로 보드/리스트 구분을 하지 않음(테이블 형식만 반환) — F4
- 컬렉션 스키마(속성.psv)는 이번 시드에서 등록하지 않음(레코드 필드만 직접 채움) — 스키마
컬렉션_스키마생성+컬렉션_속성추가도 함께 시드할 것.크라우니코드: lookup HIT 0건(재사용) / MISS 1건(생성) / learn 추가 1건