# Workflow 진행 상태 **작업명:** Archive & Restore Feature (아카이브 복원 기능) **시작일:** 2025-11-30 **분석 문서:** `claudedocs/archive-restore-feature-analysis.md` --- ## 현재 단계: Phase 2 완료 ✅ --- ## 전체 작업 목록 - [x] 1단계: 분석 완료 - [x] 2단계: Phase 1 순차 수정 (8/8 완료) - [x] 3단계: Phase 1 검증 완료 (Pint) - [x] 4단계: Phase 2 테넌트 필터링 (5/5 완료) - [x] 5단계: Phase 2 검증 완료 (Pint) - [ ] 6단계: 커밋 대기 --- ## Phase 1 - 아카이브 복원 기능 ✅ 완료 | # | 작업 | 파일 | 상태 | |---|------|------|------| | 1 | 마이그레이션: record_type enum→varchar | `api/database/migrations/2025_11_30_*_modify_archived_records_record_type_to_varchar.php` | ✅ 완료 | | 2 | ArchiveService 생성 | `mng/app/Services/ArchiveService.php` | ✅ 완료 | | 3 | RestoreService 생성 | `mng/app/Services/RestoreService.php` | ✅ 완료 | | 4 | TenantService에 아카이브 로직 적용 | `mng/app/Services/TenantService.php` | ✅ 완료 | | 5 | UserService에 아카이브 로직 적용 | `mng/app/Services/UserService.php` | ✅ 완료 | | 6 | ArchivedRecordController에 restore 추가 | `mng/app/Http/Controllers/ArchivedRecordController.php` | ✅ 완료 | | 7 | 라우트 추가 | `mng/routes/web.php` | ✅ 완료 | | 8 | UI: 복원 버튼 추가 | `mng/resources/views/archived-records/show.blade.php`, `restore-check.blade.php` | ✅ 완료 | --- ## Phase 2 - 테넌트 필터링 기능 ✅ 완료 | # | 저장소 | 파일 | 작업 | 상태 | |---|--------|------|------|------| | 1 | **api/** | `database/migrations/2025_12_01_002115_add_tenant_id_to_archived_records.php` | 신규 - DB 마이그레이션 | ✅ 완료 | | 2 | mng/ | `app/Services/ArchiveService.php` | 수정 - tenant_id 저장 로직 | ✅ 완료 | | 3 | mng/ | `app/Services/ArchivedRecordService.php` | 수정 - 테넌트 필터링 | ✅ 완료 | | 4 | mng/ | `app/Models/Archives/ArchivedRecord.php` | 수정 - fillable, 관계 추가 | ✅ 완료 | | 5 | mng/ | `resources/views/archived-records/partials/table.blade.php` | 수정 - 대상 테넌트 표시 | ✅ 완료 | --- ## 생성/수정된 파일 목록 (전체) ### api/ 저장소 - `database/migrations/2025_12_01_002115_add_tenant_id_to_archived_records.php` (신규) ### mng/ 저장소 #### 신규 생성 - `app/Services/ArchiveService.php` (326줄) - `app/Services/RestoreService.php` (319줄) - `resources/views/archived-records/restore-check.blade.php` - `database/migrations/2025_11_30_144617_modify_archived_records_record_type_to_varchar.php` #### 수정 - `app/Services/TenantService.php` (ArchiveService DI, forceDeleteTenant 수정) - `app/Services/UserService.php` (ArchiveService DI, forceDeleteUser 수정) - `app/Services/ArchivedRecordService.php` (tenant_id 필드 추가, 필터링) - `app/Models/Archives/ArchivedRecord.php` (tenant_id fillable, tenant 관계) - `app/Http/Controllers/ArchivedRecordController.php` (restore, checkRestore 메서드) - `routes/web.php` (restore-check, restore 라우트) - `resources/views/archived-records/show.blade.php` (복원 버튼, 알림 메시지) - `resources/views/archived-records/index.blade.php` (알림 메시지) - `resources/views/archived-records/partials/table.blade.php` (대상 테넌트 컬럼) --- ## Phase 2 주요 변경 내용 ### 1. tenant_id 컬럼 추가 - archived_records 테이블에 tenant_id 컬럼 추가 - FK 제약조건 없음 (삭제된 테넌트 참조 가능) - 인덱스 추가 ### 2. tenant_id 결정 로직 - **테넌트 삭제**: tenant_id = 삭제되는 테넌트의 ID (자기 자신) - **사용자 삭제**: tenant_id = session('selected_tenant_id') - **부서/메뉴/역할 삭제**: 해당 레코드의 tenant_id ### 3. UI 변경 - 목록에 "대상 테넌트" 컬럼 추가 - 존재하는 테넌트: 인디고 뱃지로 표시 - 삭제된 테넌트: 회색 뱃지로 "(삭제됨 ID: N)" 표시 - 테넌트 없음: "-" 표시 ### 4. 필터링 - ArchivedRecordService에 tenant_id 필터 추가 - filters['tenant_id']로 테넌트별 필터링 가능 --- ## 남은 작업 ### 6단계: 커밋 (대기) - api/ 저장소: 마이그레이션 커밋 - mng/ 저장소: 모든 변경사항 커밋 - 사용자 승인 후 진행 --- ## 중단 시 재개 가이드 1. 이 파일(`WORKFLOW_STATE.md`) 확인 2. 현재 상태: Phase 2 완료, 커밋 대기 3. 커밋 요청 시 변경 사항 요약 제공 후 커밋 --- ## 참고 파일 - 분석 문서: `claudedocs/archive-restore-feature-analysis.md` - ArchivedRecord 모델: `app/Models/Archives/ArchivedRecord.php` - ArchivedRecordRelation 모델: `app/Models/Archives/ArchivedRecordRelation.php` - ArchivedRecordService: `app/Services/ArchivedRecordService.php` - ArchiveService: `app/Services/ArchiveService.php` - RestoreService: `app/Services/RestoreService.php`