- enhance_files_table: 이중 파일명 시스템 (display_name/stored_name), 폴더 관리, 문서 연결 지원
- create_folders_table: 동적 폴더 관리 시스템 (tenant별 커스터마이징 가능)
- 5개 stub 마이그레이션 생성 (file_share_links, file_deletion_logs, storage_usage_history, add_storage_columns_to_tenants)
- FolderSeeder stub 생성
- CURRENT_WORKS.md에 Phase 1 진행상황 문서화
fix: 파일 공유 및 삭제 기능 버그 수정
- ShareLinkRequest: PATH 파라미터 {id}를 file_id로 자동 병합
- routes/api.php: 공유 링크 다운로드를 auth.apikey 그룹 밖으로 이동 (인증 불필요)
- FileShareLink: File, Tenant 클래스 import 추가
- File 모델: softDeleteFile()에서 SoftDeletes의 delete() 메서드 사용
- FileStorageService: getTrash(), restoreFile(), permanentDelete()에서 onlyTrashed() 사용
- File 모델: Tenant 네임스페이스 수정 (App\Models\Tenants\Tenant)
refactor: Swagger 문서 정리 - File 태그를 Files로 통합
- FileApi.php의 모든 태그를 Files로 변경
- 구 파일 시스템 라우트 삭제 (prefix 'file')
- 구 FileController.php 삭제
- 신규 파일 저장소 시스템으로 완전 통합
fix: 모든 legacy 파일 컬럼 nullable 일괄 처리
- 5개 legacy 컬럼을 한 번에 nullable로 변경
* original_name, file_name, file_name_old (string)
* fileable_id, fileable_type (polymorphic)
- foreach 루프로 반복 작업 자동화
- 신규/기존 시스템 간 완전한 하위 호환성 확보
fix: legacy 파일 컬럼 nullable 처리 완료
- file_name, file_name_old 컬럼도 nullable로 변경
- 기존 시스템과 신규 시스템 간 완전한 하위 호환성 확보
- Legacy: original_name, file_name, file_name_old (nullable)
- New: display_name, stored_name (required)
fix: original_name 컬럼 nullable 처리
- original_name을 nullable로 변경하여 하위 호환성 유지
- 새 시스템에서는 display_name 사용, 기존 시스템은 original_name 사용 가능
fix: 파일 업로드 DB 컬럼 누락 및 메시지 구조 개선
- files 테이블에 감사 컬럼 추가 (created_by, updated_by, uploaded_by)
- ApiResponse::handle() 메시지 로직 개선 (접미사 제거)
- 다국어 지원을 위한 완성된 문장 구조 유지
- FileUploadRequest 파일 검증 규칙 수정
fix: 파일 저장소 버그 수정 및 신규 테넌트 폴더 자동 생성
- FolderSeeder 네임스페이스 수정 (App\Models\Tenant → App\Models\Tenants\Tenant)
- FileStorageController use 문 구문 오류 수정 (/ → \)
- TenantObserver에 신규 테넌트 기본 폴더 자동 생성 로직 추가
- 5개 기본 폴더 (생산관리, 품질관리, 회계, 인사, 일반)
- 에러 처리 및 로깅
- 회원가입 시 자동 실행
- AuthService: 토큰 발급/갱신 통합 관리
- RefreshController: POST /api/v1/refresh 엔드포인트 추가
- 액세스 토큰 2시간, 리프레시 토큰 7일 (.env 설정)
- TOKEN_EXPIRED 에러 코드로 프론트엔드 자동 리프레시 지원
- 리프레시 토큰 일회성 사용 (보안 강화)
- Swagger 문서 Auth 태그로 통합
주요 변경사항:
- MenusStep.php: 존재하지 않는 컬럼(code, route_name, depth, description) 제거
- MenusStep.php: 실제 DB 스키마 컬럼(hidden, is_external, external_url) 추가
- RecipeRegistry.php: MenusStep 비활성화 (하이브리드 메뉴 생성 방식 도입)
- Handler.php: ValidationException 처리 개선 (실제 에러 메시지 표시, 422 상태 코드)
기술 세부사항:
- 하이브리드 접근: TenantBootstrapper(데이터) + MenuBootstrapService(메뉴)
- HTTP 상태 코드 표준화: 422 Unprocessable Entity (validation 실패)
- 실제 검증 에러 메시지 반환: errors 객체에 필드별 에러 정보 포함
- MemberService::getUserInfoForLogin() 메서드 추가
- 사용자 기본 정보 (id, user_id, name, email, phone)
- 활성 테넌트 정보 (is_default 우선 → is_active 차순)
- 테넌트 없는 경우 null 반환
- 추가 테넌트 목록 (other_tenants 배열)
- 권한 기반 메뉴 필터링 (menu:{id}.view)
- 권한 체크 3단계
- 기본 Role 권한 (model_has_permissions)
- Override 권한 (permission_overrides, 시간 제약)
- 우선순위: deny(-1) > allow(1) > base permission
- ApiController::login() 응답 구조 변경
- 기존: {message, user_token}
- 개선: {message, user_token, user, tenant, menus}
- Swagger 문서 업데이트 (AuthApi.php)
- 테넌트 있는 경우 응답 스키마
- 테넌트 없는 경우 응답 스키마 (null)
- 에러 케이스 추가 (400, 401, 404)
- 사용자 등록 + 테넌트 생성 + 시스템 관리자 권한 자동 부여
- 사업자번호 조건부 검증 (active 테넌트만 unique)
- 글로벌 메뉴 자동 복제 (parent_id 매핑 알고리즘)
- DB 트랜잭션으로 전체 프로세스 원자성 보장
추가:
- RegisterRequest: FormRequest 검증 (conditional unique)
- RegisterService: 9-step 통합 비즈니스 로직
- RegisterController: ApiResponse::handle() 패턴
- RegisterApi: 완전한 Swagger 문서
수정:
- MenusStep: 글로벌 메뉴 복제 로직 구현
- message.php: 'registered' 키 추가
- error.php: 4개 에러 메시지 추가
- routes/api.php: POST /api/v1/register 라우트
SAM API Rules 준수:
- Service-First, FormRequest, i18n, Swagger, DB Transaction
- use 문 파싱 추가하여 짧은 클래스명을 FQCN으로 변환
- self/static 자기 참조 관계 정상 처리
- Polymorphic 관계 지원 (morphTo, morphMany, morphOne)
- 클래스 존재 확인 및 안전한 에러 처리
- ::class 문자열 오류 수정
마이그레이션 실행 시 'Class BoardSetting::class not found' 에러 해결
- CommonComponents.php: ApiResponse/ErrorResponse 글로벌 스키마 수정
- property="status" → property="success" (boolean)
- property="data" → property="error" (object with code/details)
- AuthApi, AdminApi, UserApi: 개별 응답 스키마 수정
- signup(): allOf 구조로 변경
- index(): Laravel LengthAwarePaginator 구조 적용
- updateMe(): Member schema 참조로 변경
- PermissionApi, MaterialApi, DepartmentApi: 로컬 스키마 재정의 제거
- ClientGroupService: 삭제된 데이터 자동 복원 기능 구현
- store(): withTrashed()로 삭제된 데이터 확인 후 restore()
- update(): 삭제된 코드 존재 시 에러 반환
- ClientApi: client_group_id 필드 추가
- Client, ClientCreateRequest, ClientUpdateRequest 스키마에 추가
- lang/ko/error.php, lang/en/error.php: 에러 메시지 추가
- duplicate_code, has_clients, code_exists_in_deleted
- Swagger 문서 재생성 및 검증 완료
- DB 연결: 로컬/Docker 환경 오버라이딩 설정 (.env)
- 테넌트 위젯: redirect 버그 수정 (TenantSelectorWidget)
- 통계 위젯: 사용자/제품/자재/주문 카드 추가 (StatsOverviewWidget)
- 리소스 한국어화: Product, Material 모델 레이블 추가
- 대시보드: 위젯 등록 및 캐시 최적화
🤖 Generated with [Claude Code](https://claude.ai/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- GraphViz 설치를 통한 ERD 다이어그램 생성 지원
- BelongsToTenantTrait → BelongsToTenant 트레잇명 수정
- Estimate, EstimateItem 모델의 인터페이스 참조 오류 해결
- 60개 모델의 완전한 관계도 생성 (graph.png, 4.1MB)
- beyondcode/laravel-er-diagram-generator 패키지 활용
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- FK 제약조건 현황 분석 완료: 8개 마이그레이션에서 15+개 FK 식별
- 중요도별 테이블 분류 (핵심/중요/일반) 및 안전한 제거 전략 수립
- 코드 영향도 분석: Eloquent 관계가 FK 독립적으로 작동하여 코드 수정 불필요
주요 변경사항:
- Phase 1: classifications.tenant_id, departments.parent_id FK 제거
- Phase 2: estimates.model_set_id, estimate_items.estimate_id FK 제거
- Phase 3: product_components.material_id FK 제거 (신중한 검토 필요)
- 각 단계별 동적 FK 탐지, 상세 로깅, 완전 롤백 기능 포함
- 성능 인덱스 유지/추가로 쿼리 성능 보장
예상 효과:
- 견적 시스템 및 분류 관리 성능 향상
- 부서 구조 변경 및 자재 관리 유연성 증가
- FK 제약 에러 감소로 개발 생산성 향상
- 시스템 확장 시 스키마 변경 유연성 확보
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- CURRENT_WORKS.md에 2025-09-22 작업 내용 추가
- 1~3단계 완료 내용 상세 기록
- 추가/수정된 파일 목록 및 작업 내용 정리
- 검증 완료 사항 및 시스템 개선 효과 문서화
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
### 추가된 문서들:
- CHECKPOINT_2025-09-19.md: 완전한 복원 지점 가이드
- DATABASE_SCHEMA_2025-09-19.md: samdb 전체 스키마 보고서 (70개 테이블)
- CURRENT_WORKS.md: 작업 현황 및 이동 작업 가이드
### 주요 내용:
- 다른 장소에서 동일한 환경 재현 가능한 가이드 제공
- Git 커밋 기반 정확한 복원 방법 문서화
- Multi-tenant 아키텍처 및 감사 시스템 스키마 분석
- 체계적인 작업 추적 및 프로젝트 관리 방법론
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>