Files
sam-manage/WORKFLOW_STATE.md

125 lines
4.8 KiB
Markdown
Raw Normal View History

# 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`