From 07206674c10db2dcd82a878fba164bd337cb0ed9 Mon Sep 17 00:00:00 2001 From: seb Date: Tue, 20 Oct 2026 23:25:47 +0200 Subject: [PATCH] u --- src/api/article.js | 19 +++++++++--------- src/automats/artikelAutomat.js | 35 +++++++++++++-------------------- src/automats/categoryAutomat.js | 9 +++++---- src/routes/lieferung/neu.jsx | 5 ++--- src/utils/importArtikel.js | 6 ++---- 5 files changed, 33 insertions(+), 41 deletions(-) diff --git a/src/api/article.js b/src/api/article.js index 36ecf5b..0ff82c0 100644 --- a/src/api/article.js +++ b/src/api/article.js @@ -59,7 +59,7 @@ export const article = { return http(`/api/article/${encodeURIComponent(sku)}/history${qs ? `?${qs}` : ''}`); }, - /** POST /api/article → 201 { article } */ + /** POST /api/article → 201 { sku } */ create({ categoryId, name, track_stock }) { return http('/api/article', { method: 'POST', @@ -75,7 +75,7 @@ export const article = { * PATCH /api/article/:sku * Body: at least one of { name, unitamount, unitSi, track_stock, desc, seo } * unitSi must exist for selected company → 404 Unit not found - * → 200 { article } (same detail shape as GET: includes desc, seo) + * → 204 (no body; refetch via getBySku) */ update(sku, body) { return http(`/api/article/${encodeURIComponent(sku)}`, { @@ -87,7 +87,7 @@ export const article = { /** * PUT /api/article/:sku/track_stock * Body: { track_stock: boolean } - * → 200 { article } + * → 204 (no body) */ setTrackStock(sku, body) { const payload = typeof body === 'boolean' ? { track_stock: body } : body; @@ -147,7 +147,7 @@ export const article = { * PUT /api/article/:sku/prices * Body: { prices: [{ price (net), tax (rate), minmultiplier? }] } * Replace-all POS customer group prices. Empty prices clears all POS prices. - * → 200 { article } (same shape as GET by SKU) + * → 204 (no body) */ setPrices(sku, prices) { return http(`/api/article/${encodeURIComponent(sku)}/prices`, { @@ -158,7 +158,7 @@ export const article = { /** * PUT /api/article/:sku/weight - * Body: { weight } → 200 { article } + * Body: { weight } → 204 (no body) */ setWeight(sku, body) { return http(`/api/article/${encodeURIComponent(sku)}/weight`, { @@ -171,7 +171,7 @@ export const article = { * PUT /api/article/:sku/brand * Body: { brandId: number | null } — null clears the brand. * brandId must belong to the article's company → 404 Article or brand not found. - * → 200 { article } (same shape as GET by SKU) + * → 204 (no body) */ setBrandIdBySku(sku, brandId) { return http(`/api/article/${encodeURIComponent(sku)}/brand`, { @@ -184,7 +184,7 @@ export const article = { * PUT /api/article/:sku/eans * Body: { eans: string[] } — replace-all. Empty array clears all. * EANs must be non-empty unique strings → 400 Invalid eans. - * → 200 { article } (same shape as GET by SKU) + * → 204 (no body) */ setEansBySku(sku, eans) { return http(`/api/article/${encodeURIComponent(sku)}/eans`, { @@ -197,7 +197,7 @@ export const article = { * PUT /api/article/:sku/categories * Body: { categoryIds: number[] } — replace-all. Empty array clears all. * Categories must belong to the article's company; ids must be unique. - * → 200 { article } (same shape as GET by SKU) + * → 204 (no body) */ setCategories(sku, categoryIds) { return http(`/api/article/${encodeURIComponent(sku)}/categories`, { @@ -342,7 +342,7 @@ export const article = { /** * POST /api/article/:sku/parent - * Body: { isParent: boolean, attributeNameId?: number } + * Body: { isParent: boolean, attributeNameId?: number } → 204 (no body) */ toggleParent(sku, body) { return http(`/api/article/${encodeURIComponent(sku)}/parent`, { @@ -355,6 +355,7 @@ export const article = { /** * POST /api/article/:sku/children * Body: { attributeValueId?: number, value?: string, name?: string } + * → 201 { sku } */ addChild(sku, body) { return http(`/api/article/${encodeURIComponent(sku)}/children`, { diff --git a/src/automats/artikelAutomat.js b/src/automats/artikelAutomat.js index 8d94ade..6611b3c 100644 --- a/src/automats/artikelAutomat.js +++ b/src/automats/artikelAutomat.js @@ -169,9 +169,8 @@ const actions = { actions.setArticleName(key, body.name); } try { - const res = await articleApi.update(key, body); - actions.setArticle(res.article); - return res; + await articleApi.update(key, body); + return { article: await actions.reloadArticle(key) }; } catch (err) { if (nameChange) { // The optimistic patch was wrong: drop the index entry and refetch. @@ -192,9 +191,8 @@ const actions = { * @returns {Promise} Response body containing the fresh `article`. */ async setEans(sku, eans) { - const res = await articleApi.setEansBySku(String(sku), eans); - actions.setArticle(res.article); - return res; + await articleApi.setEansBySku(String(sku), eans); + return { article: await actions.reloadArticle(sku) }; }, /** @@ -205,9 +203,8 @@ const actions = { * @returns {Promise} Response body containing the fresh `article`. */ async setBrand(sku, body) { - const res = await articleApi.setBrandIdBySku(String(sku), body?.brandId); - actions.setArticle(res.article); - return res; + await articleApi.setBrandIdBySku(String(sku), body?.brandId); + return { article: await actions.reloadArticle(sku) }; }, /** @@ -218,9 +215,8 @@ const actions = { * @returns {Promise} Response body containing the fresh `article`. */ async setCategories(sku, categoryIds) { - const res = await articleApi.setCategories(String(sku), categoryIds); - actions.setArticle(res.article); - return res; + await articleApi.setCategories(String(sku), categoryIds); + return { article: await actions.reloadArticle(sku) }; }, /** @@ -231,9 +227,8 @@ const actions = { * @returns {Promise} Response body containing the fresh `article`. */ async setPrices(sku, prices) { - const res = await articleApi.setPrices(String(sku), prices); - actions.setArticle(res.article); - return res; + await articleApi.setPrices(String(sku), prices); + return { article: await actions.reloadArticle(sku) }; }, /** @@ -244,9 +239,8 @@ const actions = { * @returns {Promise} Response body containing the fresh `article`. */ async setWeight(sku, body) { - const res = await articleApi.setWeight(String(sku), body); - actions.setArticle(res.article); - return res; + await articleApi.setWeight(String(sku), body); + return { article: await actions.reloadArticle(sku) }; }, /** @@ -257,9 +251,8 @@ const actions = { * @returns {Promise} Response body containing the fresh `article`. */ async setTrackStock(sku, body) { - const res = await articleApi.setTrackStock(String(sku), body); - if (res?.article) actions.setArticle(res.article); - return res; + await articleApi.setTrackStock(String(sku), body); + return { article: await actions.reloadArticle(sku) }; }, /** diff --git a/src/automats/categoryAutomat.js b/src/automats/categoryAutomat.js index 1844670..b65e6b0 100644 --- a/src/automats/categoryAutomat.js +++ b/src/automats/categoryAutomat.js @@ -213,8 +213,8 @@ const actions = { * @param {{ parentId: number|string, name: string }} param0 */ async createArticle({ parentId, name }) { - const res = await articleApi.create({ categoryId: parentId, name }); - const created = res.article; + const { sku } = await articleApi.create({ categoryId: parentId, name }); + const { article: created } = await articleApi.getBySku(sku); if (created) appendArticlesToCategoryViews({ categoryId: parentId, articles: [created] }); return created; }, @@ -228,8 +228,9 @@ const actions = { if (list.length === 0) throw new Error('Keine Namen übergeben.'); const created = []; for (const name of list) { - const res = await articleApi.create({ categoryId: parentId, name }); - if (res.article) created.push(res.article); + const { sku } = await articleApi.create({ categoryId: parentId, name }); + const { article: created1 } = await articleApi.getBySku(sku); + if (created1) created.push(created1); } appendArticlesToCategoryViews({ categoryId: parentId, articles: created }); return created; diff --git a/src/routes/lieferung/neu.jsx b/src/routes/lieferung/neu.jsx index 6673d9f..7d8092b 100644 --- a/src/routes/lieferung/neu.jsx +++ b/src/routes/lieferung/neu.jsx @@ -477,10 +477,9 @@ class LieferungNeuPage extends PureComponent { }); requireObject(articleRes, 'POST /api/article'); - requireObject(articleRes.article, 'article'); - requireDefined(articleRes.article.sku, 'article.sku'); + requireDefined(articleRes.sku, 'sku'); - const internalSku = articleRes.article.sku; + const internalSku = articleRes.sku; const supplierSku = line.sku; // Add supplier relationship with the supplier's SKU diff --git a/src/utils/importArtikel.js b/src/utils/importArtikel.js index 115b611..0887e83 100644 --- a/src/utils/importArtikel.js +++ b/src/utils/importArtikel.js @@ -144,10 +144,8 @@ async function importRow(row, { ensureCategory, ensureBrand }) { // Create the article under the leaf category. const createRes = await article.create({ categoryId: leafCategoryId, name }); requireObject(createRes, 'POST /api/article'); - const created = createRes.article; - requireDefined(created, 'article'); - requireDefined(created.sku, 'article.sku'); - const sku = created.sku; + requireDefined(createRes.sku, 'sku'); + const sku = createRes.sku; const applied = { sku, artNr: row.artNr || null, name };