4.4 KB · 수정 2026-06-10 00:57
목차

2026-06-10 세션 — 견적 1:1 원칙 확정 + 현장 선택 시 타입 자동 로드 + 운영/테스트 RDS 실측

논의·대안

견적(estimate) 후속 보완 1번(타입 rename+순서)의 미결 결정 2건을 확정하고, 두 타입 입력 경로 통합(SSOT=field_type)에 추가 요구사항 두 가지를 받았다.

페페가 추천안 두 가지를 모두 확정했다: 공유 범위 = (가) 현장별 공유(field_type은 본래 field_no별 마스터, estimate.field_no 존재 → 기존 구조 정합·변경 최소), upsert 시점 = 저장 시 upsert(saveEstimate에서 새 type_name을 그 현장 field_type에 반영 — autosave 폐지 원칙과 일관, 미저장·취소분 오염 없음).

이어 두 가지 추가 요구가 나왔다: - 현장 선택 시 타입 자동 표시(역방향 로드): field/type/list에서 타입을 먼저 만든 뒤 견적서에서 현장 검색→현장 선택 시 그 현장의 field_type 타입들이 견적서에 자동으로 떠야 한다. 중복 작업·오류 방지. 즉 정방향(저장 시 견적서→field_type upsert)과 역방향(현장 로드 시 field_type→견적서)이 같은 SSOT를 공유. - 현장:견적서 1:1 원칙: 한 현장에 견적서 1개만. 이미 견적서 있는 현장은 현장검색 리스트에 "견적서 있음" 표시 + 선택 차단 + 안내 메시지. 카운트 기준은 페페 확정 = 추가건 포함 전부, remove_yn='0'만(소프트삭제 제외).

코드 실측으로 구현 지점을 확정했다: pickSite()(estimate_regist_v2.js ~1707)가 현장 선택 진입점으로 field_no·마진·견적명만 채우고 타입 미처리 → 여기에 자동 로드/1:1 차단을 건다. loadTypeSuggestions()(~1839)는 estimate/type-suggest(전체 distinct·현장무관)로 datalist 자동완성만 채움 → 현장 field_type 기준으로 전환. select_site_search(estimate_dao.py ~606)는 견적 존재 카운트 미포함 → 상관 서브쿼리 추가. 추가건은 enterSubMode가 부모 field_no를 상속하며 현장검색 모달을 경유하지 않으므로 1:1 차단의 부작용이 없음을 확인했다.

대안 검토: 1:1 차단 시 "이미 항목 든 견적서에서 현장 재선택" 충돌 처리를 어떻게 할지 물었으나, 페페가 1:1 원칙으로 아예 중복 생성을 막는 방향을 택해 충돌 케이스 자체가 사라졌다(선택되는 현장은 항상 빈 견적서).

결정

산출물·커밋

다음

  1. 페이즈 A 통합 지시문 작성/갱신 — (a) field_type display_order ALTER + 시드, (b) 저장 시 upsert(견적서→field_type), (c) 현장 선택 시 타입 자동 로드(field_type→견적서), (d) site-search 1:1 차단. 테스트 한정·운영 제외.
  2. 코디 전달 → 테스트 실행·검증(still_missing=0, 멱등 2회, 순서 연속성, 1:1 차단 동작) → 운영 동일 적용 별도 승인.
  3. 페이즈 B(UI 10건 + 7번 마감재 숨김) 지시문.

관계