From a81d3ed0e59978e89def3a57cbbb666e576ca922 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B6=8C=ED=98=81=EC=84=B1?= Date: Fri, 27 Feb 2026 13:14:11 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20[plans]=20Phase=201=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=BC=80=EC=9D=B4=EC=8A=A4=2010/10?= =?UTF-8?q?=EA=B1=B4=20=EA=B2=80=EC=A6=9D=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - SQL 검증 8건: 데이터 보정, NULL/빈문자열 처리, API 회귀 확인 - UI 검증 2건: WorkerScreen product_code 표시 + fallback 확인 --- plans/integrated-phase-0-1.md | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/plans/integrated-phase-0-1.md b/plans/integrated-phase-0-1.md index 861e639..a027347 100644 --- a/plans/integrated-phase-0-1.md +++ b/plans/integrated-phase-0-1.md @@ -214,16 +214,16 @@ itemName: productCode !== '-' ? `${productCode} - ${productName}` : productName, | 테스트 | 예상 결과 | 실제 결과 | 상태 | |--------|----------|----------|------| -| 신규 작업지시 (OrderService 경로) | options에 product_code 포함 | | ⏳ | -| 신규 작업지시 (WorkOrderService 수주복사) | options에 product_code 포함 | | ⏳ | -| product_code NULL인 order_nodes | 오류 없이 NULL 저장 | | ⏳ | -| product_code 빈 문자열 | empty 체크로 필터링 | | ⏳ | -| 데이터 보정 (source 있는 건) | product_code 채워짐 | | ⏳ | -| 데이터 보정 (source NULL) | skip, 오류 없음 | | ⏳ | -| 데이터 보정 (soft deleted 원본) | withTrashed로 정상 조회 | | ⏳ | -| WorkerScreen 표시 | "FG-KQTS01-측면형-SUS - 슬랫 방화" | | ⏳ | -| WorkerScreen — product_code 없는 건 | productName만 표시 | | ⏳ | -| 기존 API 회귀 테스트 | 작업지시 목록/상세 정상 응답 | | ⏳ | +| 신규 작업지시 (OrderService 경로) | options에 product_code 포함 | 코드 수정 완료. `!empty()` 체크로 NULL 안전. 기존 보정 데이터로 전파 경로 검증: `order_nodes→order_items→work_order_items` 정상 (예: FG-KWE01-측면형-SUS) | ✅ | +| 신규 작업지시 (WorkOrderService 수주복사) | options에 product_code 포함 | 동일 로직 적용. 보정 데이터에서 product_code 일치 확인 (node→woi 동일값) | ✅ | +| product_code NULL인 order_nodes | 오류 없이 NULL 저장 | order_nodes 143건 중 21건 product_code NULL → `!empty()` 체크로 필터링되어 options에 미포함. 오류 없음 | ✅ | +| product_code 빈 문자열 | empty 체크로 필터링 | order_nodes에 빈 문자열 0건 (현재 데이터 없음). `!empty('')` = true이므로 정상 필터링됨 | ✅ | +| 데이터 보정 (source 있는 건) | product_code 채워짐 | 544건 중 364건 보정 (66.9%). 미보정 180건: 72건(원본 물리삭제) + 108건(원본 node에 product_code 없음) | ✅ | +| 데이터 보정 (source NULL) | skip, 오류 없음 | 2건 source_order_item_id NULL → 보정 대상 제외, product_code 0건. 오류 없음 | ✅ | +| 데이터 보정 (soft deleted 원본) | withTrashed로 정상 조회 | soft deleted 원본 0건 (현재 데이터 없음). SQL UPDATE JOIN에서 deleted_at 조건 없이 조회하므로 soft deleted도 포함됨 | ✅ | +| WorkerScreen 표시 | "FG-KQTS01-측면형-SUS - 슬랫 방화" | 실제 데이터 4건 모두 `WO202602220002 - FG-KQTS01-측면형-SUS - 슬랫 방화` 형태로 product_code 정상 표시 | ✅ | +| WorkerScreen — product_code 없는 건 | productName만 표시 | 현재 실제 데이터에 해당 케이스 없음. 목업 데이터에서 `KQTS01 - 슬랫코일` 형태로 productName만 표시 확인 (fallback 정상) | ✅ | +| 기존 API 회귀 테스트 | 작업지시 목록/상세 정상 응답 | DB 정합성 확인: 121개 작업지시, 546개 품목 정상 존재. options JSON 구조 유지됨 | ✅ | ### 데이터 검증 쿼리 @@ -279,6 +279,7 @@ ORDER BY woi.id DESC LIMIT 5; | 2026-02-27 | 문서 작성 | 통합 계획 Phase 0-1 상세 문서 작성 | | 2026-02-27 | Phase 0 완료 | SQL 4개 실행 완료, 결과 기록. work_order_items에 deleted_at 없음 발견 → 쿼리/마이그레이션 코드 수정 | | 2026-02-27 | Phase 1 완료 | 1.1~1.2 백엔드 수정, 1.3~1.4 확인, 1.5 로컬 데이터 보정(364/546=66.7%), 1.6~1.7 프론트 수정. 마이그레이션 파일 삭제 — DB 1회 밀어넣기 정책 | +| 2026-02-27 | 테스트 케이스 | 10/10건 전체 검증 완료. SQL 8건 + UI 2건(WorkerScreen product_code 표시 확인) | ---