rhuntington icon

income.js

rhuntington | PRO | 05/23/19 04:20:26 AM UTC | 0 ⭐ | 374 👁️ | Never ⏰ | []
JavaScript |

3.05 KB

|

None

|

0 👍

/

0 👎

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