212 lines
4.2 KiB
Markdown
212 lines
4.2 KiB
Markdown
# API 엔드포인트 문서
|
|
|
|
이 문서는 데이터베이스에 데이터를 생성하는 API 엔드포인트를 설명합니다.
|
|
|
|
## 📋 API 목록
|
|
|
|
### 1. 사용자 API (`/api/users`)
|
|
|
|
#### POST - 사용자 생성
|
|
```bash
|
|
POST /api/users
|
|
Content-Type: application/json
|
|
|
|
{
|
|
"email": "user@example.com",
|
|
"password": "hashed_password",
|
|
"name": "홍길동",
|
|
"phone": "010-1234-5678",
|
|
"gender": "M",
|
|
"birthdate": "1990-01-01",
|
|
"role": "LEARNER", // 또는 "ADMIN"
|
|
"status": "ACTIVE" // 또는 "INACTIVE"
|
|
}
|
|
```
|
|
|
|
**응답:**
|
|
```json
|
|
{
|
|
"message": "사용자가 성공적으로 생성되었습니다.",
|
|
"user": {
|
|
"id": "uuid",
|
|
"email": "user@example.com",
|
|
"name": "홍길동",
|
|
...
|
|
}
|
|
}
|
|
```
|
|
|
|
#### GET - 사용자 목록 조회
|
|
```bash
|
|
GET /api/users?role=LEARNER&status=ACTIVE&page=1&limit=10
|
|
```
|
|
|
|
**쿼리 파라미터:**
|
|
- `role`: 필터링할 역할 (LEARNER, ADMIN)
|
|
- `status`: 필터링할 상태 (ACTIVE, INACTIVE)
|
|
- `page`: 페이지 번호 (기본값: 1)
|
|
- `limit`: 페이지당 항목 수 (기본값: 10)
|
|
|
|
---
|
|
|
|
### 2. 교육과정 API (`/api/courses`)
|
|
|
|
#### POST - 교육과정 생성
|
|
```bash
|
|
POST /api/courses
|
|
Content-Type: application/json
|
|
|
|
{
|
|
"courseName": "웹 개발 기초",
|
|
"instructorId": "instructor_uuid",
|
|
"createdById": "admin_uuid" // 선택사항, 기본값: instructorId
|
|
}
|
|
```
|
|
|
|
**응답:**
|
|
```json
|
|
{
|
|
"message": "교육과정이 성공적으로 생성되었습니다.",
|
|
"course": {
|
|
"id": "uuid",
|
|
"courseName": "웹 개발 기초",
|
|
"instructor": { ... },
|
|
"createdBy": { ... }
|
|
}
|
|
}
|
|
```
|
|
|
|
#### GET - 교육과정 목록 조회
|
|
```bash
|
|
GET /api/courses?instructorId=uuid&page=1&limit=10
|
|
```
|
|
|
|
---
|
|
|
|
### 3. 강좌 API (`/api/lessons`)
|
|
|
|
#### POST - 강좌 생성
|
|
```bash
|
|
POST /api/lessons
|
|
Content-Type: application/json
|
|
|
|
{
|
|
"courseId": "course_uuid",
|
|
"lessonName": "HTML 기초",
|
|
"learningGoal": "HTML의 기본 문법을 이해하고 활용할 수 있다.",
|
|
"createdById": "admin_uuid" // 선택사항
|
|
}
|
|
```
|
|
|
|
**응답:**
|
|
```json
|
|
{
|
|
"message": "강좌가 성공적으로 생성되었습니다.",
|
|
"lesson": {
|
|
"id": "uuid",
|
|
"lessonName": "HTML 기초",
|
|
"course": { ... },
|
|
"createdBy": { ... }
|
|
}
|
|
}
|
|
```
|
|
|
|
#### GET - 강좌 목록 조회
|
|
```bash
|
|
GET /api/lessons?courseId=uuid&page=1&limit=10
|
|
```
|
|
|
|
---
|
|
|
|
### 4. 공지사항 API (`/api/notices`)
|
|
|
|
#### POST - 공지사항 생성
|
|
```bash
|
|
POST /api/notices
|
|
Content-Type: application/json
|
|
|
|
{
|
|
"title": "공지사항 제목",
|
|
"content": "공지사항 내용",
|
|
"writerId": "admin_uuid",
|
|
"hasAttachment": false // 선택사항
|
|
}
|
|
```
|
|
|
|
**응답:**
|
|
```json
|
|
{
|
|
"message": "공지사항이 성공적으로 생성되었습니다.",
|
|
"notice": {
|
|
"id": "uuid",
|
|
"title": "공지사항 제목",
|
|
"content": "공지사항 내용",
|
|
"writer": { ... }
|
|
}
|
|
}
|
|
```
|
|
|
|
#### GET - 공지사항 목록 조회
|
|
```bash
|
|
GET /api/notices?writerId=uuid&page=1&limit=10
|
|
```
|
|
|
|
---
|
|
|
|
## 🔧 사용 예시
|
|
|
|
### JavaScript/TypeScript (fetch)
|
|
|
|
```typescript
|
|
// 사용자 생성
|
|
const response = await fetch('/api/users', {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
},
|
|
body: JSON.stringify({
|
|
email: 'user@example.com',
|
|
password: 'hashed_password',
|
|
name: '홍길동',
|
|
role: 'LEARNER',
|
|
}),
|
|
});
|
|
|
|
const data = await response.json();
|
|
console.log(data);
|
|
```
|
|
|
|
### cURL
|
|
|
|
```bash
|
|
# 사용자 생성
|
|
curl -X POST http://localhost:3000/api/users \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"email": "user@example.com",
|
|
"password": "hashed_password",
|
|
"name": "홍길동",
|
|
"role": "LEARNER"
|
|
}'
|
|
```
|
|
|
|
---
|
|
|
|
## ⚠️ 주의사항
|
|
|
|
1. **비밀번호 해시화**: 실제 프로덕션에서는 비밀번호를 해시화하여 저장해야 합니다.
|
|
2. **인증/인가**: 현재 API는 인증이 없습니다. 프로덕션에서는 JWT나 세션 기반 인증을 추가해야 합니다.
|
|
3. **에러 처리**: 모든 API는 적절한 에러 응답을 반환합니다.
|
|
4. **데이터 검증**: 필수 필드 검증이 포함되어 있습니다.
|
|
|
|
---
|
|
|
|
## 📝 다음 단계
|
|
|
|
- [ ] 인증 미들웨어 추가
|
|
- [ ] 비밀번호 해시화 로직 추가
|
|
- [ ] 파일 업로드 API 추가 (공지사항 첨부파일 등)
|
|
- [ ] 수정/삭제 API 추가
|
|
- [ ] 상세 조회 API 추가
|
|
|