# 프로젝트 진행 관리 시스템 (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): 프로젝트 진행 관리 시스템 구현