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:
2026-09-18 23:47:42 +09:00
parent f31204e9b9
commit 85c7333e72
7 changed files with 445 additions and 171 deletions
+8
View File
@@ -402,6 +402,14 @@ def list_variants(client: Cafe24Client, product_no: int) -> list[dict[str, Any]]
return variants if isinstance(variants, list) else []
def delete_variant(client: Cafe24Client, product_no: int, variant_code: str) -> dict[str, Any]:
"""품목 1건 삭제 — DELETE /admin/products/{no}/variants/{code} (문서에 있는 유일한
품목 제거 수단). 옵션값 자체는 남을 수 있다(품목 없는 옵션값)."""
no = int(product_no)
code = str(variant_code or "").strip().upper()
return client.delete(f"/admin/products/{no}/variants/{code}", product_no=no)
def wait_for_variants(
client: Cafe24Client,
product_no: int,