feat: Filter category tree based on ROOT_CATEGORY_ID for display while keeping the full tree for image sync, and summarize image deletion logs.

This commit is contained in:
sebseb7
2025-11-23 09:23:37 +01:00
parent a80acfe6d7
commit 6ea9abab81
3 changed files with 10 additions and 6 deletions

View File

@@ -4,7 +4,7 @@ DB_PASSWORD=
DB_DATABASE=eazybusiness DB_DATABASE=eazybusiness
REDIS_PREFIX=shop_api_ REDIS_PREFIX=shop_api_
CACHE_LOCATION=./cache CACHE_LOCATION=./cache
ROOT_CATEGORY_ID=209 ROOT_CATEGORY_ID=0
JTL_SHOP_ID=0 JTL_SHOP_ID=0
JTL_SPRACHE_ID=1 JTL_SPRACHE_ID=1
JTL_PLATTFORM_ID=1 JTL_PLATTFORM_ID=1

View File

@@ -97,9 +97,11 @@ class CategorySyncer extends EventEmitter {
const articleCounts = articleCountsResult.recordset; const articleCounts = articleCountsResult.recordset;
const images = imagesResult.recordset; const images = imagesResult.recordset;
let tree = this._buildTree(categories, names, articleCounts, images); // Build tree with ROOT_CATEGORY_ID filter (if set)
// This gives us the subtree we're interested in
let tree = this._buildTree(categories, names, articleCounts, images, true);
// Keep unpruned tree for image sync // Keep unpruned tree for image sync (same subtree, but not pruned)
const unprunedTree = tree; const unprunedTree = tree;
// Ensure directory exists // Ensure directory exists
@@ -137,7 +139,7 @@ class CategorySyncer extends EventEmitter {
} }
} }
_buildTree(categories, names, articleCounts, images) { _buildTree(categories, names, articleCounts, images, applyRootFilter = true) {
// Create a map for quick lookup of names // Create a map for quick lookup of names
const nameMap = new Map(); const nameMap = new Map();
names.forEach(n => nameMap.set(n.kKategorie, n.cName)); names.forEach(n => nameMap.set(n.kKategorie, n.cName));
@@ -186,7 +188,7 @@ class CategorySyncer extends EventEmitter {
const rootId = process.env.ROOT_CATEGORY_ID ? parseInt(process.env.ROOT_CATEGORY_ID) : null; const rootId = process.env.ROOT_CATEGORY_ID ? parseInt(process.env.ROOT_CATEGORY_ID) : null;
let resultNodes = rootNodes; let resultNodes = rootNodes;
if (rootId) { if (rootId && applyRootFilter) {
const specificRoot = categoryMap.get(rootId); const specificRoot = categoryMap.get(rootId);
// Return the children of the specified root, not the root itself // Return the children of the specified root, not the root itself
resultNodes = specificRoot ? specificRoot.children : []; resultNodes = specificRoot ? specificRoot.children : [];

View File

@@ -38,7 +38,9 @@ class PictureSyncer {
for (const id of toDelete) { for (const id of toDelete) {
const filePath = path.join(groupDir, `${id}.jpg`); const filePath = path.join(groupDir, `${id}.jpg`);
await fs.unlink(filePath); await fs.unlink(filePath);
console.log(`🗑️ Deleted obsolete image: ${filePath}`); }
if (toDelete.length > 0) {
console.log(`🗑️ Deleted ${toDelete.length} obsolete images.`);
} }
// 2. Download missing images // 2. Download missing images