52 lines
1.8 KiB
JavaScript
52 lines
1.8 KiB
JavaScript
import sql from 'mssql';
|
|
import { isDemoMode } from '../demo/mode.js';
|
|
import { getDemoCategoryList } 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_LIST_SQL = `
|
|
${CATEGORY_TREE_CTE}
|
|
SELECT TOP (@limit)
|
|
k.kKategorie AS id,
|
|
k.kOberKategorie AS pid,
|
|
k.nSort AS sort,
|
|
ks.cName AS name,
|
|
b.cHash AS imgHash,
|
|
CONVERT(BIGINT, k.bRowversion) AS 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
|
|
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;
|
|
`;
|
|
|
|
export async function getCategoryList({ cursor = 0, limit = 20, rootCategoryId = getRootCategoryId() } = {}) {
|
|
if (isDemoMode()) {
|
|
return getDemoCategoryList({ cursor, limit });
|
|
}
|
|
|
|
const result = await categoryTreeRequest(getPool(), rootCategoryId)
|
|
.input('cursor', sql.BigInt, cursor)
|
|
.input('limit', sql.Int, limit)
|
|
.input('languageId', sql.Int, LANGUAGE_ID)
|
|
.query(CATEGORY_LIST_SQL);
|
|
|
|
return result.recordset.map((row) => ({
|
|
_id: String(row.id),
|
|
imghash: row.imgHash ?? null,
|
|
imgsrc: row.imgHash ?? null,
|
|
name: row.name,
|
|
pid: row.pid === rootCategoryId ? '0' : String(row.pid),
|
|
discounts: [],
|
|
sort: String(row.sort),
|
|
lastChanged: String(row.lastChanged),
|
|
}));
|
|
}
|