#!/usr/bin/env node const fs = require("fs"); // accounts: {"user": hash (String)} const origaccounts_obj = JSON.parse(fs.readFileSync("persist/timetrack/7a90e38a211ece1c346928e7d1f3e968")); const origaccounts = origaccounts_obj.value; // events: {"user": [{id: Int,sheet: String,text: String,date: Date,type: String}]} // type: "in" / "out" const origevents_obj = JSON.parse(fs.readFileSync("persist/timetrack/16908b0605f2645dfcb4c3a8d248cef3")); const origevents = origevents_obj.value; const destfname = "persist/timetrack2/7a90e38a211ece1c346928e7d1f3e968"; const accounts = {}; for (let user in origaccounts) { accounts[user] = { list: [], current: null, pwhash: origaccounts[user], }; let current = null; for (let ev of origevents[user]) { if (ev.type == "in" && current == null) { current = ev; } else if (ev.type == "out" && current != null) { if (current.sheet != ev.sheet) { console.error("Inconsistent in/out pairs (sheet for id " + ev.id + ")"); process.exit(1); } const text = current.text.length > ev.text.length ? current.text : ev.text; accounts[user].list.push({ id: current.id, // arbitrarily choose check-in id sheet: current.sheet, text: text, indate: current.date, outdate: ev.date, }); current = null; } else { console.error("Inconsistent in/out pairs at id=" + ev.id); process.exit(1); } } } fs.writeFileSync(destfname, JSON.stringify({key:"accounts",value:accounts}));