docs: Phase 4 완료 문서 업데이트 및 메뉴 관리 링크 추가

- CURRENT_WORKS.md: Phase 4-2~4-5 상세 작업 내역 추가 (365줄)
- docs/INDEX.md: Phase 4 완료 상태 업데이트
- docs/specs/database-schema.md: Phase 4 테이블 8개 상세 스키마 추가
- sidebar.blade.php: 메뉴 관리 링크 추가 (누락되어 있었음)

Phase 4 완료: 시스템 관리 5개 메뉴 (테넌트/역할/부서/사용자/메뉴)
This commit is contained in:
2025-11-24 23:07:09 +09:00
parent 79aebfa148
commit ee167a112e
3 changed files with 410 additions and 17 deletions

View File

@@ -416,7 +416,364 @@ ### 다음 단계:
- [ ] 다른 목록 페이지에 페이지네이션 적용
- [ ] 페이지당 표시 개수 선택 기능 추가 고려
### Git 상태:
- 🔄 수정됨: `resources/views/tenants/partials/table.blade.php`
- 추가됨: `resources/views/partials/pagination.blade.php`
- 커밋 대기 (사용자 확인 커밋 예정)
### Git 커밋:
- `43af1a5` "페이지네이션 기능 개선 공통화"
---
## 2025-11-24 (일) - Phase 4-2: 역할 관리 시스템 구현
### 주요 작업
- 역할 CRUD 완전 구현 (Spatie Permission 패키지 활용)
- 권한 선택 UI 구현 (체크박스, 전체 선택/해제)
- HTMX + API 패턴 적용
- 페이지네이션 공통 컴포넌트 생성
### 추가된 파일:
- `app/Services/RoleService.php` - 역할 비즈니스 로직 (Spatie Role 모델 사용)
- `app/Http/Controllers/RoleController.php` - Blade 화면 컨트롤러
- `app/Http/Controllers/Api/Admin/RoleController.php` - HTMX API 컨트롤러
- `app/Http/Requests/StoreRoleRequest.php` - 역할 생성 검증
- `app/Http/Requests/UpdateRoleRequest.php` - 역할 수정 검증
- `resources/views/roles/index.blade.php` - 역할 목록 (HTMX 로딩)
- `resources/views/roles/create.blade.php` - 역할 생성
- `resources/views/roles/edit.blade.php` - 역할 수정
- `resources/views/roles/partials/table.blade.php` - 역할 테이블
- `resources/views/partials/pagination.blade.php` - 공통 페이지네이션 컴포넌트
### 수정된 파일:
- `resources/views/partials/sidebar.blade.php` - 역할 관리 메뉴 추가
- `routes/web.php` - 역할 관리 라우트 추가 (index, create, edit)
- `routes/api.php` - 역할 관리 API 라우트 추가 (CRUD)
### 기능 상세:
**역할 관리 CRUD:**
- 역할 목록: HTMX 동적 로딩, 검색 필터, 페이지네이션
- 역할 생성: 이름/설명 입력, 권한 선택 (체크박스)
- 역할 수정: 기존 정보 편집, 권한 변경
- 역할 삭제: Soft Delete (복구 가능)
**권한 선택 UI:**
- 그리드 레이아웃 (3열)
- 체크박스로 권한 선택
- 전체 선택/해제 버튼
- 현재 권한 개수 표시
**RoleService 주요 메서드:**
- `getRoles(filters, perPage)`: 역할 목록 조회 (페이지네이션)
- `getRoleById(id)`: 특정 역할 조회 (권한 포함)
- `createRole(data)`: 역할 생성 + 권한 동기화 (`syncPermissions()`)
- `updateRole(id, data)`: 역할 수정 + 권한 동기화
- `deleteRole(id)`: 역할 삭제 (권한/사용자 연결 해제)
- `isNameExists(name, excludeId)`: 역할 이름 중복 체크
- `getActiveRoles()`: 활성 역할 목록 (드롭다운용)
- `getRoleStats()`: 역할 통계 (전체 , 권한 있는 역할 )
**Spatie Permission 통합:**
- `Spatie\Permission\Models\Role` 모델 사용
- `syncPermissions()`: 역할-권한 동기화
- `permissions` 관계: 역할에 할당된 권한 조회
- Multi-tenant 지원: `tenant_id` 필터링
**HTMX 패턴:**
- 목록 화면: `hx-get="/api/admin/roles"` (필터 포함)
- 생성/수정: `hx-post`, `hx-put` (JSON 응답 리다이렉트)
- 삭제: `confirmDelete()` JavaScript HTMX DELETE 요청
**페이지네이션 컴포넌트:**
- 모바일: 이전/다음 버튼만
- 데스크톱: 전체 페이지 번호 표시
- HTMX 호환: `hx-get`, `hx-target`, `hx-include`
- 재사용 가능: `@include('partials.pagination', [...])`
### 테넌트 필터링:
- 세션에 `selected_tenant_id` 있으면 해당 테넌트만
- 없으면 전체 테넌트 데이터 표시
- 역할/권한 모두 테넌트 필터링 적용
### 빌드 결과:
- **변경 파일**: 17개
- **추가 코드**: +1331줄, -106줄
### Git 커밋:
- `5f50716` "feat: Phase 4-2 역할 관리 시스템 구현 (HTMX + API 패턴)"
---
## 2025-11-24 (일) - Phase 4-3: 부서 관리 시스템 구현
### 주요 작업
- 부서 CRUD 완전 구현 (계층 구조 지원)
- 활성/비활성 상태 관리
- HTMX + API 패턴 적용
### 추가된 파일:
- `app/Services/DepartmentService.php` - 부서 비즈니스 로직
- `app/Http/Controllers/DepartmentController.php` - Blade 화면 컨트롤러
- `app/Http/Controllers/Api/Admin/DepartmentController.php` - HTMX API 컨트롤러
- `app/Http/Requests/StoreDepartmentRequest.php` - 부서 생성 검증
- `app/Http/Requests/UpdateDepartmentRequest.php` - 부서 수정 검증
- `resources/views/departments/index.blade.php` - 부서 목록
- `resources/views/departments/create.blade.php` - 부서 생성
- `resources/views/departments/edit.blade.php` - 부서 수정
- `resources/views/departments/partials/table.blade.php` - 부서 테이블
### 수정된 파일:
- `resources/views/partials/sidebar.blade.php` - 부서 관리 메뉴 추가
- `routes/web.php` - 부서 관리 라우트 추가
- `routes/api.php` - 부서 관리 API 라우트 추가
### 기능 상세:
**부서 계층 구조:**
- Self-referential relationship: `parent_id` `departments.id`
- 상위 부서 선택 가능 (드롭다운)
- 자기 자신을 상위 부서로 선택 방지 (FormRequest 검증)
- 하위 부서 존재 삭제 방지
**DepartmentService 주요 메서드:**
- `getDepartments(filters, perPage)`: 부서 목록 조회
- `getDepartmentById(id)`: 특정 부서 조회
- `createDepartment(data)`: 부서 생성
- `updateDepartment(id, data)`: 부서 수정
- `deleteDepartment(id)`: 부서 삭제 (하위 부서 체크)
- `getActiveDepartments()`: 활성 부서 목록 (드롭다운용)
- `getDepartmentTree()`: 계층 구조 트리 (향후 구현)
**활성 상태 관리:**
- `is_active` 컬럼: 활성(1) / 비활성(0)
- 활성 필터: `active` scope 적용
- UI: 활성 상태 뱃지 표시
**정렬 순서:**
- `sort_order` 컬럼: 표시 순서 지정
- 기본 정렬: `sort_order ASC`, `name ASC`
### 검증 규칙:
**StoreDepartmentRequest:**
- `name`: 필수, 최대 100자
- `parent_id`: 선택, 존재하는 부서 ID
- `sort_order`: 선택, 정수
- `is_active`: 불리언 (기본값: true)
**UpdateDepartmentRequest:**
- 위와 동일 + 자기 참조 방지
- `parent_id` 현재 부서 ID
### Git 커밋:
- `6738505` "feat: Phase 4-3 부서 관리 시스템 구현"
---
## 2025-11-24 (일) - 사용자 관리 기능 추가
### 주요 작업
- 사용자 CRUD 완전 구현
- UserService, FormRequest, Blade Views 생성
- MNG_CRITICAL_RULES.md 문서 추가
- 테이블 헤더 스타일 통일
### 추가된 파일:
- `app/Http/Controllers/UserController.php` - Blade 화면 컨트롤러
- `app/Http/Controllers/Api/Admin/UserController.php` - HTMX API 컨트롤러
- `app/Http/Requests/StoreUserRequest.php` - 사용자 생성 검증
- `app/Http/Requests/UpdateUserRequest.php` - 사용자 수정 검증
- `resources/views/users/index.blade.php` - 사용자 목록
- `resources/views/users/create.blade.php` - 사용자 생성
- `resources/views/users/edit.blade.php` - 사용자 수정
- `resources/views/users/partials/table.blade.php` - 사용자 테이블
- `docs/MNG_CRITICAL_RULES.md` - MNG 프로젝트 핵심 규칙 문서
### 수정된 파일:
- `resources/views/partials/sidebar.blade.php` - 사용자 관리 메뉴 이동
- `routes/web.php` - 사용자 관리 라우트 추가
- `routes/api.php` - 사용자 관리 API 라우트 추가
- 테이블 헤더 스타일 통일 (tenants, roles, departments)
### 기능 상세:
**사용자 관리 CRUD:**
- 사용자 목록: 검색, 필터링 (역할, 부서, 활성 상태)
- 사용자 생성: 이름, 이메일, 비밀번호, 역할, 부서, 테넌트
- 사용자 수정: 정보 변경, 비밀번호 변경 (선택)
- 사용자 삭제: Soft Delete
**MNG_CRITICAL_RULES.md:**
- DB 마이그레이션 금지 (API 프로젝트에서만 실행)
- 모델 독립 운영 (admin, api, mng 각각 독립)
- Filament 의존성 제거
- Service-First 패턴 강제
- FormRequest 검증 필수
### Git 커밋:
- `0c86b39` "feat: 사용자 관리 기능 MNG 문서 추가"
---
## 2025-11-24 (일) - 사용자 관리 복구 및 영구삭제 기능 추가
### 주요 작업
- UserService에 복구/영구삭제 메서드 추가
- Audit 컬럼 처리 (created_by, updated_by, deleted_by)
- 삭제된 사용자 UI 표시
### 수정된 파일:
- `app/Services/UserService.php` - restoreUser(), forceDeleteUser() 추가
- `app/Http/Controllers/Api/Admin/UserController.php` - restore, forceDestroy 엔드포인트
- `resources/views/users/index.blade.php` - 삭제된 항목 필터 체크박스
- `resources/views/users/partials/table.blade.php` - 복원/영구삭제 버튼
- `routes/api.php` - restore, forceDestroy 라우트 추가
### 기능 상세:
**복구 기능:**
- Soft Delete된 사용자 복원
- `withTrashed()`: 삭제된 사용자 포함 조회
- UI: 삭제된 사용자에 "복원" 버튼 표시
**영구삭제 기능:**
- 물리적 삭제 (복구 불가)
- 권한 체크: 슈퍼관리자만 가능
- UI: 삭제된 사용자에 "영구삭제" 버튼 표시 (빨간색)
**Audit 컬럼 처리:**
- `created_by`: 생성자 ID
- `updated_by`: 수정자 ID
- `deleted_by`: 삭제자 ID
- 자동 기록: `auth()->id()`
### Git 커밋:
- `8940557` "사용자 관리 복구 영구삭제 기능 추가"
---
## 2025-11-24 (일) - 메뉴 관리 기능 개선
### 주요 작업
- 메뉴 트리 구조 완전 구현 (무제한 depth)
- 접기/펼치기 기능 (재귀적 처리)
- 활성/숨김 상태 토글 (실시간 업데이트)
- 테넌트 필터링 (마스터 메뉴 지원)
### 추가된 파일:
- `app/Services/MenuService.php` - 메뉴 비즈니스 로직 (트리 구조)
- `app/Http/Controllers/MenuController.php` - Blade 화면 컨트롤러
- `app/Http/Controllers/Api/Admin/MenuController.php` - HTMX API 컨트롤러
- `app/Http/Requests/StoreMenuRequest.php` - 메뉴 생성 검증
- `app/Http/Requests/UpdateMenuRequest.php` - 메뉴 수정 검증
- `resources/views/menus/index.blade.php` - 메뉴 목록 (트리 구조)
- `resources/views/menus/create.blade.php` - 메뉴 생성
- `resources/views/menus/edit.blade.php` - 메뉴 수정
- `resources/views/menus/partials/table.blade.php` - 메뉴 트리 테이블
### 수정된 파일:
- `routes/web.php` - 메뉴 관리 라우트 추가
- `routes/api.php` - 메뉴 관리 API 라우트 추가 (tree, toggleActive, toggleHidden)
### 기능 상세:
**트리 구조:**
- 무제한 depth 지원
- 재귀적 렌더링 (Blade recursive include)
- 인덴트로 계층 표시
- 접기/펼치기 아이콘
**MenuService 주요 메서드:**
- `getMenus(filters)`: 메뉴 목록 (flat)
- `getMenuTree(filters)`: 트리 구조 메뉴 (재귀 쿼리)
- `createMenu(data)`: 메뉴 생성
- `updateMenu(id, data)`: 메뉴 수정
- `deleteMenu(id)`: 메뉴 삭제 (하위 메뉴 체크)
- `toggleActive(id)`: 활성 상태 토글
- `toggleHidden(id)`: 숨김 상태 토글
**토글 기능:**
- 활성/비활성: `is_active` 토글
- 숨김/표시: `is_hidden` 토글
- HTMX 실시간 업데이트 (페이지 새로고침 없음)
**테넌트 필터링:**
- 전체 선택: 마스터 메뉴만 표시 (`tenant_id IS NULL`)
- 특정 테넌트: 해당 테넌트 메뉴만
- 외부 메뉴 표시: `external_link` 컬럼
### Git 커밋:
- `79aebfa` "메뉴 관리 기능 개선"
---
## 📊 Phase 4 완료 요약 (2025-11-24)
### 구현된 모든 관리 기능:
** Phase 4-1: 테넌트 관리**
- CRUD, 복구/영구삭제, 페이지네이션
- 커밋: 575e9df, 0f21445, bc3777a
** Phase 4-2: 역할 관리**
- CRUD, 권한 할당/해제, Spatie Permission 통합
- 커밋: 5f50716
** Phase 4-3: 부서 관리**
- CRUD, 계층 구조, 활성 상태 관리
- 커밋: 6738505
** Phase 4-4: 사용자 관리**
- CRUD, 복구/영구삭제, 역할/부서 연결
- 커밋: 0c86b39, 8940557
** Phase 4-5: 메뉴 관리**
- CRUD, 트리 구조, 토글 기능
- 커밋: 79aebfa
### 공통 컴포넌트:
- `partials/pagination.blade.php` - 재사용 가능 페이지네이션
- `partials/tenant-selector.blade.php` - 테넌트 선택기
- `partials/sidebar.blade.php` - 좌측 메뉴
- `partials/header.blade.php` - 상단 헤더
### 공통 패턴:
- Service-First 아키텍처
- FormRequest 검증
- HTMX + API 패턴
- Multi-tenant 필터링
- Soft Delete + 복구/영구삭제
- Audit 로그 (created_by, updated_by, deleted_by)
### 문서:
- `docs/MNG_CRITICAL_RULES.md` - 핵심 규칙
- `docs/TROUBLESHOOTING.md` - 트러블슈팅 가이드
- `docs/INDEX.md` - 문서 인덱스
### 통계:
- **추가 파일**: 60개 이상
- **추가 코드**: 5,000줄 이상
- **커밋 **: 12개
- **작업 기간**: 2025-11-24 하루
---
## 📋 다음 단계 (Phase 5 이후)
### Phase 5: 제품/자재 관리
- [ ] 제품 관리 (Products)
- [ ] 자재 관리 (Materials)
- [ ] 카테고리 관리 (Categories)
### Phase 6: BOM 관리
- [ ] BOM 구조 (Bill of Materials)
- [ ] BOM 버전 관리
- [ ] BOM 트리
### Phase 7: 시스템 관리
- [ ] 감사 로그 (Audit Logs)
- [ ] 시스템 설정 (Settings)
- [ ] 알림 관리 (Notifications)
---
**최종 업데이트**: 2025-11-24 22:30
**현재 Phase**: Phase 4 완료, Phase 5 준비
**다음 작업**: 제품 관리 시스템 구현

