Files
sam-react-prod/claudedocs/archive/sessions/[NEXT-2025-12-10] item-crud-session-context.md
유병철 07374c826c refactor(WEB): claudedocs 재정리 및 AuthContext/Zustand/유틸 코드 개선
- claudedocs 폴더 구조 재정리: archive/sessions, guides/migration·mobile·universal-list, refactoring 분류
- 오래된 세션 컨텍스트/체크리스트 문서 정리 (아카이브 이동 또는 삭제)
- AuthContext → authStore(Zustand) 전환 시작, RootProvider 간소화
- GenericCRUDDialog 공통 다이얼로그 컴포넌트 추가
- PermissionDialog 삭제 → GenericCRUDDialog로 대체
- RankDialog/TitleDialog GenericCRUDDialog 기반으로 리팩토링
- toast-utils.ts 삭제 (미사용)
- fileDownload.ts 개선, excel-download.ts 정리
- menuStore/themeStore Zustand 셀렉터 최적화
- useColumnSettings/useTableColumnStore 기능 보강
- 세금계산서/견적/작업자화면/결재 등 소규모 개선

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 17:17:13 +09:00

3.6 KiB

품목관리 세션 체크포인트

작성일: 2025-12-10 이전 세션: 2025-12-09 상태: 프론트엔드 수정 완료


🎯 오늘의 작업 목표

백엔드 변경 사항 (완료됨)

field_key 통일 방식:

  • 기존: 프론트엔드에서 unit98_unit 변환 후 저장
  • 변경: 백엔드에서 field_key를 그대로 저장/반환
    • 기존 레거시 데이터(98_unit 형식)도 그대로 동작
    • 신규 등록 시 unit으로 등록하면 unit으로 저장
    • 중복 field_key는 백엔드에서 자동 처리 (suffix 추가 또는 사용자 변경)

핵심 포인트: 프론트엔드에서 변환 없이, 백엔드가 주는 값 그대로 사용!


완료된 작업

1. 수정 페이지 mapApiResponseToFormData 개선

파일: src/app/[locale]/(protected)/items/[id]/edit/page.tsx

변경 내용:

  • 하드코딩된 필드 매핑 제거 (약 90줄 → 50줄)
  • 백엔드 응답의 모든 필드를 그대로 formData에 복사
  • 시스템 필드만 제외 (id, tenant_id, created_at, updated_at, deleted_at 등)
// 변경 후: 백엔드 응답을 그대로 사용
function mapApiResponseToFormData(data: ItemApiResponse): DynamicFormData {
  const formData: DynamicFormData = {};
  const excludeKeys = ['id', 'tenant_id', 'category_id', 'category',
    'created_at', 'updated_at', 'deleted_at', 'component_lines', 'bom'];

  Object.entries(data).forEach(([key, value]) => {
    if (!excludeKeys.includes(key) && value !== null && value !== undefined) {
      formData[key] = value;
    }
  });

  // attributes, options 처리...
  return formData;
}

2. item_type 파라미터 수정

변경 파일:

  • src/app/[locale]/(protected)/items/[id]/page.tsx (상세 페이지)
  • src/app/[locale]/(protected)/items/[id]/edit/page.tsx (수정 페이지)

변경 내용:

  • 기존: item_type=MATERIAL
  • 변경: item_type=SM / item_type=RM / item_type=CS (실제 코드 전달)
// 변경 후
queryParams.append('item_type', itemType);  // SM, RM, CS 그대로 전달

3. 삭제 API item_type 파라미터 추가

파일: src/components/items/ItemListClient.tsx

변경 내용:

  • 단건 삭제: ?item_type=${itemToDelete.itemType} 추가
  • 일괄 삭제: ?item_type=${item?.itemType} 추가

4. 빌드 검증

npm run build  # ✅ 성공

📋 테스트 체크리스트

등록 테스트

  • FG(제품) 등록 → 데이터 표시 확인
  • PT-조립부품 등록 → 데이터 표시 확인
  • PT-절곡부품 등록 → 데이터 표시 확인
  • SM/RM/CS 등록 → 데이터 표시 확인

수정 테스트

  • 수정 페이지 진입 → 모든 필드 데이터 로드 확인
  • 드롭다운 값 정상 표시 확인
  • 수정 후 저장 → 값 유지 확인

삭제 테스트

  • 단건 삭제 (SM/RM/CS)
  • 일괄 삭제 (SM/RM/CS)

🔄 코드 변경 요약

파일 변경 내용
items/[id]/page.tsx item_type 파라미터: MATERIAL → 실제 코드
items/[id]/edit/page.tsx mapApiResponseToFormData 간소화, item_type 파라미터 수정
ItemListClient.tsx 삭제 API에 item_type 파라미터 추가 (단건/일괄)

📚 관련 문서

문서 위치
이전 세션 컨텍스트 [NEXT-2025-12-09] item-crud-session-context.md
DynamicForm 분리 계획 [PLAN-2025-12-08] dynamic-form-separation-plan.md
Radix UI 버그 해결 claudedocs/guides/[FIX-2025-12-05] radix-ui-select-controlled-mode-bug.md