mystash
Version:
Personal finance app
57 lines (47 loc) • 1.38 kB
JavaScript
const Router = require('koa-router');
const Wallet = require('../models/wallet');
const Comparison = require('../content/comparison_to_previous');
const router = new Router();
router.post('/', async (ctx) => {
const { body } = ctx.request;
body.user = ctx.state.user.id;
const wallet = await new Wallet(body).save();
ctx.body = wallet;
});
router.get('/', async (ctx) => {
const wallets = await Wallet.find({ user: ctx.state.user.id });
ctx.body = wallets;
});
router.get('/:id', async (ctx) => {
const wallet = await Wallet.findOne({
user: ctx.state.user.id,
_id: ctx.params.id,
});
const comparisons = await Comparison.comparison_to_previous_month(wallet);
ctx.body = {
...wallet.toObject(),
charts: {
previous: comparisons.previousMonthRunningExpenses,
actual: comparisons.runningExpenses,
forecast: {
...comparisons.normalizedForecast,
forecastMessage: comparisons.userMessage,
},
},
};
});
router.put('/:id', async (ctx) => {
const wallet = await Wallet.findOneAndUpdate({
user: ctx.state.user.id,
_id: ctx.params.id,
}, ctx.request.body, { new: true });
ctx.body = wallet;
});
router.delete('/:id', async (ctx) => {
const wallet = await Wallet.findOne({
user: ctx.state.user.id,
_id: ctx.params.id,
});
ctx.body = wallet;
});
module.exports = router;