17 Commits

Author SHA1 Message Date
5ab5353d4d fix: ItemPage 생성 시 source_table 자동 설정
- 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>
2025-12-26 13:49:43 +09:00
0cf02550f0 feat: 시스템 필드 수정/삭제 정책 개선
- 예약어 필드(is_active 등)도 수정 가능하도록 변경
- field_key 변경만 차단, 나머지 속성은 수정 허용
- 예약어 필드 삭제 차단 (403 에러)
2025-12-17 20:47:22 +09:00
d16f0410b8 feat: field_key 시스템 필드 예약어 검증 추가
- SystemFields 상수 클래스 생성 (app/Constants/)
  - source_table 기반 테이블별 예약어 관리
  - products/materials 테이블 고정 컬럼 정의
  - 공통 시스템 컬럼 포함
- ItemFieldService 수정
  - validateFieldKeyUnique에 시스템 필드 검증 추가
  - source_table 미지정시 그룹 전체 예약어 체크 (안전 모드)
- 에러 메시지 추가 (error.field_key_reserved)
- 작업 문서 추가 (docs/specs/item-master-field-key-validation.md)
2025-12-09 14:06:35 +09:00
bf92b37ff6 feat: 품목 마스터 소스 매핑 기능 추가
- ItemField 모델: 소스 매핑 컬럼 추가 (source_table, source_column 등)
- ItemPage 모델: source_table 컬럼 추가
- ItemDataService: 동적 데이터 조회 서비스
- ItemMasterApi Swagger 업데이트
- ItemTypeSeeder: 품목 유형 시더
- 스펙 문서: ITEM_MASTER_FIELD_INTEGRATION_PLAN.md
2025-12-09 09:39:16 +09:00
5131bfff98 feat: item_fields 테이블에 is_active 컬럼 추가
- 마이그레이션: 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() 메서드 사용을 위한 필수 컬럼
2025-12-05 14:40:09 +09:00
aa2962314f feat: item_fields에 field_key, is_locked 컬럼 추가
- field_key: {ID}_{key} 형식으로 고유키 생성
- is_locked, locked_by, locked_at 잠금 컬럼 추가
- ItemFieldService: store/update/clone 로직 수정
- FormRequest: field_key 검증 규칙 추가
- Swagger 스키마 업데이트
2025-11-28 17:39:14 +09:00
d3fb00ae26 fix: 섹션 복제 시 필드/BOM 링크만 생성하도록 수정
- 섹션 복제 시 필드를 새로 CREATE하던 로직 제거
- 섹션 복제 시 BOM을 새로 CREATE하던 로직 제거
- 기존 필드/BOM ID로 EntityRelationship 링크만 생성
- 독립 엔티티 아키텍처 원칙 준수 (복제 = 자신만 복제 + 관계 링크만 복제)
- 불필요한 use 문 제거 (ItemField, ItemBomItem)
2025-11-27 22:01:55 +09:00
ebd59f220f feat: init API 응답에 fields 목록 추가
- ItemMasterService: 모든 독립 필드 목록 반환 추가
- Swagger: ItemMasterInitResponse 스키마에 fields 속성 추가
2025-11-27 17:33:23 +09:00
c5eee5561f fix(item-master): EntityRelationship::link() 파라미터 순서 및 관계 로드 오류 수정
- EntityRelationship::link() 호출 파라미터 순서 수정 (3개 파일)
  - ItemSectionService: tenantId를 첫 번째 파라미터로 변경
  - ItemBomItemService: tenantId를 첫 번째 파라미터로 변경
  - ItemFieldService: tenantId를 첫 번째 파라미터로 변경

- ItemSection 모델의 fields()/bomItems() 관계 메서드 문제 해결
  - 쿼리빌더 반환으로 인한 addEagerConstraints() 에러 수정
  - loadRelatedEntities() 메서드 신규 추가
  - with()/load() 대신 setRelation()으로 데이터 설정

- 영향받은 서비스 파일 전체 수정
  - ItemSectionService, SectionTemplateService, ItemMasterService
2025-11-27 16:49:36 +09:00
29dd554bbb fix(item-master): ItemPageService에서 삭제된 sections 관계 참조 제거
- store(): 신규 페이지에 빈 sections 배열 설정
- update(): 섹션 로딩 제거 (수정 시 섹션 변경 없음)
- index(): FK 기반 eager loading 제거
- 섹션 포함 전체 데이터는 init API 사용
2025-11-27 16:20:55 +09:00
efa2a84d2c feat(item-master): 잠금 기능 추가 및 FK 레거시 코드 정리
## 잠금 기능 (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 속성 추가
- 프론트엔드 가이드 문서 추가
2025-11-27 15:51:00 +09:00
9588945922 refactor(item-master): 독립 엔티티 아키텍처 적용 및 Swagger 보완
- 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(계층번호) 필드 추가
2025-11-27 10:28:51 +09:00
a1604b6189 refactor: 섹션 관리를 entity_relationships 참조 방식으로 전환
- SectionTemplateService: 독립 섹션 생성, page_id 있으면 링크 연결
- ItemMasterService: init API가 linkedSections 기반으로 조회
- SectionTemplateStoreRequest: page_id nullable로 변경
- Swagger: 스키마 업데이트 (sectionTemplates → sections)
2025-11-26 18:08:03 +09:00
bccfa19791 feat: Item Master 하이브리드 구조 전환 및 독립 API 추가
- CASCADE FK → 독립 엔티티 + entity_relationships 링크 테이블
- 독립 API 10개 추가 (섹션/필드/BOM CRUD, clone, usage)
- SectionTemplate 모델 제거 → ItemSection.is_template 통합
- 페이지-섹션, 섹션-필드, 섹션-BOM 링크/언링크 API 14개 추가
- Swagger 문서 업데이트
2025-11-26 14:09:31 +09:00
a85cf0a144 feat: ItemMaster Phase 3 API 구현 (부가 기능 8개 엔드포인트)
- Controller 2개, Service 2개, FormRequest 3개 생성
- Routes 등록 (커스텀 탭, 단위 옵션)
- Service-First, Multi-tenant, Soft Delete
- 라우트 테스트 및 Pint 검사 통과
- ItemMaster API 전체 32개 엔드포인트 구현 완료

9 files changed, 467 insertions(+)
2025-11-20 17:16:03 +09:00
28a943bf8e feat: ItemMaster Phase 2 API 구현 (확장 기능 11개 엔드포인트)
- Controller 3개, Service 3개, FormRequest 6개 생성
- Routes 등록 (BOM 항목, 섹션 템플릿, 마스터 필드)
- Service-First, Multi-tenant, Soft Delete
- 라우트 테스트 및 Pint 검사 통과

13 files changed, 600+ insertions(+)
2025-11-20 17:07:40 +09:00
4ccee253b6 feat: ItemMaster Phase 1 API 구현 (핵심 기능 13개 엔드포인트)
- 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 준수
2025-11-20 16:55:57 +09:00