focus-product-extractor2
Version:
Extract product information from chat/order data
62 lines (57 loc) • 1.88 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.RuleEngine = void 0;
var _lodash = _interopRequireDefault(require("lodash"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
/**
* 规则引擎模块,负责根据规则过滤数据
*/
class RuleEngine {
/**
* 应用规则过滤数据
* @param {Array} data - 待过滤的数据数组
* @param {Object} rules - 过滤规则对象
* @returns {Array} 过滤后的数据数组
*/
applyRules(data, rules = {}, scene) {
if (!Array.isArray(data)) return [];
return data.filter(item => {
// 使用顶层 scene 参数进行过滤
if (scene && item.scene !== scene) {
return false;
}
// 2. 消息来源过滤(仅对chat场景生效)
if (item.scene === 'chat' && rules.sources && !rules.sources.includes(item.sender)) {
return false;
}
// 3. 其他过滤条件可以在这里添加
return true;
});
}
/**
* 应用商品属性过滤(内部方法),后续拓展使用
* @private
* @param {Object} item - 商品项
* @param {Object} filters - 过滤条件
* @returns {boolean} 是否通过过滤
*/
_applyItemFilters(item, filters = {}) {
return _lodash.default.every(filters, (value, key) => {
switch (key) {
case 'minPrice':
// 价格过滤:仅当商品有价格信息时才比较
return item.price ? item.price >= value : true;
case 'excludeStatus':
// 状态过滤:排除指定状态的商品
return !value.includes(item.status);
default:
// 默认通过所有未定义的过滤条件
return true;
}
});
}
}
exports.RuleEngine = RuleEngine;
var _default = exports.default = new RuleEngine();