const express = require("express"); const router = express.Router(); const db = require("../dependencies"); router.get("/", (req, res) => { const accs = db.prepare(`SELECT number, name, qualifiedName, description, type, localBalance, te.balance FROM accounts JOIN (SELECT SUM(amount) as balance, account_name FROM transaction_entries GROUP BY account_name) te ON te.account_name = name`).all(); new_accs = []; for (let i=0; i < accs.length; i++) { accs[i]["subaccounts"] = []; } res.send(accs); }); router.post("/", (req, res) => { const number = req.body.number; const name = req.body.name; const des = req.body.description; const type = req.body.type; const qualifiedName = req.body.parentAccount + ":" + name const new_acc = db.prepare(`INSERT INTO accounts (number, name, qualifiedName, description, type, balance, localBalance) VALUES (?, ?, ? ,?, ?, 0, 0)`).run(number ,name, qualifiedName,des, type) res.status(204).send() }); router.get("/:account", (req, res) => { const acc = db .prepare("SELECT * FROM accounts WHERE name = ?") .get(req.params.account); if (acc == undefined) { res.status(404).send({ code: 404, message: "Account not found", additionalPropl: {} }); } else { entries = db.prepare(` SELECT transaction_entries.transaction_id as id, offsetAccounts, transaction_entries.amount, transaction_entries.label, postingDate, valueDate, title from transaction_entries JOIN transactions ON transaction_entries.transaction_id = transactions.transaction_id JOIN (SELECT account_name as offsetAccounts, transaction_id FROM transaction_entries) te ON te.transaction_id = id AND offsetAccounts IS NOT transaction_entries.account_name WHERE transaction_entries.account_name = ?`).all(req.params.account) acc['entries'] = entries res.send(acc); } }); router.put("/:account", (req, res) => { const oldname = req.params.account; const name = req.body.name; const description = req.body.description; const type = req.body.type; const qualifiedName = req.body.parentAccount + ":" + name; const acc = db.prepare(`UPDATE accounts SET description = ?, name = ?, qualifiedName = ?, type = ? WHERE name=?`).run(description, name, qualifiedName, type, oldname); if (acc == undefined) { res.status(404).send({ code: 404, message: "Account not found", additionalPropl: {} }) } else { res.status(204).send() } }); router.delete("/:account", (req, res) => { const acc = db.prepare("DELETE FROM accounts WHERE name = ? RETURNING *").run(req.params.account) res.status(200).send() }); module.exports = router;