feat(cafe24): 품목 추가·삭제 + 옵션 재생성
- 추가(「+ 행 추가」/불러오기의 새 이름): 저장 시 옵션값을 끝에 덧붙여
PUT options(allow_append — 앞 위치는 그대로라 기존 이름이 밀리지 않음).
카페24가 품목을 자동 생성하면 wait_for_variants 로 새 코드를 받아
자체코드·추가금액·진열/판매를 이어서 PUT. 거부 시 오류 그대로 표시.
- 삭제(행 ✕): DELETE /variants/{code}. 지연 중 GET 에 남는 삭제 품목은
스냅샷 {"_deleted": true} 로 걸러냄. 품목 없는 옵션값은 하단 안내로 분리.
- 옵션값 줄이기(개수 감소)는 서버가 거부 — 위치 짝맞춤으로 이름이 밀림.
- 옵션 재생성: 전체 삭제 → 현재 행으로 생성 → 코드/금액/썸네일 재반영
(품목코드 새로 부여, 강한 확인창).
- 유닛 91 통과, 통합 하네스(덧붙이기·삭제·지연 필터) 통과, 헤드리스 렌더 확인.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
+18
-4
@@ -67,10 +67,11 @@ app/modules/cafe24/ ← 상품관리 모듈
|
||||
| `POST /cafe24/products/{product_no}/image` | 대표 이미지 교체 (multipart `file`) — 업로드 후 PUT `detail_image` + `image_upload_type=A`. 감사로그 `set_main_image` | `cafe24` |
|
||||
| `GET /cafe24/products/{product_no}/options` | 옵션 + 품목 조회 (JSON, 읽기 지연 보정 포함) | `cafe24` |
|
||||
| `POST /cafe24/products/{product_no}/options` | 옵션 생성 (`{option_name, values, display_type}`) — 조합형, 품목 자동 생성 | `cafe24` |
|
||||
| `PUT /cafe24/products/{product_no}/options` | 옵션명·옵션값 이름/썸네일/표시방식 수정 (`{options:[...], option_list_type}`) | `cafe24` |
|
||||
| `PUT /cafe24/products/{product_no}/options` | 옵션명·옵션값 이름/썸네일/표시방식 수정 + 옵션값 끝에 덧붙이기 (`{options:[...], option_list_type}` → 덧붙였으면 `added` 와 새 품목 포함) | `cafe24` |
|
||||
| `DELETE /cafe24/products/{product_no}/options` | 옵션 삭제 — **품목도 함께 삭제**(화면 확인창) | `cafe24` |
|
||||
| `POST /cafe24/products/{product_no}/options/image` | 옵션값 썸네일 업로드만 (multipart → `{path}`) | `cafe24` |
|
||||
| `PUT /cafe24/products/{product_no}/variants` | 품목 자체코드·추가금액·진열·판매 일괄 수정 (`{rows:[...]}`, 바뀐 행만) | `cafe24` |
|
||||
| `PUT /cafe24/products/{product_no}/variants` | 품목 자체코드·추가금액·진열·판매·진열순서 일괄 수정 (`{rows:[...]}`, 바뀐 행만) | `cafe24` |
|
||||
| `DELETE /cafe24/products/{product_no}/variants/{variant_code}` | 품목 1건 삭제. 감사로그 `delete_variant` | `cafe24` |
|
||||
| `GET /cafe24/schedules` | 예약 목록 · 취소 | `cafe24` |
|
||||
| `POST /cafe24/schedules` | 예약 등록 (편집기에서) | `cafe24` |
|
||||
| `POST /cafe24/schedules/{id}/cancel` | 대기 중 예약 취소 | `cafe24` |
|
||||
@@ -479,8 +480,21 @@ cafe24_oauth_tokens 저장
|
||||
돌려주는 순서를 따른다.
|
||||
- **옵션값 불러오기**: 텍스트(탭 또는 두 칸 이상 공백 구분 — 이름 · 판매가 · 추가금액 ·
|
||||
자체코드, 판매가는 무시, 추가금액 「-」는 0)를 붙여넣어 행에 채운다. 옵션이 있는 상품은
|
||||
이름(공백 무시)으로 짝을 찾아 자체코드/추가금액만 채우고, 없는 이름은 건너뛴다(옵션값
|
||||
추가는 API 미지원). 카페24 관리자에서 "옵션 연결 이미지"로만
|
||||
이름(공백 무시)으로 짝을 찾아 자체코드/추가금액만 채우고, 없는 이름은 새 행으로 추가한다.
|
||||
- **품목 추가**(「+ 행 추가」): 저장 시 옵션값을 **끝에 덧붙여** PUT options 한다
|
||||
(`build_update_options_request(allow_append=True)`). 앞쪽 위치는 그대로라 기존 이름이
|
||||
밀리지 않는다. 카페24가 받아들이면 품목을 자동 생성하므로 `wait_for_variants` 로 새
|
||||
코드를 받아 자체코드·추가금액·진열/판매를 이어서 PUT 한다. 거부하면 그 오류가 화면에 뜬다
|
||||
(문서상 "옵션 항목 추가/삭제 불가" 문구가 있어 실물 확인 필요 — 안 되면 아래 재생성).
|
||||
- **품목 삭제**(행의 ✕): `DELETE /admin/products/{no}/variants/{code}`(문서에 있는 유일한
|
||||
제거 수단). 옵션값 이름은 남을 수 있다 → 화면 하단 "품목이 없는 옵션값" 안내. 카페24 GET
|
||||
이 한동안 삭제된 품목을 계속 돌려주므로 스냅샷에 `{"_deleted": true}` 를 남겨 걸러낸다.
|
||||
옵션값 **줄이기**(개수 감소)는 서버가 거부한다 — 위치 짝맞춤으로 뒤 값들의 이름이
|
||||
엉뚱한 품목에 붙는다.
|
||||
- **옵션 재생성**: 옵션 전체 DELETE → 현재 행으로 POST(옵션값 순서 = 행 순서) → 새 품목코드
|
||||
받아 자체코드/추가금액/진열/판매 PUT → 썸네일 있으면 옵션 PUT. 품목 없는 옵션값 정리와
|
||||
"추가가 안 될 때"의 우회 수단. **품목코드가 전부 새로 부여**되고 재고가 초기화될 수 있어
|
||||
강한 확인창을 거친다. 카페24 관리자에서 "옵션 연결 이미지"로만
|
||||
등록한 상품은 `option_image_file` 이 비어 있고 품목 `image` 에만 나타난다(실물 —
|
||||
버튼 이미지만 보면 "없음"으로 오인했던 사고). 품목은 모달 오른쪽 열에 표(이미지 ·
|
||||
옵션 · 품목코드 · 자체코드 · 추가금액 · 진열 · 판매)로 그린다. "옵션별 상품코드/추가금액/진열" 은 품목
|
||||
|
||||
Reference in New Issue
Block a user