# 상품 (Products) API

## 엔드포인트 목록

| 메서드 | 경로 | 설명 |
|--------|------|------|
| GET | /openapi/v1/products | 상품 목록 조회 |
| GET | /openapi/v1/products/{productId} | 상품 상세 조회 |
| POST | /openapi/v1/products | 상품 생성 (AI 이미지 생성) |
| PATCH | /openapi/v1/products/{productId}/status | 상품 상태 변경 |

## GET /openapi/v1/products

워크스페이스의 상품 목록을 조회합니다.

### 파라미터

| 이름 | 위치 | 타입 | 필수 | 설명 |
|------|------|------|------|------|
| workspaceId | query | string | Y | 워크스페이스 ID |

### 응답 (200)

```json
{
  "data": {
    "products": [
      {
        "productId": "prod_001",
        "workspaceId": "ws_abc123",
        "projectId": "proj_001",
        "name": "화이트 오버핏 티셔츠",
        "titleImageId": "img_001",
        "status": "BEFORE_REVIEW",
        "categoryId": "TOP",
        "productType": "FASHION",
        "createdId": "user_001",
        "updatedId": "user_001",
        "createdAt": "2026-04-01T09:00:00Z",
        "updatedAt": "2026-04-01T10:30:00Z"
      }
    ]
  }
}
```

## GET /openapi/v1/products/{productId}

특정 상품의 상세 정보를 조회합니다.

### 파라미터

| 이름 | 위치 | 타입 | 필수 | 설명 |
|------|------|------|------|------|
| productId | path | string | Y | 상품 ID |

## POST /openapi/v1/products

의류 상품을 생성합니다. 이미지는 사전에 업로드 URL을 통해 업로드해야 합니다.

### 요청 본문

| 필드 | 타입 | 필수 | 설명 |
|------|------|------|------|
| workspaceId | string | Y | 워크스페이스 ID |
| products | ProductMetadata[] | Y | 상품 메타데이터 배열 (최소 1개) |

#### ProductMetadata

| 필드 | 타입 | 필수 | 설명 |
|------|------|------|------|
| category | string | Y | 카테고리 (아래 enum 참조) |
| images | string[] | Y | 이미지 ID 배열 (upload-url에서 받은 imageId) |
| projectId | string | Y | 프로젝트 ID (관리용) |
| productName | string | N | 상품명 |
| productNameKo | string | N | 상품명 (국문) |
| productNameEn | string | N | 상품명 (영문) |
| colors | string[] | Y | 색상 목록 |
| fabrics | string[] | Y | 소재 목록 |
| templateId | string | N | 사용할 템플릿 ID |
| additionalInfo | object | Y | 부가 정보 (features, laundryTips 필수. sizeName, sizeTables, manufactureDate, manufactureCountry, certificationNumber 포함 가능) |

#### category enum (28종)

`CLOTHING`, `OUTER`, `TOP`, `PANTS`, `SKIRT`, `DRESS`, `JUMPSUIT`, `BAG`, `SHOES`, `UNDERWEAR`, `SWIMWEAR`, `SOCKS`, `HAT`, `NECKWEAR`, `GLOVES`, `TOY`, `HAIR_ACCESSORY`, `BIB`, `WASHCLOTHS`, `NECK_PILLOWS`, `BELT`, `SET`, `JEWELRY`, `RING`, `NECKLACE`, `EARRING`, `BRACELET`, `ANKLET`

### 요청 예시

```json
{
  "workspaceId": "ws_abc123",
  "products": [
    {
      "category": "TOP",
      "images": ["img_001", "img_002"],
      "projectId": "proj_2026ss",
      "productName": "오버핏 코튼 티셔츠",
      "colors": ["화이트", "블랙"],
      "fabrics": ["면 100%"],
      "templateId": "tmpl_001",
      "additionalInfo": {
        "features": ["오버핏 실루엣", "드롭숄더"],
        "laundryTips": ["30도 이하 물세탁", "표백 불가"]
      }
    }
  ]
}
```

### 응답 (200)

```json
{
  "data": {
    "productIds": ["prod_new_001"]
  }
}
```

## PATCH /openapi/v1/products/{productId}/status

상품의 검수 상태를 변경합니다.

### 파라미터

| 이름 | 위치 | 타입 | 필수 | 설명 |
|------|------|------|------|------|
| productId | path | string | Y | 상품 ID |

### 요청 본문

| 필드 | 타입 | 필수 | 설명 |
|------|------|------|------|
| status | string | Y | `BEFORE_REVIEW`, `IN_REVIEW`, `REVIEW_COMPLETE` |

```bash
curl -X PATCH \
  -H "X-API-Key: YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"status": "REVIEW_COMPLETE"}' \
  https://openapi.gency.ai/openapi/v1/products/prod_001/status
```
