UNPKG

focus-product-extractor2

Version:

Extract product information from chat/order data

62 lines (57 loc) 1.87 kB
"use strict"; 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();