This commit is contained in:
seb
2026-07-12 21:55:10 +02:00
parent ee09434ea9
commit 23c5b76027
5 changed files with 79 additions and 5 deletions

52
check-image-rv.mjs Normal file
View File

@@ -0,0 +1,52 @@
import sql from 'mssql';
import 'dotenv/config';
const config = {
server: process.env.MSSQL_SERVER || 'localhost',
port: Number(process.env.MSSQL_PORT) || 1433,
database: process.env.MSSQL_DATABASE || 'Mandant_3',
user: process.env.MSSQL_USER,
password: process.env.MSSQL_PASSWORD,
options: {
encrypt: process.env.MSSQL_ENCRYPT !== 'false',
trustServerCertificate: process.env.MSSQL_TRUST_SERVER_CERTIFICATE !== 'false',
},
};
async function main() {
try {
const pool = await sql.connect(config);
const result = await pool.request().query(`
SELECT
a.kArtikel as id, a.cArtNr as sku,
CONVERT(BIGINT, a.bRowversion) as articleRV,
MAX(CONVERT(BIGINT, abp.bRowversion)) as maxImageRV,
CASE
WHEN MAX(CONVERT(BIGINT, abp.bRowversion)) IS NOT NULL
AND MAX(CONVERT(BIGINT, abp.bRowversion)) > CONVERT(BIGINT, a.bRowversion)
THEN MAX(CONVERT(BIGINT, abp.bRowversion))
ELSE CONVERT(BIGINT, a.bRowversion)
END as effectiveLastChanged
FROM dbo.tArtikel a
INNER JOIN dbo.tArtikelBeschreibung ab ON ab.kArtikel = a.kArtikel AND ab.kSprache = 1
LEFT JOIN dbo.tArtikelbildPlattform abp ON abp.kArtikel = a.kArtikel AND abp.kShop = 1
WHERE a.cAktiv = 'Y'
GROUP BY a.kArtikel, a.cArtNr, a.bRowversion
ORDER BY a.kArtikel
`);
console.log('Product effective lastChanged (with image RV for shop 1):');
for (const row of result.recordset) {
const diff = row.maxImageRV && row.maxImageRV > row.articleRV ? ' (IMAGE RV HIGHER!)' : '';
console.log(' ID: ' + row.id + ', SKU: ' + row.sku + ', articleRV: ' + row.articleRV + ', maxImageRV: ' + (row.maxImageRV || 'none') + ', effective: ' + row.effectiveLastChanged + diff);
}
await pool.close();
} catch (err) {
console.error('Error:', err.message);
process.exit(1);
}
}
main();

2
package-lock.json generated
View File

@@ -16,7 +16,7 @@
"sharp": "^0.35.3" "sharp": "^0.35.3"
}, },
"engines": { "engines": {
"node": ">=18" "node": ">=22"
} }
}, },
"node_modules/@azure-rest/core-client": { "node_modules/@azure-rest/core-client": {

View File

@@ -8,7 +8,7 @@
"main": "server.js", "main": "server.js",
"scripts": { "scripts": {
"cert": "node generate-cert.js", "cert": "node generate-cert.js",
"start": "node server.js", "start": "node --watch server.js",
"test:client": "node test-client.js" "test:client": "node test-client.js"
}, },
"engines": { "engines": {

View File

@@ -10,7 +10,15 @@ INNER JOIN dbo.tKategorieArtikel ka ON ka.kArtikel = a.kArtikel
WHERE a.cAktiv = 'Y' WHERE a.cAktiv = 'Y'
AND ka.kKategorie IN (SELECT kKategorie FROM CategoryTree) 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 (@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; 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
)
);
`; `;
export async function getProductCount({ cursor = 0, rootCategoryId = getRootCategoryId() } = {}) { export async function getProductCount({ cursor = 0, rootCategoryId = getRootCategoryId() } = {}) {

View File

@@ -14,6 +14,12 @@ WITH TaxRates AS (
SELECT kSteuerklasse, fSteuersatz SELECT kSteuerklasse, fSteuersatz
FROM dbo.tSteuersatz FROM dbo.tSteuersatz
WHERE kSteuerzone IN (SELECT kSteuerzone FROM dbo.tSteuerzone WHERE cName = @taxZoneName) 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) SELECT TOP (@limit)
a.kArtikel AS id, a.kArtikel AS id,
@@ -22,7 +28,11 @@ SELECT TOP (@limit)
a.fVKNetto AS netPrice, a.fVKNetto AS netPrice,
tr.fSteuersatz AS taxRate, tr.fSteuersatz AS taxRate,
a.dErstelldatum AS createdAt, a.dErstelldatum AS createdAt,
CONVERT(BIGINT, a.bRowversion) AS lastChanged, 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,
( (
SELECT TOP 1 img.cHash SELECT TOP 1 img.cHash
FROM dbo.tArtikelbildPlattform abp FROM dbo.tArtikelbildPlattform abp
@@ -48,13 +58,17 @@ SELECT TOP (@limit)
FROM dbo.tArtikel a FROM dbo.tArtikel a
INNER JOIN dbo.tArtikelBeschreibung ab ON ab.kArtikel = a.kArtikel AND ab.kSprache = @languageId INNER JOIN dbo.tArtikelBeschreibung ab ON ab.kArtikel = a.kArtikel AND ab.kSprache = @languageId
LEFT JOIN TaxRates tr ON tr.kSteuerklasse = a.kSteuerklasse LEFT JOIN TaxRates tr ON tr.kSteuerklasse = a.kSteuerklasse
LEFT JOIN ImageRV ir ON ir.kArtikel = a.kArtikel
WHERE a.cAktiv = 'Y' WHERE a.cAktiv = 'Y'
AND (@kShop = 0 OR EXISTS ( AND (@kShop = 0 OR EXISTS (
SELECT 1 FROM dbo.tKategorieArtikel ka SELECT 1 FROM dbo.tKategorieArtikel ka
INNER JOIN dbo.tKategorieShop ks ON ks.kKategorie = ka.kKategorie AND ks.kShop = @kShop INNER JOIN dbo.tKategorieShop ks ON ks.kKategorie = ka.kKategorie AND ks.kShop = @kShop
WHERE ka.kArtikel = a.kArtikel WHERE ka.kArtikel = a.kArtikel
)) ))
AND CONVERT(BIGINT, a.bRowversion) > @cursor AND (
CONVERT(BIGINT, a.bRowversion) > @cursor
OR (ir.maxImageRV IS NOT NULL AND ir.maxImageRV > @cursor)
)
ORDER BY lastChanged ASC; ORDER BY lastChanged ASC;
`; `;