docs: 작업 현황 및 관계 문서 업데이트

This commit is contained in:
2025-12-02 22:11:25 +09:00
parent 198ba8688c
commit 6b4f02e96e
2 changed files with 110 additions and 1 deletions

View File

@@ -1,5 +1,106 @@
# SAM API 작업 현황
## 2025-12-02 (월) - 메뉴 통합관리 시스템 구현 (Phase 1-2)
### 작업 목표
- 글로벌 메뉴-테넌트 메뉴 연결 시스템 구현
- Phase 1: DB 스키마 변경 및 모델 수정
- Phase 2: 서비스 및 API 엔드포인트 개발
### Phase 1 완료 (DB 스키마 및 모델)
**추가된 파일:**
- `database/migrations/2025_12_02_100000_add_global_menu_link_columns_to_menus_table.php`
- `global_menu_id` 컬럼: 원본 글로벌 메뉴 ID
- `is_customized` 컬럼: 테넌트 커스터마이징 여부
- 인덱스 추가
**수정된 파일:**
- `app/Models/Commons/Menu.php`
- fillable: `global_menu_id`, `is_customized` 추가
- casts: `is_customized => boolean` 등 추가
- 관계 메서드: `globalMenu()`, `tenantMenus()`
- 헬퍼 메서드: `isGlobal()`, `isClonedFromGlobal()`, `isCustomized()`
- 스코프: `scopeGlobal()`, `scopeActive()`, `scopeVisible()`, `scopeRoots()`
- `getSyncFields()`: 동기화 비교 대상 필드 목록
- `app/Services/MenuBootstrapService.php`
- `cloneGlobalMenusForTenant()`: global_menu_id 저장 추가
- 활성 메뉴만 복제 (is_active=true)
### Phase 2 완료 (서비스 및 API)
**추가된 파일:**
- `app/Services/GlobalMenuService.php` (신규)
- 글로벌 메뉴 CRUD (tenant_id = NULL)
- `syncToAllTenants()`: 특정 메뉴를 모든 테넌트에 동기화
- `stats()`: 글로벌 메뉴 통계
- `app/Services/MenuSyncService.php` (신규)
- 동기화 상태 상수: NEW, UP_TO_DATE, UPDATABLE, CUSTOMIZED, DELETED
- `getSyncStatus()`: 동기화 상태 목록 조회
- `syncMenus()`: 선택 동기화 (신규/업데이트)
- `importNewMenus()`: 신규 글로벌 메뉴 일괄 가져오기
- `syncUpdates()`: 변경된 메뉴 일괄 업데이트 (커스텀 제외)
- `getAvailableGlobalMenus()`: 복제 가능한 글로벌 메뉴 목록
- `app/Http/Controllers/Api/Admin/GlobalMenuController.php` (신규)
- 시스템 관리자용 글로벌 메뉴 관리
- index, tree, show, store, update, destroy, reorder
- syncToTenants, stats
**수정된 파일:**
- `app/Services/MenuService.php`
- `update()`: 글로벌 복제 메뉴 수정 시 is_customized=true 자동 설정
- `restore()`: 삭제된 메뉴 복원 추가
- `trashedList()`: 삭제된 메뉴 목록 조회 추가
- `app/Http/Controllers/Api/V1/MenuController.php`
- MenuSyncService DI 추가
- restore, trashed, availableGlobal, syncStatus, sync, syncNew, syncUpdates 메서드 추가
- `routes/api.php`
- GlobalMenuController use 문 추가
- 테넌트 메뉴 동기화 라우트 6개 추가 (trashed, available-global, sync-status, sync, sync-new, sync-updates, restore)
- 글로벌 메뉴 관리 라우트 9개 추가 (admin/global-menus/*)
### API 엔드포인트
**테넌트 메뉴 동기화 (V1):**
| Method | Path | 설명 |
|--------|------|------|
| GET | /v1/menus/trashed | 삭제된 메뉴 목록 |
| GET | /v1/menus/available-global | 복제 가능한 글로벌 메뉴 |
| GET | /v1/menus/sync-status | 동기화 상태 조회 |
| POST | /v1/menus/sync | 선택 동기화 |
| POST | /v1/menus/sync-new | 신규 메뉴 일괄 가져오기 |
| POST | /v1/menus/sync-updates | 변경된 메뉴 일괄 업데이트 |
| POST | /v1/menus/{id}/restore | 삭제된 메뉴 복원 |
**글로벌 메뉴 관리 (Admin):**
| Method | Path | 설명 |
|--------|------|------|
| GET | /v1/admin/global-menus | 글로벌 메뉴 목록 |
| POST | /v1/admin/global-menus | 글로벌 메뉴 생성 |
| GET | /v1/admin/global-menus/tree | 글로벌 메뉴 트리 |
| GET | /v1/admin/global-menus/stats | 통계 조회 |
| POST | /v1/admin/global-menus/reorder | 순서 변경 |
| GET | /v1/admin/global-menus/{id} | 단건 조회 |
| PUT | /v1/admin/global-menus/{id} | 수정 |
| DELETE | /v1/admin/global-menus/{id} | 삭제 |
| POST | /v1/admin/global-menus/{id}/sync-to-tenants | 모든 테넌트에 동기화 |
### 검증 결과
- PHP 문법 검사: ✅ 모든 파일 통과
- 라우트 등록: ✅ 9개 글로벌 메뉴 + 7개 테넌트 동기화 라우트 확인
### 다음 작업 (Phase 3-4)
- [ ] Phase 3: MNG 글로벌 메뉴 관리 화면
- [ ] Phase 3: MNG 동기화 센터 화면
- [ ] Phase 4: 마이그레이션 실행 및 테스트
---
## 2025-12-01 (일) - 메뉴 통합관리 시스템 설계
### 작업 목표

View File

@@ -1,6 +1,6 @@
# 논리적 데이터베이스 관계 문서
> **자동 생성**: 2025-11-28 17:41:00
> **자동 생성**: 2025-12-02 20:39:31
> **소스**: Eloquent 모델 관계 분석
## 📊 모델별 관계 현황
@@ -69,10 +69,18 @@ ### files
- **shareLinks()**: hasMany → `file_share_links`
- **fileable()**: morphTo → `(Polymorphic)`
### global_menus
**모델**: `App\Models\Commons\GlobalMenu`
- **parent()**: belongsTo → `global_menus`
- **children()**: hasMany → `global_menus`
- **tenantMenus()**: hasMany → `menus`
### menus
**모델**: `App\Models\Commons\Menu`
- **parent()**: belongsTo → `menus`
- **globalMenu()**: belongsTo → `global_menus`
- **children()**: hasMany → `menus`
### tags