const dotenv = require('dotenv');
dotenv.config();
const express = require('express');
const incomeRoute = express.Router();
const knex = require('../knex/knex');
const income = knex('income');
const passport = require('passport');
require('../middleware/passport')(passport);
incomeRoute.use(function timeLog (req, res, next) {
let timeStamp = new Date().toString();
console.log(`Request received at incomeRoute on: ${timeStamp}`);
next();
});
// verify user is authenticated before accessing data
let authenticate = (req, res, next) => {
if(req.isAuthenticated()) {
return next();
}
res.status(403).send('You are not logged in. You will be redirected to login.');
}
incomeRoute.get('/', (req, res) => {
let userid = req.user[0]['userid'];
income.where({
userid: userid
}).orderBy('transactionid', 'desc').then((data, err) => {
return err? console.log(err) : res.send(data);
}).catch((err) => {
console.log(err);
})
});
incomeRoute.post('/create', (req, res) => {
// let userid = req.user[0]['userid'];
let userid = req.body.userid;
let amount = req.body.amount;
let employer = req.body.employer;
let datereceived = req.body.datereceived;
let tax = amount * 0.15;
income.where({
userid: userid
}).select('transactionid', 'taxytd')
.orderBy('transactionid', 'desc')
.then((data) => {
let taxytd = data[0]['taxytd']; // Set taxytd param to be used in existingData function
return data === undefined || data.length === 0 ? noExistingIncome() : existingData(taxytd);
}).catch((err) => {
console.log(err);
});
let noExistingIncome = () => {
income.insert({
userid: userid,
amount: amount,
employer: employer,
datereceived: datereceived,
tax: tax,
taxytd: tax
}).then((data) => {
res.send('Data successfully entered');
}).catch((err) => {
console.log(err);
res.send('There was an issue while creating this data. Please try again');
});
};
let existingData = (taxytd) => {
/*
While using income.insert({...}), it will fail on the second data submission w/ an error of NaN for taxytd.
It is unclear as to why this happens at this time however the below function works correctly when using it as knex.insert({...}).into('income')
*/
let newTaxYtd = Number(taxytd) + Number(tax);
knex.insert({
userid: userid,
amount: amount,
employer: employer,
datereceived: datereceived,
tax: tax,
taxytd: newTaxYtd
}).into('income').then((data) => {
res.send('Data successfully entered');
}).catch((err) => {
console.log(err);
res.send('There was an issue while creating this data. Please try again');
});
}
});
module.exports = incomeRoute;
Comments