medici
Version:
Double-entry accounting ledger for Node + Mongoose
43 lines (42 loc) • 1.66 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseBalanceQuery = void 0;
const mongoose_1 = require("mongoose");
const isPrototypeAttribute_1 = require("../isPrototypeAttribute");
const parseAccountField_1 = require("./parseAccountField");
const parseDateField_1 = require("./parseDateField");
const transaction_1 = require("../../models/transaction");
const flattenObject_1 = require("../flattenObject");
/**
* Turn query into an object readable by MongoDB.
*/
function parseBalanceQuery(query, book) {
const { account, start_date, end_date, ...extra } = query;
const filterQuery = {
book: book.name,
...(0, parseAccountField_1.parseAccountField)(account, book.maxAccountPath),
};
if (start_date || end_date) {
filterQuery["datetime"] = (0, parseDateField_1.parseDateQuery)(start_date, end_date);
}
const meta = {};
for (const [key, value] of Object.entries(extra)) {
if ((0, isPrototypeAttribute_1.isPrototypeAttribute)(key))
continue;
if (!filterQuery.meta)
filterQuery.meta = {};
filterQuery.meta[key] = value;
let newValue = value;
if (typeof value === "string" && (0, transaction_1.isTransactionObjectIdKey)(key)) {
newValue = new mongoose_1.Types.ObjectId(value);
}
if ((0, transaction_1.isValidTransactionKey)(key)) {
filterQuery[key] = newValue;
}
else {
meta[key] = newValue;
}
}
return { ...filterQuery, ...(0, flattenObject_1.flattenObject)(meta, "meta") };
}
exports.parseBalanceQuery = parseBalanceQuery;