Files
sam-manage/WORKFLOW_STATE.md
kent 6b40362392 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>
2025-12-01 00:43:58 +09:00

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.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