feat: [archived-records] 아카이브 복원 기능 및 테넌트 필터링 구현
Phase 1 - 아카이브 복원 기능: - ArchiveService: 모델별 아카이브 로직 통합 (326줄) - RestoreService: 복원 로직 및 충돌 검사 (319줄) - ArchivedRecordController: restore, checkRestore 메서드 추가 - record_type enum→varchar 마이그레이션 - 복원 버튼 및 충돌 체크 UI (restore-check.blade.php) Phase 2 - 테넌트 필터링: - ArchivedRecord 모델: tenant_id fillable, tenant 관계 추가 - ArchiveService: tenant_id 저장 로직 (determineTenantId) - ArchivedRecordService: 테넌트별 필터링 쿼리 - 목록 UI: ID 컬럼, 대상 테넌트 컬럼 추가 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
125
WORKFLOW_STATE.md
Normal file
125
WORKFLOW_STATE.md
Normal file
@@ -0,0 +1,125 @@
|
||||
# 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`
|
||||
Reference in New Issue
Block a user