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 준수
This commit is contained in:
2025-11-20 16:55:57 +09:00
parent 5cbfb42c0a
commit 4ccee253b6
17 changed files with 991 additions and 0 deletions

View File

@@ -1,3 +1,162 @@
## 2025-11-20 (수) - ItemMaster Phase 1 API 구현 (핵심 기능)
### 주요 작업
- Phase 1 핵심 기능 13개 API 엔드포인트 구현
- Controller, Service, FormRequest 계층 구조 완성
- SAM API Development Rules 준수 (Service-First, ApiResponse, i18n)
### 추가된 파일
#### Controllers (4개)
1. **app/Http/Controllers/Api/V1/ItemMaster/ItemMasterController.php**
- init() - 전체 초기 데이터 로드
2. **app/Http/Controllers/Api/V1/ItemMaster/ItemPageController.php**
- index(), store(), update(), destroy()
- 페이지 관리 (섹션/필드 중첩 포함)
3. **app/Http/Controllers/Api/V1/ItemMaster/ItemSectionController.php**
- store(), update(), destroy(), reorder()
- 섹션 관리 및 순서 변경
4. **app/Http/Controllers/Api/V1/ItemMaster/ItemFieldController.php**
- store(), update(), destroy(), reorder()
- 필드 관리 및 순서 변경
#### Services (4개)
1. **app/Services/ItemMaster/ItemMasterService.php**
- init() - pages, sectionTemplates, masterFields, customTabs, unitOptions 로드
- Eager Loading으로 N+1 쿼리 방지
2. **app/Services/ItemMaster/ItemPageService.php**
- CRUD + Cascade Soft Delete
- Multi-tenant 스코프 자동 적용
3. **app/Services/ItemMaster/ItemSectionService.php**
- CRUD + reorder (order_no 자동 계산)
- Cascade Soft Delete (하위 필드/BOM 항목 포함)
4. **app/Services/ItemMaster/ItemFieldService.php**
- CRUD + reorder
- JSON 필드 지원 (display_condition, validation_rules, options, properties)
#### FormRequests (7개)
1. **app/Http/Requests/ItemMaster/ItemPageStoreRequest.php**
- page_name (required, max:255)
- item_type (required, in:FG,PT,SM,RM,CS)
- absolute_path (nullable, max:500)
2. **app/Http/Requests/ItemMaster/ItemPageUpdateRequest.php**
- page_name (sometimes)
- absolute_path (nullable)
3. **app/Http/Requests/ItemMaster/ItemSectionStoreRequest.php**
- title (required, max:255)
- type (required, in:fields,bom)
4. **app/Http/Requests/ItemMaster/ItemSectionUpdateRequest.php**
- title (sometimes)
5. **app/Http/Requests/ItemMaster/ItemFieldStoreRequest.php**
- field_name (required), field_type (required, enum)
- is_required, placeholder, options, properties (nullable)
- display_condition, validation_rules (array)
6. **app/Http/Requests/ItemMaster/ItemFieldUpdateRequest.php**
- 모든 필드 sometimes
7. **app/Http/Requests/ItemMaster/ReorderRequest.php**
- items (required, array)
- items.*.id, items.*.order_no (required)
### 수정된 파일
1. **routes/api.php**
- ItemMaster 관련 use 문 4개 추가
- `/v1/item-master/*` 라우트 그룹 추가
- 13개 엔드포인트 등록:
- GET /init
- GET/POST/PUT/DELETE /pages
- POST/PUT/DELETE /pages/{pageId}/sections
- PUT /pages/{pageId}/sections/reorder
- POST/PUT/DELETE /sections/{sectionId}/fields
- PUT /sections/{sectionId}/fields/reorder
### 작업 내용
#### API 엔드포인트 (13개)
1. ✅ GET `/init` - 전체 초기 데이터
2. ✅ GET `/pages` - 페이지 목록 (item_type 필터)
3. ✅ POST `/pages` - 페이지 생성
4. ✅ PUT `/pages/{id}` - 페이지 수정
5. ✅ DELETE `/pages/{id}` - 페이지 삭제 (Cascade)
6. ✅ POST `/pages/{pageId}/sections` - 섹션 생성
7. ✅ PUT `/sections/{id}` - 섹션 수정
8. ✅ DELETE `/sections/{id}` - 섹션 삭제 (Cascade)
9. ✅ PUT `/pages/{pageId}/sections/reorder` - 섹션 순서 변경
10. ✅ POST `/sections/{sectionId}/fields` - 필드 생성
11. ✅ PUT `/fields/{id}` - 필드 수정
12. ✅ DELETE `/fields/{id}` - 필드 삭제
13. ✅ PUT `/sections/{sectionId}/fields/reorder` - 필드 순서 변경
#### 기술적 특징
**Service-First 패턴**:
- Controller는 DI + ApiResponse::handle()만 사용
- 모든 비즈니스 로직은 Service에 구현
- Service extends Service (tenantId(), apiUserId() 활용)
**Multi-tenant 지원**:
- 모든 Service 메서드에서 tenantId() 검증
- BelongsToTenant 스코프 자동 적용
- Cascade Soft Delete시 tenant_id 검증
**실시간 저장**:
- 모든 CUD 작업 즉시 처리
- order_no 자동 계산 (마지막 + 1)
- reorder는 배열로 한 번에 처리
**i18n 메시지**:
- __('message.fetched'), __('message.created')
- __('message.updated'), __('message.deleted')
- __('message.reordered'), __('error.not_found')
### 검증 결과
**라우트 테스트**:
```bash
php artisan route:list --path=item-master
# 결과: 13개 엔드포인트 정상 등록
```
**Pint 검사**:
```bash
./vendor/bin/pint --test app/Http/Controllers/Api/V1/ItemMaster/ app/Services/ItemMaster/ app/Http/Requests/ItemMaster/
# 결과: 15 files PASS
```
### 다음 단계 (Phase 2-3)
**Phase 2 (확장 기능)** - 예정:
- BOM 항목 관리 (3개 엔드포인트)
- 섹션 템플릿 (4개 엔드포인트)
- 마스터 필드 (4개 엔드포인트)
**Phase 3 (부가 기능)** - 예정:
- 커스텀 탭 (5개 엔드포인트)
- 단위 옵션 (3개 엔드포인트)
**Swagger 문서** - 필요:
- app/Swagger/v1/ItemMasterApi.php 작성
- 13개 엔드포인트 스키마 정의
### Git 커밋
```bash
# 커밋 예정
```
---
## 2025-11-20 (수) - ItemMaster 데이터베이스 구조 구축
### 주요 작업