feat: Items 테이블 통합 마이그레이션 Phase 0-5 구현

## 주요 변경사항
- Phase 0: 비표준 item_type 데이터 정규화 마이그레이션
- Phase 1.1: items 테이블 생성 (products + materials 통합)
- Phase 1.2: item_details 테이블 생성 (1:1 확장 필드)
- Phase 1.3: 데이터 이관 + item_id_mappings 테이블 생성
- Phase 3: item_pages.source_table 업데이트
- Phase 5: 참조 테이블 마이그레이션 (product_components, orders 등)

## 신규 파일
- app/Models/Items/Item.php - 통합 아이템 모델
- app/Models/Items/ItemDetail.php - 1:1 확장 필드 모델
- app/Services/ItemService.php - 통합 서비스 클래스

## 수정 파일
- ItemPage.php - items 테이블 지원 추가

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2025-12-13 15:41:30 +09:00
parent aa9746ae2f
commit 80281e65b7
11 changed files with 1660 additions and 4 deletions

View File

@@ -103,15 +103,25 @@ public function allRelationships()
public function getTargetModelClass(): ?string
{
$mapping = [
'products' => \App\Models\Product::class,
'materials' => \App\Models\Material::class,
'items' => \App\Models\Items\Item::class,
// 하위 호환성 (마이그레이션 완료 전까지)
'products' => \App\Models\Products\Product::class,
'materials' => \App\Models\Materials\Material::class,
];
return $mapping[$this->source_table] ?? null;
}
/**
* 제품 페이지인지 확인
* 통합 품목 페이지인지 확인
*/
public function isItemPage(): bool
{
return $this->source_table === 'items';
}
/**
* 제품 페이지인지 확인 (하위 호환성)
*/
public function isProductPage(): bool
{
@@ -119,10 +129,26 @@ public function isProductPage(): bool
}
/**
* 자재 페이지인지 확인
* 자재 페이지인지 확인 (하위 호환성)
*/
public function isMaterialPage(): bool
{
return $this->source_table === 'materials';
}
/**
* Product 타입 품목인지 확인 (items 테이블 기준)
*/
public function isProductType(): bool
{
return in_array($this->item_type, ['FG', 'PT']);
}
/**
* Material 타입 품목인지 확인 (items 테이블 기준)
*/
public function isMaterialType(): bool
{
return in_array($this->item_type, ['SM', 'RM', 'CS']);
}
}