docs(#3): OPENAPI duplicate SKU means exists in Woo, any status

Replace stale "already published" wording on 409 duplicate_sku.
This commit is contained in:
2026-09-02 00:26:46 +00:00
parent fe2dd3200b
commit fcad50d86e
+3 -3
View File
@@ -17,7 +17,7 @@ Uniform envelope:
- `400 validation` — payload failed validation. - `400 validation` — payload failed validation.
- `404 not_found` — unknown slab/photo/setting. - `404 not_found` — unknown slab/photo/setting.
- `409 revision_conflict` — client_rev/server_rev mismatch. `detail` carries `current_server_rev`. - `409 revision_conflict` — client_rev/server_rev mismatch. `detail` carries `current_server_rev`.
- `409 duplicate_sku` — SKU already published in WooCommerce. - `409 duplicate_sku` — SKU already exists in WooCommerce, any status (draft, private, publish, etc.).
- `422 unpublishable` — slab not in a publishable state or missing required field. - `422 unpublishable` — slab not in a publishable state or missing required field.
- `502 woo_error` — WooCommerce rejected the request. `detail` carries Woo error body. - `502 woo_error` — WooCommerce rejected the request. `detail` carries Woo error body.
- `500 internal` — unexpected. - `500 internal` — unexpected.
@@ -145,7 +145,7 @@ Sheet/slider prefs are client localStorage only in POC (not in SettingsView).
- `POST /api/v1/slabs` — Create a calibrated draft. Body: multipart with `data` (SlabCreate JSON) + `files[]` (photos) + `meta[]` (photo metadata). - `POST /api/v1/slabs` — Create a calibrated draft. Body: multipart with `data` (SlabCreate JSON) + `files[]` (photos) + `meta[]` (photo metadata).
- Returns `201` `Slab` with `status: "calibrated"` (mask + axis confirmed; client-sent sqft/bdft/widths stored). - Returns `201` `Slab` with `status: "calibrated"` (mask + axis confirmed; client-sent sqft/bdft/widths stored).
- Server auto-runs Call 1 **only if** `inference_enabled` is true. `inference_status` becomes `inferring`, then `done`/`failed`. - Server auto-runs Call 1 **only if** `inference_enabled` is true. `inference_status` becomes `inferring`, then `done`/`failed`.
- `409 duplicate_sku` if SKU already published. - `409 duplicate_sku` if SKU already exists in Woo, any status.
- `GET /api/v1/slabs` → `200` `[Slab]` (most recent first). - `GET /api/v1/slabs` → `200` `[Slab]` (most recent first).
- `GET /api/v1/slabs/{id}` → `200` `Slab` / `404`. - `GET /api/v1/slabs/{id}` → `200` `Slab` / `404`.
- Also used as the poll endpoint for inference and publish. Long-running ops set status to `inferring`/`publishing`; client backs off (1s, 2s, 4s, cap 10s). - Also used as the poll endpoint for inference and publish. Long-running ops set status to `inferring`/`publishing`; client backs off (1s, 2s, 4s, cap 10s).
@@ -183,7 +183,7 @@ Sheet/slider prefs are client localStorage only in POC (not in SettingsView).
### Publish ### Publish
- `POST /api/v1/slabs/{id}/publish` — Publish to WooCommerce. - `POST /api/v1/slabs/{id}/publish` — Publish to WooCommerce.
- Pre-conditions: status in `ready`, all required fields set. Else `422 unpublishable`. - Pre-conditions: status in `ready`, all required fields set. Else `422 unpublishable`.
- Dedupe: if SKU already has a published product → `409 duplicate_sku`. - Dedupe: if SKU already exists in Woo under any status → `409 duplicate_sku`.
- Returns `202` `{ "status": "publishing" }`. Client polls. - Returns `202` `{ "status": "publishing" }`. Client polls.
- Woo failure → slab `failed`, `sync_log` written, poll returns `502 woo_error`. - Woo failure → slab `failed`, `sync_log` written, poll returns `502 woo_error`.
- Success → slab `published`, `woo_product_id` set, images purged, draft row deleted. - Success → slab `published`, `woo_product_id` set, images purged, draft row deleted.