# 프로젝트 진행 관리 시스템 (PM) MNG 관리자 패널용 프로젝트/작업/이슈 관리 시스템 ## 개요 Notion 수동 관리를 대체하는 웹 기반 프로젝트 진행 관리 도구로, 클릭 한 번으로 상태 변경이 가능하고 대시보드에서 전체 진행률을 한눈에 파악할 수 있습니다. ## 데이터 구조 ``` Project (프로젝트) └── Task (작업) - 1:N └── Issue (이슈) - 1:N ``` ### 테이블 | 테이블명 | 설명 | |---------|------| | `admin_pm_projects` | 프로젝트 | | `admin_pm_tasks` | 작업 | | `admin_pm_issues` | 이슈 | > Migration은 `api/` 저장소에 위치 ## 상태값 ### 프로젝트 상태 | 값 | 라벨 | 색상 | |----|------|------| | `active` | 진행중 | green | | `completed` | 완료 | blue | | `on_hold` | 보류 | yellow | ### 작업 상태 | 값 | 라벨 | 색상 | |----|------|------| | `todo` | 예정 | gray | | `in_progress` | 진행중 | blue | | `done` | 완료 | green | ### 작업 우선순위 | 값 | 라벨 | 색상 | |----|------|------| | `low` | 낮음 | gray | | `medium` | 보통 | yellow | | `high` | 높음 | red | ### 이슈 타입 | 값 | 라벨 | |----|------| | `bug` | 버그 | | `feature` | 기능 | | `improvement` | 개선 | ### 이슈 상태 | 값 | 라벨 | |----|------| | `open` | 열림 | | `in_progress` | 진행중 | | `resolved` | 해결됨 | | `closed` | 닫힘 | ## 파일 구조 ``` app/ ├── Http/ │ ├── Controllers/ │ │ ├── ProjectManagementController.php # Web Controller (뷰 렌더링) │ │ └── Api/Admin/ProjectManagement/ │ │ ├── ProjectController.php # 프로젝트 API │ │ ├── TaskController.php # 작업 API │ │ ├── IssueController.php # 이슈 API │ │ └── ImportController.php # JSON Import API │ └── Requests/ProjectManagement/ │ ├── StoreProjectRequest.php │ ├── UpdateProjectRequest.php │ ├── StoreTaskRequest.php │ ├── UpdateTaskRequest.php │ ├── StoreIssueRequest.php │ ├── UpdateIssueRequest.php │ ├── BulkActionRequest.php │ └── ImportProjectRequest.php ├── Models/Admin/ │ ├── AdminPmProject.php │ ├── AdminPmTask.php │ └── AdminPmIssue.php └── Services/ProjectManagement/ ├── ProjectService.php ├── TaskService.php ├── IssueService.php └── ImportService.php resources/views/project-management/ ├── index.blade.php # 대시보드 ├── import.blade.php # JSON Import └── projects/ ├── index.blade.php # 프로젝트 목록 ├── create.blade.php # 프로젝트 생성 ├── edit.blade.php # 프로젝트 수정 ├── show.blade.php # 프로젝트 상세 (작업/이슈 포함) └── partials/ └── table.blade.php # HTMX 테이블 파셜 ``` ## API 엔드포인트 ### 프로젝트 API (`/api/admin/pm/projects`) | Method | URI | Name | 설명 | |--------|-----|------|------| | GET | `/` | index | 목록 조회 | | POST | `/` | store | 생성 | | GET | `/{id}` | show | 상세 조회 | | PUT | `/{id}` | update | 수정 | | DELETE | `/{id}` | destroy | 삭제 (soft) | | POST | `/{id}/restore` | restore | 복원 | | DELETE | `/{id}/force` | forceDestroy | 영구 삭제 | | POST | `/{id}/status` | changeStatus | 상태 변경 | | POST | `/{id}/duplicate` | duplicate | 복제 | | GET | `/stats` | stats | 통계 | | GET | `/dashboard` | dashboard | 대시보드 요약 | | GET | `/dropdown` | dropdown | 드롭다운용 목록 | ### 작업 API (`/api/admin/pm/tasks`) | Method | URI | Name | 설명 | |--------|-----|------|------| | GET | `/` | index | 목록 조회 | | POST | `/` | store | 생성 | | GET | `/{id}` | show | 상세 조회 | | PUT | `/{id}` | update | 수정 | | DELETE | `/{id}` | destroy | 삭제 | | POST | `/{id}/status` | changeStatus | 상태 변경 | | GET | `/project/{projectId}` | byProject | 프로젝트별 조회 | | POST | `/project/{projectId}/reorder` | reorder | 순서 변경 | | GET | `/project/{projectId}/stats` | stats | 프로젝트별 통계 | | GET | `/urgent` | urgent | 긴급 작업 목록 | | POST | `/bulk` | bulk | 일괄 작업 | ### 이슈 API (`/api/admin/pm/issues`) | Method | URI | Name | 설명 | |--------|-----|------|------| | GET | `/` | index | 목록 조회 | | POST | `/` | store | 생성 | | GET | `/{id}` | show | 상세 조회 | | PUT | `/{id}` | update | 수정 | | DELETE | `/{id}` | destroy | 삭제 | | POST | `/{id}/status` | changeStatus | 상태 변경 | | GET | `/project/{projectId}` | byProject | 프로젝트별 조회 | | GET | `/task/{taskId}` | byTask | 작업별 조회 | | GET | `/stats` | stats | 통계 | | GET | `/open` | open | 열린 이슈 목록 | | POST | `/bulk` | bulk | 일괄 작업 | ### Import API (`/api/admin/pm/import`) | Method | URI | Name | 설명 | |--------|-----|------|------| | GET | `/template` | template | 샘플 JSON 템플릿 | | POST | `/validate` | validate | JSON 구조 검증 | | POST | `/` | import | 새 프로젝트 Import | | POST | `/project/{id}/tasks` | importTasks | 기존 프로젝트에 작업 추가 | ## Web 라우트 | URI | Name | 설명 | |-----|------|------| | `/project-management` | pm.index | 대시보드 | | `/project-management/projects` | pm.projects.index | 프로젝트 목록 | | `/project-management/projects/create` | pm.projects.create | 프로젝트 생성 | | `/project-management/projects/{id}` | pm.projects.show | 프로젝트 상세 | | `/project-management/projects/{id}/edit` | pm.projects.edit | 프로젝트 수정 | | `/project-management/import` | pm.import | JSON Import | ## JSON Import 기능 ### JSON 포맷 (새 프로젝트) ```json { "project": { "name": "프로젝트명 (필수)", "description": "프로젝트 설명", "status": "active", "start_date": "2025-01-01", "end_date": "2025-03-31" }, "tasks": [ { "title": "작업 제목 (필수)", "description": "작업 설명", "status": "todo", "priority": "high", "due_date": "2025-01-15", "issues": [ { "title": "이슈 제목 (필수)", "description": "이슈 설명", "type": "bug", "status": "open" } ] } ] } ``` ### JSON 포맷 (기존 프로젝트에 작업 추가) ```json { "tasks": [ { "title": "추가할 작업", "priority": "medium", "issues": [...] } ] } ``` ## 사용 예시 ### 프로젝트 생성 ```bash curl -X POST /api/admin/pm/projects \ -H "Content-Type: application/json" \ -d '{ "name": "SAM MES 개발", "description": "MES 시스템 개발 프로젝트", "status": "active", "start_date": "2025-01-01" }' ``` ### 작업 상태 변경 ```bash curl -X POST /api/admin/pm/tasks/1/status \ -H "Content-Type: application/json" \ -d '{"status": "in_progress"}' ``` ### 작업 순서 변경 ```bash curl -X POST /api/admin/pm/tasks/project/1/reorder \ -H "Content-Type: application/json" \ -d '{"task_ids": [3, 1, 2]}' ``` ### JSON Import ```bash curl -X POST /api/admin/pm/import \ -H "Content-Type: application/json" \ -d @project.json ``` ## 대시보드 요약 API 응답 ```json { "success": true, "data": { "projects": { "total": 5, "active": 3, "completed": 1, "on_hold": 1 }, "tasks": { "total": 25, "todo": 10, "in_progress": 8, "done": 7, "overdue": 2 }, "issues": { "total": 15, "open": 5, "in_progress": 3, "resolved": 4, "closed": 3 }, "recent_projects": [...], "urgent_tasks": [...] } } ``` ## 관련 커밋 - `603062e` - feat(pm): 프로젝트 진행 관리 시스템 구현