This commit is contained in:
seb
2026-09-22 07:25:16 +02:00
parent 4ed6260e91
commit cca131d83a
148 changed files with 5343 additions and 3466 deletions

View File

@@ -1,13 +1,22 @@
import {
GET_BRAND_BY_COMPANY_AND_ID,
UPDATE_BRAND,
GET_BRAND_BY_COMPANY_AND_ID as MSSQL_GET_BRAND,
UPDATE_BRAND as MSSQL_UPDATE_BRAND,
} from '../../providers/mssql/queries/article.js';
import {
GET_BRAND_BY_COMPANY_AND_ID as SQLITE_GET_BRAND,
UPDATE_BRAND as SQLITE_UPDATE_BRAND,
} from '../../providers/sqlite3/queries/article.js';
import queryBySku from './queryBySku.js';
import resolveArticleBySku from './resolveArticleBySku.js';
import makeRunner from '../runner.js';
export default function setBrandIdBySku(pool) {
const resolve = resolveArticleBySku(pool);
const load = queryBySku(pool);
export default function setBrandIdBySku(provider) {
const resolve = resolveArticleBySku(provider);
const load = queryBySku(provider);
const isSqlite = provider?.dialect === 'sqlite3';
const getBrandSql = isSqlite ? SQLITE_GET_BRAND : MSSQL_GET_BRAND;
const updateBrandSql = isSqlite ? SQLITE_UPDATE_BRAND : MSSQL_UPDATE_BRAND;
/**
* Sets (or clears) the brand of an article by its SKU.
@@ -15,6 +24,7 @@ export default function setBrandIdBySku(pool) {
* @param {number} googleAuthId - The id of the Google auth user.
* @param {string} sku - The article SKU.
* @param {number|null} brandId - The brand id, or `null` to clear the brand.
* @param {object} [tx] - Optional transaction.
* @returns {Promise<object>} The updated article.
* @throws {Error} If the brand or article is not found.
*
@@ -22,10 +32,12 @@ export default function setBrandIdBySku(pool) {
* const article = await store.article.setBrandIdBySku(42, 'SKU-1', 3);
* // => { id, sku, name, ... }
*/
return async (googleAuthId, sku, brandId) => {
return async (googleAuthId, sku, brandId, tx) => {
const runner = makeRunner(provider, tx);
const { articleId, languageId, companyId } = await resolve(
googleAuthId,
sku,
runner,
);
if (brandId !== null && !Number.isFinite(brandId)) {
@@ -34,28 +46,26 @@ export default function setBrandIdBySku(pool) {
let resolvedBrandId = null;
if (brandId !== null) {
const brand = await pool
.request()
.input('brandId', brandId)
.input('companyId', companyId)
.query(GET_BRAND_BY_COMPANY_AND_ID);
if (!brand.recordset[0]) {
const brand = await runner.query(getBrandSql, {
brandId,
companyId,
});
if (!brand.rows[0]) {
throw new Error('Brand not found');
}
resolvedBrandId = brandId;
}
const result = await pool
.request()
.input('articleId', articleId)
.input('brandId', resolvedBrandId)
.query(UPDATE_BRAND);
const result = await runner.query(updateBrandSql, {
articleId,
brandId: resolvedBrandId,
});
if (!result.rowsAffected[0]) {
if (!result.rowsAffected) {
throw new Error('Article not found');
}
const article = await load(articleId, languageId);
const article = await load(articleId, languageId, runner);
if (!article) {
throw new Error('Article not found');
}
@@ -63,3 +73,4 @@ export default function setBrandIdBySku(pool) {
return article;
};
}