Files
sam-docs/changes/20260319_item_master_field_validation_fix.md

2.8 KiB

품목기준관리 필드 수정 422 유효성 검증 오류 수정

날짜: 2026-03-19 작업자: Claude Code

변경 개요

품목기준관리(Item Master) 필드 수정 시 PUT /api/v1/item-master/fields/{id} 요청에서 422 유효성 검증 오류가 발생하는 문제를 수정했다. 두 가지 원인이 있었다:

  1. field_key regex 불일치: 기존 데이터 39건이 숫자로 시작하는 field_key (예: 101_specification_1)를 사용하지만, FormRequest의 regex가 영문자 시작만 허용
  2. 422 응답 포맷 불일치: API의 Handler.php와 ApiResponse::handle이 서로 다른 에러 포맷을 사용하여, 프론트엔드에서 validation 에러 상세 정보를 받지 못함

수정된 파일

API (sam/api)

파일 변경 내용
app/Exceptions/Handler.php 422 응답에 errors 최상위 필드 추가 (기존 error.details와 병행)
app/Http/Requests/ItemMaster/ItemFieldUpdateRequest.php field_key regex: ^[a-zA-Z]^[a-zA-Z0-9]
app/Http/Requests/ItemMaster/ItemFieldStoreRequest.php 동일 regex 수정
app/Http/Requests/ItemMaster/IndependentFieldStoreRequest.php 동일 regex 수정

React (sam/react) — FE 개발자 반영 필요

파일 변경 내용
src/lib/api/error-handler.ts 422 에러 시 data.errors || data.error?.details 폴백 추가

상세 변경 사항

1. field_key regex 완화

변경 전: /^[a-zA-Z][a-zA-Z0-9_]*$/   (영문자 시작 필수)
변경 후: /^[a-zA-Z0-9][a-zA-Z0-9_]*$/ (영문자 또는 숫자 시작 허용)

기존 데이터 39건이 100_item_name, 101_specification_1 등 숫자로 시작하는 field_key를 사용하고 있어 regex를 완화했다.

2. Handler.php 422 응답 포맷 통일

변경 전 (Handler.php):
{ "success": false, "message": "입력값 검증 실패", "error": { "code": 422, "details": {...} } }

변경 후 (Handler.php):
{ "success": false, "message": "입력값 검증 실패", "errors": {...}, "error": { "code": 422, "details": {...} } }

errors 최상위 필드를 추가하여 ApiResponse::handle의 포맷과 통일했다. 기존 error.details 구조는 하위호환을 위해 유지한다.

3. React error-handler 폴백

// 변경 전
data.errors  // Handler.php 경유 시 undefined

// 변경 후
data.errors || data.error?.details  // 양쪽 포맷 모두 지원

테스트 체크리스트

  • field_key가 숫자로 시작하는 필드(ID 315) 수정 요청 정상 처리
  • 422 에러 시 프론트엔드에서 validation 에러 상세 표시
  • 개발서버 배포 후 품목기준관리 필드 수정 동작 확인

최종 업데이트: 2026-03-19