Files
M-Project/API_DOCUMENTATION.md
hyungi b024a178d0 feat: 목록 관리 및 보고서 페이지 개선
- 목록 관리 페이지에 고급 필터링 시스템 추가
  - 프로젝트별, 검토상태별, 날짜별 필터링
  - 검토 완료/필요 항목 시각적 구분 및 정렬
  - 해결 시간 입력 + 확인 버튼으로 검토 완료 처리

- 부적합 조회 페이지에 동일한 필터링 기능 적용
  - 검토 상태에 따른 카드 스타일링 (음영 처리)
  - JavaScript 템플릿 리터럴 오류 수정

- 보고서 페이지 프로젝트별 분석 기능 추가
  - 프로젝트 선택 드롭다운 추가
  - 총 작업 공수를 프로젝트별 일일공수 데이터로 계산
  - 부적합 처리 시간, 카테고리 분석, 상세 목록 모두 프로젝트별 필터링
  - localStorage 키 이름 통일 (daily-work-data)
2025-10-24 10:13:32 +09:00

403 lines
7.2 KiB
Markdown

# M-Project API 문서
## 개요
작업보고서 시스템의 FastAPI 백엔드 API 엔드포인트 문서
**Base URL:** `http://localhost:16000`
---
## 인증 (Authentication)
### JWT 토큰 기반 인증
- **토큰 타입:** Bearer Token
- **만료 시간:** 7일 (10080분)
- **헤더:** `Authorization: Bearer <token>`
---
## API 엔드포인트
### 🔐 인증 관련 API (`/api/auth`)
#### 1. 로그인
```http
POST /api/auth/login
Content-Type: application/x-www-form-urlencoded
username=hyungi&password=djg3-jj34-X3Q3
```
**응답:**
```json
{
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
"token_type": "bearer",
"user": {
"id": 1,
"username": "hyungi",
"full_name": "관리자",
"role": "admin",
"is_active": true,
"created_at": "2024-01-01T00:00:00"
}
}
```
#### 2. 현재 사용자 정보
```http
GET /api/auth/me
Authorization: Bearer <token>
```
#### 3. 사용자 생성 (관리자만)
```http
POST /api/auth/users
Authorization: Bearer <token>
Content-Type: application/json
{
"username": "user1",
"password": "password123",
"full_name": "1",
"role": "user"
}
```
#### 4. 사용자 목록 조회 (관리자만)
```http
GET /api/auth/users?skip=0&limit=100
Authorization: Bearer <token>
```
#### 5. 사용자 수정 (관리자만)
```http
PUT /api/auth/users/{user_id}
Authorization: Bearer <token>
Content-Type: application/json
{
"full_name": " ",
"role": "admin"
}
```
#### 6. 사용자 삭제 (관리자만)
```http
DELETE /api/auth/users/{username}
Authorization: Bearer <token>
```
#### 7. 비밀번호 변경
```http
POST /api/auth/change-password
Authorization: Bearer <token>
Content-Type: application/json
{
"current_password": "old_password",
"new_password": "new_password"
}
```
---
### 📁 프로젝트 관리 API (`/api/projects`)
#### 1. 프로젝트 생성 (관리자만)
```http
POST /api/projects
Authorization: Bearer <token>
Content-Type: application/json
{
"job_no": "JOB-2024-001",
"project_name": " "
}
```
**응답:**
```json
{
"id": 1,
"job_no": "JOB-2024-001",
"project_name": "신규 프로젝트",
"created_by_id": 1,
"created_by": {
"id": 1,
"username": "hyungi",
"full_name": "관리자",
"role": "admin"
},
"created_at": "2024-01-01T00:00:00",
"is_active": true
}
```
#### 2. 프로젝트 목록 조회
```http
GET /api/projects?skip=0&limit=100&active_only=true
Authorization: Bearer <token>
```
#### 3. 특정 프로젝트 조회
```http
GET /api/projects/{project_id}
Authorization: Bearer <token>
```
#### 4. 프로젝트 수정 (관리자만)
```http
PUT /api/projects/{project_id}
Authorization: Bearer <token>
Content-Type: application/json
{
"project_name": " ",
"is_active": true
}
```
#### 5. 프로젝트 삭제 (관리자만)
```http
DELETE /api/projects/{project_id}
Authorization: Bearer <token>
```
---
### 🚨 부적합 사항 API (`/api/issues`)
#### 1. 부적합 사항 생성
```http
POST /api/issues
Authorization: Bearer <token>
Content-Type: application/json
{
"category": "material_missing",
"description": " ",
"photo": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQ...",
"photo2": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQ..."
}
```
**카테고리 값:**
- `material_missing`: 자재누락
- `design_error`: 설계미스
- `incoming_defect`: 입고자재 불량
- `inspection_miss`: 검사미스
#### 2. 부적합 사항 목록 조회
```http
GET /api/issues?skip=0&limit=100
Authorization: Bearer <token>
```
#### 3. 특정 부적합 사항 조회
```http
GET /api/issues/{issue_id}
Authorization: Bearer <token>
```
#### 4. 부적합 사항 수정
```http
PUT /api/issues/{issue_id}
Authorization: Bearer <token>
Content-Type: application/json
{
"category": "design_error",
"description": " ",
"work_hours": 2.5,
"status": "complete",
"detail_notes": " "
}
```
**상태 값:**
- `new`: 신규
- `progress`: 진행중
- `complete`: 완료
#### 5. 부적합 사항 삭제
```http
DELETE /api/issues/{issue_id}
Authorization: Bearer <token>
```
---
### 📊 일일 공수 API (`/api/daily-work`)
#### 1. 일일 공수 생성
```http
POST /api/daily-work
Authorization: Bearer <token>
Content-Type: application/json
{
"date": "2024-01-01T00:00:00",
"worker_count": 10,
"overtime_workers": 3,
"overtime_hours": 4.0
}
```
#### 2. 일일 공수 목록 조회
```http
GET /api/daily-work?skip=0&limit=100
Authorization: Bearer <token>
```
#### 3. 특정 일일 공수 조회
```http
GET /api/daily-work/{work_id}
Authorization: Bearer <token>
```
#### 4. 일일 공수 수정
```http
PUT /api/daily-work/{work_id}
Authorization: Bearer <token>
Content-Type: application/json
{
"worker_count": 12,
"overtime_workers": 5,
"overtime_hours": 6.0
}
```
#### 5. 일일 공수 삭제
```http
DELETE /api/daily-work/{work_id}
Authorization: Bearer <token>
```
---
### 📈 보고서 API (`/api/reports`)
#### 1. 보고서 생성
```http
POST /api/reports/generate
Authorization: Bearer <token>
Content-Type: application/json
{
"start_date": "2024-01-01T00:00:00",
"end_date": "2024-01-31T23:59:59"
}
```
**응답:**
```json
{
"start_date": "2024-01-01T00:00:00",
"end_date": "2024-01-31T23:59:59",
"total_hours": 156.5,
"total_issues": 25,
"category_stats": {
"material_missing": 10,
"dimension_defect": 8,
"incoming_defect": 7
},
"completed_issues": 20,
"average_resolution_time": 2.3
}
```
---
## 헬스체크
### 서버 상태 확인
```http
GET /api/health
```
**응답:**
```json
{
"status": "healthy"
}
```
---
## 에러 응답 형식
### 인증 오류 (401)
```json
{
"detail": "Could not validate credentials"
}
```
### 권한 오류 (403)
```json
{
"detail": "관리자 권한이 필요합니다."
}
```
### 리소스 없음 (404)
```json
{
"detail": "프로젝트를 찾을 수 없습니다."
}
```
### 유효성 검사 오류 (422)
```json
{
"detail": [
{
"loc": ["body", "job_no"],
"msg": "field required",
"type": "value_error.missing"
}
]
}
```
---
## 파일 업로드
### 이미지 업로드
- **형식:** Base64 인코딩된 이미지 데이터
- **지원 형식:** JPEG, PNG, GIF, WebP
- **최대 크기:** 10MB
- **저장 위치:** `/app/uploads/`
### Base64 형식 예시
```
data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAABAAEDASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAv/xAAUEAEAAAAAAAAAAAAAAAAAAAAA/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAX/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwCdABmX/9k=
```
---
## 개발 환경 설정
### 환경 변수
```env
DATABASE_URL=postgresql://mproject:mproject2024@db:5432/mproject
SECRET_KEY=your-secret-key-here-change-in-production
ALGORITHM=HS256
ACCESS_TOKEN_EXPIRE_MINUTES=10080
ADMIN_USERNAME=hyungi
ADMIN_PASSWORD=djg3-jj34-X3Q3
TZ=Asia/Seoul
```
### Docker 컨테이너 실행
```bash
docker-compose up -d
```
### API 문서 확인
- **Swagger UI:** http://localhost:16000/docs
- **ReDoc:** http://localhost:16000/redoc