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>
4.8 KiB
4.8 KiB
Workflow 진행 상태
작업명: Archive & Restore Feature (아카이브 복원 기능)
시작일: 2025-11-30
분석 문서: claudedocs/archive-restore-feature-analysis.md
현재 단계: Phase 2 완료 ✅
전체 작업 목록
- 1단계: 분석 완료
- 2단계: Phase 1 순차 수정 (8/8 완료)
- 3단계: Phase 1 검증 완료 (Pint)
- 4단계: Phase 2 테넌트 필터링 (5/5 완료)
- 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.phpdatabase/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/ 저장소: 모든 변경사항 커밋
- 사용자 승인 후 진행
중단 시 재개 가이드
- 이 파일(
WORKFLOW_STATE.md) 확인 - 현재 상태: Phase 2 완료, 커밋 대기
- 커밋 요청 시 변경 사항 요약 제공 후 커밋
참고 파일
- 분석 문서:
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