광고연구소

집행 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
필드타입필수설명
userIdnumber
필수
유저 ID
titlestring-집행 제목 (없으면 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
필드타입필수설명
currentStepnumber (1~10)-현재 진행 중인 스텝 번호
statusstring-"DRAFT" | "IN_PROGRESS" | "COMPLETED"
titlestring-집행 제목
step2Payloadobject (JSON)-Step 2 집행 조건 전체
draftobject (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
파라미터
파라미터타입필수설명
userIdnumber
필수
유저 ID
statusstring-DRAFT / IN_PROGRESS / COMPLETED 필터
pagenumber-페이지 번호 (기본: 1)
limitnumber-페이지당 항목 수 (기본: 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/:idstep2Payload + currentStep=2
Step 3~9 진행PATCH /executions/:iddraft 업데이트 + currentStep 갱신
Step 10 완료PATCH /executions/:idstatus=COMPLETED, currentStep=10
마이페이지GET /executions목록 조회 (경량)
이어하기GET /executions/:id전체 데이터 복원
참고:프론트에서는 localStorage에 먼저 저장 후 1.5초 디바운스로 API를 호출합니다.