125 lines
4.8 KiB
Markdown
125 lines
4.8 KiB
Markdown
|
|
# 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`
|