2024-06-02 17:14:03 +02:00

112 lines
3.3 KiB
JavaScript

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()
for (res of update.values()) {
// res.write("data: update\n\n")
res.write('event: update\n');
res.write('data: {}\n\n');
}
});
// TODO add correct balance
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()
for (res of update.values()) {
// res.write("data: update\n\n")
res.write('event: update\n');
res.write('data: {}\n\n');
}
}
});
router.delete("/:account", (req, res) => {
const acc = db.prepare("DELETE FROM accounts WHERE name = ? RETURNING *").run(req.params.account)
res.status(200).send()
for (res of update.values()) {
// res.write("data: update\n\n")
res.write('event: update\n');
res.write('data: {}\n\n');
}
});
module.exports = router;