cangku/backend/src/services/alibaba1688SkuIdentity.js

27 lines
840 B
JavaScript

'use strict';
const { createHash } = require('crypto');
function normalizeText(value, maxLength = 1000) {
return String(value ?? '').trim().slice(0, maxLength);
}
function buildAlibaba1688SkuKey(sku, position) {
const specs = (Array.isArray(sku?.specs) ? sku.specs : [])
.map(item => `${normalizeText(item?.name, 120)}=${normalizeText(item?.value, 500)}`)
.filter(value => value !== '=')
.join('|');
return `${Number(sku?.index) || position + 1}:${specs || normalizeText(sku?.name, 500)}`;
}
function buildAlibaba1688SkuFingerprint(skus) {
const keys = (Array.isArray(skus) ? skus : [])
.map((sku, index) => buildAlibaba1688SkuKey(sku, index));
return createHash('sha256').update(JSON.stringify(keys), 'utf8').digest('hex');
}
module.exports = {
buildAlibaba1688SkuKey,
buildAlibaba1688SkuFingerprint,
};