prouct pic delete sync fix

This commit is contained in:
seb
2026-08-23 01:56:03 +02:00
parent ccf7854e6c
commit 73d256e8a6
4 changed files with 64 additions and 32 deletions

View File

@@ -4,13 +4,28 @@ import { getDemoCategoryCount } from '../demo/store.js';
import { getPool } from '../db.js';
import { CATEGORY_TREE_CTE, categoryTreeRequest, getRootCategoryId } from './category-tree.js';
const LANGUAGE_ID = Number(process.env.LANGUAGE_ID) || 1;
const CATEGORY_COUNT_SQL = `
${CATEGORY_TREE_CTE}
SELECT COUNT(*) AS CategoryCount
FROM dbo.tKategorie k
WHERE k.kKategorie IN (SELECT kKategorie FROM CategoryTree)
AND (@kShop = 0 OR EXISTS (SELECT 1 FROM dbo.tKategorieShop ks WHERE ks.kKategorie = k.kKategorie AND ks.kShop = @kShop))
AND CONVERT(BIGINT, k.bRowversion) > @cursor;
LEFT JOIN dbo.tKategorieSprache ks ON ks.kKategorie = k.kKategorie AND ks.kSprache = @languageId
LEFT JOIN dbo.tKategoriebildPlattform kbp ON kbp.kKategorie = k.kKategorie
CROSS APPLY (
SELECT MAX(v) AS lastChanged
FROM (VALUES
(CONVERT(BIGINT, k.bRowversion)),
(CONVERT(BIGINT, ks.bRowversion)),
(CONVERT(BIGINT, kbp.bRowversion)),
((SELECT MAX(CONVERT(BIGINT, ka.bRowversion)) FROM dbo.tKategorieArtikel ka WHERE ka.kKategorie = k.kKategorie)),
((SELECT MAX(CONVERT(BIGINT, ksh.bRowversion)) FROM dbo.tKategorieShop ksh WHERE ksh.kKategorie = k.kKategorie AND (@kShop = 0 OR ksh.kShop = @kShop)))
) AS t(v)
) rv
WHERE k.kKategorie IN (SELECT kKategorie FROM CategoryTree WHERE kKategorie <> @rootCategoryId)
AND k.cAktiv = 'Y'
AND (@kShop = 0 OR EXISTS (SELECT 1 FROM dbo.tKategorieShop ks2 WHERE ks2.kKategorie = k.kKategorie AND ks2.kShop = @kShop))
AND rv.lastChanged > @cursor;
`;
export async function getCategoryCount({ cursor = 0, rootCategoryId = getRootCategoryId() } = {}) {
@@ -20,6 +35,7 @@ export async function getCategoryCount({ cursor = 0, rootCategoryId = getRootCat
const result = await categoryTreeRequest(getPool(), rootCategoryId)
.input('cursor', sql.BigInt, cursor)
.input('languageId', sql.Int, LANGUAGE_ID)
.query(CATEGORY_COUNT_SQL);
return result.recordset[0]?.CategoryCount ?? 0;
}

View File

@@ -14,17 +14,27 @@ SELECT TOP (@limit)
k.nSort AS sort,
ks.cName AS name,
b.cHash AS imgHash,
CONVERT(BIGINT, k.bRowversion) AS lastChanged
rv.lastChanged
FROM dbo.tKategorie k
INNER JOIN dbo.tKategorieSprache ks ON ks.kKategorie = k.kKategorie AND ks.kSprache = @languageId
LEFT JOIN dbo.tKategoriebildPlattform kbp
ON kbp.kKategorie = k.kKategorie
LEFT JOIN dbo.tBild b ON b.kBild = kbp.kBild
CROSS APPLY (
SELECT MAX(v) AS lastChanged
FROM (VALUES
(CONVERT(BIGINT, k.bRowversion)),
(CONVERT(BIGINT, ks.bRowversion)),
(CONVERT(BIGINT, kbp.bRowversion)),
((SELECT MAX(CONVERT(BIGINT, ka.bRowversion)) FROM dbo.tKategorieArtikel ka WHERE ka.kKategorie = k.kKategorie)),
((SELECT MAX(CONVERT(BIGINT, ksh.bRowversion)) FROM dbo.tKategorieShop ksh WHERE ksh.kKategorie = k.kKategorie AND (@kShop = 0 OR ksh.kShop = @kShop)))
) AS t(v)
) rv
WHERE k.kKategorie IN (SELECT kKategorie FROM CategoryTree WHERE kKategorie <> @rootCategoryId)
AND k.cAktiv = 'Y'
AND (@kShop = 0 OR EXISTS (SELECT 1 FROM dbo.tKategorieShop ks2 WHERE ks2.kKategorie = k.kKategorie AND ks2.kShop = @kShop))
AND CONVERT(BIGINT, k.bRowversion) > @cursor
ORDER BY lastChanged ASC;
AND rv.lastChanged > @cursor
ORDER BY rv.lastChanged ASC;
`;
export async function getCategoryList({ cursor = 0, limit = 20, rootCategoryId = getRootCategoryId() } = {}) {

View File

@@ -4,23 +4,30 @@ import { getDemoProductCount } from '../demo/store.js';
import { getPool } from '../db.js';
import { CATEGORY_TREE_CTE, categoryTreeRequest, getRootCategoryId } from './category-tree.js';
const LANGUAGE_ID = Number(process.env.LANGUAGE_ID) || 1;
const PRODUCT_COUNT_SQL = `
${CATEGORY_TREE_CTE}
SELECT COUNT(DISTINCT a.kArtikel) AS ProductCount
FROM dbo.tArtikel a
INNER JOIN dbo.tKategorieArtikel ka ON ka.kArtikel = a.kArtikel
LEFT JOIN dbo.tlagerbestand lb ON lb.kArtikel = a.kArtikel
LEFT JOIN dbo.tArtikelBeschreibung ab ON ab.kArtikel = a.kArtikel AND ab.kSprache = @languageId
CROSS APPLY (
SELECT MAX(v) AS lastChanged
FROM (VALUES
(CONVERT(BIGINT, a.bRowversion)),
(CONVERT(BIGINT, lb.bRowversion)),
(CONVERT(BIGINT, ab.bRowversion)),
((SELECT MAX(CONVERT(BIGINT, abp.bRowversion)) FROM dbo.tArtikelbildPlattform abp WHERE abp.kArtikel = a.kArtikel AND (@kShop = 0 OR abp.kShop = @kShop))),
((SELECT MAX(CONVERT(BIGINT, p.bRowversion)) FROM dbo.tPreis p WHERE p.kArtikel = a.kArtikel AND (@kShop = 0 OR p.kShop = @kShop))),
((SELECT MAX(CONVERT(BIGINT, sp.bRowversion)) FROM dbo.tArtikelSonderpreis sp WHERE sp.kArtikel = a.kArtikel))
) AS t(v)
) rv
WHERE a.cAktiv = 'Y'
AND ka.kKategorie IN (SELECT kKategorie FROM CategoryTree)
AND (@kShop = 0 OR EXISTS (SELECT 1 FROM dbo.tKategorieShop ks WHERE ks.kKategorie = ka.kKategorie AND ks.kShop = @kShop))
AND (
CONVERT(BIGINT, a.bRowversion) > @cursor
OR EXISTS (
SELECT 1 FROM dbo.tArtikelbildPlattform abp
WHERE abp.kArtikel = a.kArtikel
AND abp.kShop = @kShop
AND CONVERT(BIGINT, abp.bRowversion) > @cursor
)
);
AND rv.lastChanged > @cursor;
`;
export async function getProductCount({ cursor = 0, rootCategoryId = getRootCategoryId() } = {}) {
@@ -30,6 +37,7 @@ export async function getProductCount({ cursor = 0, rootCategoryId = getRootCate
const result = await categoryTreeRequest(getPool(), rootCategoryId)
.input('cursor', sql.BigInt, cursor)
.input('languageId', sql.Int, LANGUAGE_ID)
.query(PRODUCT_COUNT_SQL);
return result.recordset[0]?.ProductCount ?? 0;
}

View File

@@ -15,12 +15,6 @@ WITH TaxRates AS (
SELECT kSteuerklasse, fSteuersatz
FROM dbo.tSteuersatz
WHERE kSteuerzone IN (SELECT kSteuerzone FROM dbo.tSteuerzone WHERE cName = @taxZoneName)
),
ImageRV AS (
SELECT kArtikel, MAX(CONVERT(BIGINT, bRowversion)) AS maxImageRV
FROM dbo.tArtikelbildPlattform
WHERE kShop = @kShop
GROUP BY kArtikel
)
SELECT TOP (@limit)
a.kArtikel AS id,
@@ -29,11 +23,7 @@ SELECT TOP (@limit)
a.fVKNetto AS netPrice,
tr.fSteuersatz AS taxRate,
a.dErstelldatum AS createdAt,
CASE
WHEN ir.maxImageRV IS NOT NULL AND ir.maxImageRV > CONVERT(BIGINT, a.bRowversion)
THEN ir.maxImageRV
ELSE CONVERT(BIGINT, a.bRowversion)
END AS lastChanged,
rv.lastChanged,
(
SELECT TOP 1 img.cHash
FROM dbo.tArtikelbildPlattform abp
@@ -59,20 +49,28 @@ SELECT TOP (@limit)
ISNULL(v.fBestand, 0) AS fBestand
FROM dbo.tArtikel a
INNER JOIN dbo.tArtikelBeschreibung ab ON ab.kArtikel = a.kArtikel AND ab.kSprache = @languageId
LEFT JOIN dbo.tlagerbestand lb ON lb.kArtikel = a.kArtikel
LEFT JOIN TaxRates tr ON tr.kSteuerklasse = a.kSteuerklasse
LEFT JOIN ImageRV ir ON ir.kArtikel = a.kArtikel
LEFT JOIN dbo.vLagerbestandProLager v ON v.kArtikel = a.kArtikel AND v.kWarenlager = @warenlagerId
CROSS APPLY (
SELECT MAX(val) AS lastChanged
FROM (VALUES
(CONVERT(BIGINT, a.bRowversion)),
(CONVERT(BIGINT, lb.bRowversion)),
(CONVERT(BIGINT, ab.bRowversion)),
((SELECT MAX(CONVERT(BIGINT, abp.bRowversion)) FROM dbo.tArtikelbildPlattform abp WHERE abp.kArtikel = a.kArtikel AND (@kShop = 0 OR abp.kShop = @kShop))),
((SELECT MAX(CONVERT(BIGINT, p.bRowversion)) FROM dbo.tPreis p WHERE p.kArtikel = a.kArtikel AND (@kShop = 0 OR p.kShop = @kShop))),
((SELECT MAX(CONVERT(BIGINT, sp.bRowversion)) FROM dbo.tArtikelSonderpreis sp WHERE sp.kArtikel = a.kArtikel))
) AS t(val)
) rv
WHERE a.cAktiv = 'Y'
AND (@kShop = 0 OR EXISTS (
SELECT 1 FROM dbo.tKategorieArtikel ka
INNER JOIN dbo.tKategorieShop ks ON ks.kKategorie = ka.kKategorie AND ks.kShop = @kShop
WHERE ka.kArtikel = a.kArtikel
))
AND (
CONVERT(BIGINT, a.bRowversion) > @cursor
OR (ir.maxImageRV IS NOT NULL AND ir.maxImageRV > @cursor)
)
ORDER BY lastChanged ASC;
AND rv.lastChanged > @cursor
ORDER BY rv.lastChanged ASC;
`;
function priceOverridesSql(articleIds) {