- store() 메서드에서 item_type으로 common_codes.attributes의 source_table 조회
- getSourceTableFromCommonCode() 헬퍼 메서드 추가
- 기존 source_table이 null인 레코드 수정 (tenant_id=288의 CS, RM)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- SystemFields 상수 클래스 생성 (app/Constants/)
- source_table 기반 테이블별 예약어 관리
- products/materials 테이블 고정 컬럼 정의
- 공통 시스템 컬럼 포함
- ItemFieldService 수정
- validateFieldKeyUnique에 시스템 필드 검증 추가
- source_table 미지정시 그룹 전체 예약어 체크 (안전 모드)
- 에러 메시지 추가 (error.field_key_reserved)
- 작업 문서 추가 (docs/specs/item-master-field-key-validation.md)
- ItemField 모델: 소스 매핑 컬럼 추가 (source_table, source_column 등)
- ItemPage 모델: source_table 컬럼 추가
- ItemDataService: 동적 데이터 조회 서비스
- ItemMasterApi Swagger 업데이트
- ItemTypeSeeder: 품목 유형 시더
- 스펙 문서: ITEM_MASTER_FIELD_INTEGRATION_PLAN.md
- 마이그레이션: is_active 컬럼 추가 (기본값 true)
- ItemField 모델: fillable, casts에 is_active 추가
- ItemFieldService: store, storeIndependent, clone, update 메서드에 is_active 처리
- FormRequest: is_active 유효성 검사 규칙 추가
- API Flow 테스트 시나리오 추가 (docs/api-flows/)
- docs/INDEX.md에 api-flows 섹션 추가
ModelTrait::scopeActive() 메서드 사용을 위한 필수 컬럼
- field_key: {ID}_{key} 형식으로 고유키 생성
- is_locked, locked_by, locked_at 잠금 컬럼 추가
- ItemFieldService: store/update/clone 로직 수정
- FormRequest: field_key 검증 규칙 추가
- Swagger 스키마 업데이트
- 섹션 복제 시 필드를 새로 CREATE하던 로직 제거
- 섹션 복제 시 BOM을 새로 CREATE하던 로직 제거
- 기존 필드/BOM ID로 EntityRelationship 링크만 생성
- 독립 엔티티 아키텍처 원칙 준수 (복제 = 자신만 복제 + 관계 링크만 복제)
- 불필요한 use 문 제거 (ItemField, ItemBomItem)
- EntityRelationship::link() 호출 파라미터 순서 수정 (3개 파일)
- ItemSectionService: tenantId를 첫 번째 파라미터로 변경
- ItemBomItemService: tenantId를 첫 번째 파라미터로 변경
- ItemFieldService: tenantId를 첫 번째 파라미터로 변경
- ItemSection 모델의 fields()/bomItems() 관계 메서드 문제 해결
- 쿼리빌더 반환으로 인한 addEagerConstraints() 에러 수정
- loadRelatedEntities() 메서드 신규 추가
- with()/load() 대신 setRelation()으로 데이터 설정
- 영향받은 서비스 파일 전체 수정
- ItemSectionService, SectionTemplateService, ItemMasterService
## 잠금 기능 (Lock Feature)
- entity_relationships 테이블에 is_locked, locked_by, locked_at 컬럼 추가
- EntityRelationship 모델에 잠금 관련 헬퍼 메서드 추가
- LockCheckTrait 생성 (destroy 시 잠금 체크 공통 로직)
- 각 Service의 destroy() 메서드에 잠금 체크 적용
- API 응답에 is_locked 필드 포함
- 한국어 에러 메시지 추가
## FK 레거시 코드 정리
- ItemMasterSeeder: entity_relationships 기반으로 전환
- ItemPage 모델: FK 기반 sections() 관계 제거
- ItemSectionService: clone() 메서드 FK 제거
- SectionTemplateService: page_id 컬럼 참조 제거
- EntityRelationship::link() 파라미터 순서 통일
## 기타
- Swagger 스키마에 is_locked 속성 추가
- 프론트엔드 가이드 문서 추가
- FK 컬럼 제거: item_sections.page_id, item_fields.section_id, item_bom_items.section_id
- entity_relationships 테이블로 전환하여 독립 엔티티 구조 확립
- ItemMasterField 관련 파일 삭제 (Controller, Service, Model, Requests)
- destroy 메서드 독립 엔티티 아키텍처 적용 (관계 링크만 삭제)
- Swagger 스키마에서 FK 참조 제거
- FormRequest 및 Swagger에 group_id(계층번호) 필드 추가
- SectionTemplateService: 독립 섹션 생성, page_id 있으면 링크 연결
- ItemMasterService: init API가 linkedSections 기반으로 조회
- SectionTemplateStoreRequest: page_id nullable로 변경
- Swagger: 스키마 업데이트 (sectionTemplates → sections)
- CASCADE FK → 독립 엔티티 + entity_relationships 링크 테이블
- 독립 API 10개 추가 (섹션/필드/BOM CRUD, clone, usage)
- SectionTemplate 모델 제거 → ItemSection.is_template 통합
- 페이지-섹션, 섹션-필드, 섹션-BOM 링크/언링크 API 14개 추가
- Swagger 문서 업데이트
- Controller 2개, Service 2개, FormRequest 3개 생성
- Routes 등록 (커스텀 탭, 단위 옵션)
- Service-First, Multi-tenant, Soft Delete
- 라우트 테스트 및 Pint 검사 통과
- ItemMaster API 전체 32개 엔드포인트 구현 완료
9 files changed, 467 insertions(+)
- Controller 3개, Service 3개, FormRequest 6개 생성
- Routes 등록 (BOM 항목, 섹션 템플릿, 마스터 필드)
- Service-First, Multi-tenant, Soft Delete
- 라우트 테스트 및 Pint 검사 통과
13 files changed, 600+ insertions(+)
- Controller 4개 생성 (ItemMaster, ItemPage, ItemSection, ItemField)
- Service 4개 생성 (비즈니스 로직 및 Multi-tenant 지원)
- FormRequest 7개 생성 (Validation)
- Routes 등록 (/v1/item-master/*)
주요 API:
- GET /init - 전체 초기 데이터 로드
- 페이지 관리 (GET/POST/PUT/DELETE)
- 섹션 관리 (POST/PUT/DELETE/reorder)
- 필드 관리 (POST/PUT/DELETE/reorder)
기술적 특징:
- Service-First 패턴 (Controller는 DI + ApiResponse만)
- Multi-tenant 지원 (tenantId() 검증 + BelongsToTenant)
- Cascade Soft Delete (하위 엔티티 자동 처리)
- i18n 메시지 키 사용 (__('message.xxx'))
- order_no 자동 계산 및 reorder 지원
검증:
- 라우트 테스트: 13개 엔드포인트 정상 등록
- Pint 검사: 15 files PASS
SAM API Development Rules 준수