UNPKG

epha-robot

Version:

Fetching, cleaning, transforming of pharmaceutical data from public resources

59 lines (49 loc) 1.77 kB
"use strict"; var jsondiffpatch = require("jsondiffpatch"); var merge = require("merge"); var moment = require("moment"); /** * * @param {{gtin: {}}} historyStore * @param {{gtin: {}}} newStore - Deletes processed data. Only real new entries will be left. * @param {function(string, {}, {}, {})} onChanged - optional * @param {function(string, {})} onDeRegistered - optional * @returns {[{gtin: {}}, {gtin: {}}, {updated: Number, deRegistered: Number, unChanged: Number}]} */ function updateHistory(historyStore, newStore, onChanged, onDeRegistered) { var gtin, historyData, newData, isRecorded, diff, diffCount; var updated = 0, deRegistered = 0, unChanged = 0; for (gtin in historyStore) { if (historyStore.hasOwnProperty(gtin)) { historyData = historyStore[gtin]; newData = newStore[gtin]; isRecorded = !!newData; diffCount = 0; if (isRecorded) { diff = jsondiffpatch.diff(historyData, newData); if (!diff) { unChanged++; } else { delete diff.deregistered; delete diff.publikumsPreisHistory; delete diff.exFactoryHistory; if (Object.keys(diff).length) { onChanged(gtin, diff, historyData, newData); historyStore[gtin] = merge.recursive(false, historyData, newData); updated++; } else { unChanged++; } } } if (!isRecorded) { onDeRegistered(gtin, historyData); historyData.deregistered = moment().format("DD.MM.YYYY"); deRegistered++; } delete newStore[gtin]; } } return [historyStore, newStore, {"updated": updated, "deRegistered": deRegistered, "unChanged": unChanged}]; } module.exports = updateHistory;