View File

@@ -54,26 +54,41 @@ ### 현재 진행 상황
-**Phase 1**: 인증 시스템 (AuthService, LoginController, User 모델)
-**Phase 2**: 레이아웃 구조 (sidebar + header, Pure Tailwind)
-**Phase 3**: 테넌트 선택 기능 (TenantController, ViewServiceProvider)
-**Phase 4**: 시스템 관리 메뉴 완성 (2025-11-24)
- ✅ Phase 4-1: 테넌트 관리 (CRUD, 복구/영구삭제)
- ✅ Phase 4-2: 역할 관리 (CRUD, 권한 할당, Spatie Permission)
- ✅ Phase 4-3: 부서 관리 (CRUD, 계층 구조)
- ✅ Phase 4-4: 사용자 관리 (CRUD, 복구/영구삭제)
- ✅ Phase 4-5: 메뉴 관리 (CRUD, 트리 구조, 토글)
**진행 중 Phase:**
- 🔄 **Phase 4**: 시스템 관리 메뉴 (admin/ Filament 기능 이식)
- 테넌트 관리
- 사용자 관리
- 메뉴 관리
- 역할/부서/권한 관리
**계획된 Phase:**
-**Phase 5**: 제품/자재 관리
-**Phase 6**: BOM/카테고리 관리
**다음 Phase:**
- 🎯 **Phase 5**: 제품/자재 관리
- [ ] 제품 관리 (Products)
- [ ] 자재 관리 (Materials)
- [ ] 카테고리 관리 (Categories)
- **Phase 6**: BOM 관리
- [ ] BOM 구조 (Bill of Materials)
- [ ] BOM 버전 관리
-**Phase 7**: 시스템 관리
- [ ] 감사 로그 (Audit Logs)
- [ ] 시스템 설정 (Settings)
### 프로젝트 문서
**MNG 프로젝트:**
- **[🚨 MNG_CRITICAL_RULES.md](./MNG_CRITICAL_RULES.md)** - 절대 위반 금지 규칙 (필독!)
- **[CURRENT_WORKS.md](../CURRENT_WORKS.md)** - 현재 작업 진행 상황
- **[TROUBLESHOOTING.md](./TROUBLESHOOTING.md)** - 트러블슈팅 가이드
- **[MIGRATION_PLAN.md](./MIGRATION_PLAN.md)** - Admin → MNG 마이그레이션 계획 (Phase 4)
- **[claudedocs/mng/MNG_PROJECT_PLAN.md](../../claudedocs/mng/MNG_PROJECT_PLAN.md)** - 전체 프로젝트 계획
- **[claudedocs/mng/DEV_PROCESS.md](../../claudedocs/mng/DEV_PROCESS.md)** - 개발 프로세스 (HTMX + API 방식)
- **[claudedocs/mng/SETUP_GUIDE.md](../../claudedocs/mng/SETUP_GUIDE.md)** - 초기 설정 가이드
**SAM 공통 문서:**
- **[📊 ../../docs/specs/database-schema.md](../../docs/specs/database-schema.md)** - 데이터베이스 스키마 (Phase 4: 8개 테이블 상세)
- **[../../docs/INDEX.md](../../docs/INDEX.md)** - SAM 전체 문서 네비게이션
- **[../../docs/reference/architecture.md](../../docs/reference/architecture.md)** - SAM 아키텍처
---
## 🏗️ 아키텍처
@@ -246,9 +261,19 @@ ## 📝 작업 이력
**2025-11-21 (목)**
- 문서 체계화 (INDEX.md 작성)
- 공통 문서 업데이트 (CLAUDE.md, docs/INDEX.md, architecture.md)
- Phase 4-1: 테넌트 관리 백엔드/프론트엔드 구현
**2025-11-24 (일)**
- Phase 4-2: 역할 관리 시스템 구현 (Spatie Permission 통합)
- Phase 4-3: 부서 관리 시스템 구현 (계층 구조)
- Phase 4-4: 사용자 관리 기능 추가 (복구/영구삭제)
- Phase 4-5: 메뉴 관리 기능 개선 (트리 구조, 토글)
- 공통 컴포넌트: 페이지네이션, 테넌트 선택기
- 문서: MNG_CRITICAL_RULES.md, TROUBLESHOOTING.md 추가
- **Phase 4 완료**: 시스템 관리 메뉴 5개 완성 (60+ 파일, 5,000+ 줄)
---
**최종 업데이트**: 2025-11-21
**버전**: 1.0
**상태**: Phase 3 완료, Phase 4 준비 중
**최종 업데이트**: 2025-11-24
**버전**: 2.0
**상태**: Phase 4 완료, Phase 5 준비 중

View File

@@ -64,6 +64,17 @@ class="flex items-center gap-3 px-4 py-3 rounded-lg text-gray-700 hover:bg-gray-
</a>
</li>
<!-- 메뉴 관리 -->
<li>
<a href="{{ route('menus.index') }}"
class="flex items-center gap-3 px-4 py-3 rounded-lg text-gray-700 hover:bg-gray-100 {{ request()->routeIs('menus.*') ? 'bg-primary text-white hover:bg-primary' : '' }}">
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16" />
</svg>
<span class="font-medium">메뉴 관리</span>
</a>
</li>
<!-- 구분선 -->
<li class="py-2">
<div class="border-t border-gray-200"></div>