집행 CRUD
OnSureLab
집행건 생성, 조회, 수정, 삭제 API입니다.
데이터 모델
{
"id": "exec_abc123def4",
"userId": 1,
"title": "2024 혁신바우처 마케팅 실증 사업",
"currentStep": 4,
"status": "DRAFT", // "DRAFT" | "IN_PROGRESS" | "COMPLETED"
"step2Payload": { ... }, // Step 2 집행 조건 전체 (JSON)
"draft": { ... }, // Step 3~10 진행 데이터 (JSON)
"createdAt": "2025-01-15T09:00:00.000Z",
"updatedAt": "2025-01-15T09:30:00.000Z"
}POST
집행 생성
엔드포인트
POST /api/onsurelab/executions요청 Body
| 필드 | 타입 | 필수 | 설명 |
|---|---|---|---|
| userId | number | 필수 | 유저 ID |
| title | string | - | 집행 제목 (없으면 null) |
요청 예시
{
"userId": 1,
"title": "2024 혁신바우처 마케팅 실증 사업"
}성공 응답 (201)
{
"success": true,
"data": {
"id": "exec_abc123def4",
"userId": 1,
"title": "2024 혁신바우처 마케팅 실증 사업",
"currentStep": 1,
"status": "DRAFT",
"step2Payload": null,
"draft": {},
"createdAt": "2025-01-15T09:00:00.000Z",
"updatedAt": "2025-01-15T09:00:00.000Z"
},
"message": "집행 생성 성공"
}PATCH
집행 업데이트
스텝 진행마다 호출. 보낸 필드만 덮어씀 (부분 업데이트).
step2Payload, draft는 통째로 교체 (필드별 머지 X).
엔드포인트
PATCH /api/onsurelab/executions/:id요청 Body
| 필드 | 타입 | 필수 | 설명 |
|---|---|---|---|
| currentStep | number (1~10) | - | 현재 진행 중인 스텝 번호 |
| status | string | - | "DRAFT" | "IN_PROGRESS" | "COMPLETED" |
| title | string | - | 집행 제목 |
| step2Payload | object (JSON) | - | Step 2 집행 조건 전체 |
| draft | object (JSON) | - | Step 3~10 진행 데이터 |
요청 예시
{
"currentStep": 4,
"status": "IN_PROGRESS",
"step2Payload": {
"companyName": "(주)온슈어",
"govProjectName": "2024 혁신바우처 마케팅 실증 사업",
...
},
"draft": {
"selectedProduct": { ... },
"selectedPrice": { ... },
"step4Plan": { ... },
...
}
}성공 응답 (200)
{
"success": true,
"data": {
"id": "exec_abc123def4",
"userId": 1,
"title": "2024 혁신바우처 마케팅 실증 사업",
"currentStep": 4,
"status": "IN_PROGRESS",
"step2Payload": { ... },
"draft": { ... },
"createdAt": "2025-01-15T09:00:00.000Z",
"updatedAt": "2025-01-15T09:30:00.000Z"
},
"message": "집행 업데이트 성공"
}GET
집행 조회 (이어하기)
엔드포인트
GET /api/onsurelab/executions/:id성공 응답 (200)
{
"success": true,
"data": {
"id": "exec_abc123def4",
"userId": 1,
"title": "2024 혁신바우처 마케팅 실증 사업",
"currentStep": 4,
"status": "IN_PROGRESS",
"step2Payload": { ... },
"draft": { ... },
"createdAt": "2025-01-15T09:00:00.000Z",
"updatedAt": "2025-01-15T09:30:00.000Z"
}
}GET
집행 목록 조회
목록에서는 step2Payload, draft 제외 (경량 응답).
엔드포인트
GET /api/onsurelab/executions파라미터
| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
| userId | number | 필수 | 유저 ID |
| status | string | - | DRAFT / IN_PROGRESS / COMPLETED 필터 |
| page | number | - | 페이지 번호 (기본: 1) |
| limit | number | - | 페이지당 항목 수 (기본: 20, 최대: 100) |
성공 응답 (200)
{
"success": true,
"data": {
"items": [
{
"id": "exec_abc123def4",
"title": "2024 혁신바우처 마케팅 실증 사업",
"currentStep": 4,
"status": "DRAFT",
"createdAt": "2025-01-15T09:00:00.000Z",
"updatedAt": "2025-01-15T09:30:00.000Z"
}
],
"total": 15,
"page": 1,
"limit": 20
}
}DELETE
집행 삭제
엔드포인트
DELETE /api/onsurelab/executions/:id성공 응답 (200)
{
"success": true,
"message": "집행 삭제 성공"
}API 호출 타이밍
| 시점 | API | 설명 |
|---|---|---|
| Step 2 제출 | POST /executions | 새 집행 생성, ID 발급 |
| Step 2 제출 직후 | PATCH /executions/:id | step2Payload + currentStep=2 |
| Step 3~9 진행 | PATCH /executions/:id | draft 업데이트 + currentStep 갱신 |
| Step 10 완료 | PATCH /executions/:id | status=COMPLETED, currentStep=10 |
| 마이페이지 | GET /executions | 목록 조회 (경량) |
| 이어하기 | GET /executions/:id | 전체 데이터 복원 |
참고:프론트에서는 localStorage에 먼저 저장 후 1.5초 디바운스로 API를 호출합니다.