Commit 7c213ebe authored by Dennis Willers's avatar Dennis Willers
Browse files

Implement - REST-Services

parent 86ddf602
Loading
Loading
Loading
Loading

events.js

0 → 100644
+200 −0
Original line number Original line Diff line number Diff line
const express = require('express');

function createRouter(db) {
    const router = express.Router();
    
    function isMapIdAndNameNotNull(req) {
        const mapId = req.body.mapId;
        const name = req.body.name;
        return mapId != null && name != null;
    }

    function isVoteRequestValid(req) {
        const userId = req.body.userId;
        const vote = req.body.vote;
        return userId != null && vote != null && isMapIdAndNameNotNull(req);
    }

    function isgetMapInfoValid(req) {
        const userId = req.body.userId;
        return userId != null && isMapIdAndNameNotNull(req);
    }
    
    const hasMap = function hasMap(req, res, next) {
        const mapId = req.body.mapId;
        if (isMapIdAndNameNotNull(req)) {
            const sql = 'SELECT count(*) as Maps From Map WHERE mapId = \"'+mapId+'\";';
            console.log('Map Select: ', sql);
            db.query(
                sql,
                (error, results) => {
                if (error) {
                    console.log(error);
                    res.header('Access-Control-Allow-Origin', "*").status(500).json({status: 'error in hasMap'});
                } else {
                    numberResults = results[0].Maps;
                    console.log(numberResults);
                    if (numberResults === 1) next();
                    else if (numberResults === 0) addMap(req, res, next);
                    else res.header('Access-Control-Allow-Origin', "*").status(500).json({status: 'There are multiple maps with the same id'});
                }
            });
        } else {
            res.header('Access-Control-Allow-Origin', "*").status(500).json({status: 'JSON-Parameter are not valid'});
        }
    };

    const addMap = function addMap(req, res, next) {
        const mapId = req.body.mapId;
        const name = req.body.name;
        const sql = 'INSERT INTO Map (mapId, name) VALUES (\"'+mapId+'\", \"'+name+'\");';
        console.log('Map Insert: ', sql);
        db.query(
            sql,
            (error, results) => {
            if (error) {
                console.log(error);
                res.header('Access-Control-Allow-Origin', "*").status(500).json({status: 'error in addMap'});
            } else {
                if (results.affectedRows === 1) next();
                else res.header('Access-Control-Allow-Origin', "*").status(500).json({status: 'error in insertMap'});
            }
        });
    };

    const hasVote = function hasVote(req, res, next) {
        if (isVoteRequestValid(req)) {
            const userId = req.body.userId;
            const sql = 'SELECT userId FROM Vote WHERE userId = \"'+ userId + '\";';
            console.log('Map Insert: ', sql);
            db.query(
                sql,
                (error, results) => {
                if (error) {
                    console.log(error);
                    res.header('Access-Control-Allow-Origin', "*").status(500).json({status: 'error in hasVote'});
                } else {
                    if (results.length === 0) insertVote(req, res, next);
                    else if (results.length === 1) updateVote(req, res, next);
                    else res.header('Access-Control-Allow-Origin', "*").status(500).json({status: 'too many votes by user'});
                }
            });
        } else {
            res.header('Access-Control-Allow-Origin', "*").status(500).json({status: 'Vote Request is not valid'});
        }
    };

    const insertVote = function insertVote(req, res, next) {
        if (isVoteRequestValid(req)) {
            const userId = req.body.userId;
            const mapId = req.body.mapId;
            const vote = req.body.vote;
            const sql = 'INSERT INTO Vote (userId, mapId, vote) VALUES (\"'+ userId + '\", \"'+ mapId + '\", \"' + vote +'\");';
            console.log('Insert Vote: ', sql);
            db.query(
                sql,
                (error, results) => {
                if (error) {
                    console.log(error);
                    res.header('Access-Control-Allow-Origin', "*").status(500).json({status: 'error in insertVote'});
                } else {
                    if (results.affectedRows === 1) next();
                    else res.header('Access-Control-Allow-Origin', "*").status(500).json({status: 'error in insertVote'});
                }
            });
        } else {
            res.header('Access-Control-Allow-Origin', "*").status(500).json({status: 'Vote Request is not valid'});
        }
    };

    const updateVote = function updateVote(req, res, next) {
        if (isVoteRequestValid(req)) {
            const userId = req.body.userId;
            const mapId = req.body.mapId;
            const vote = req.body.vote;
            const sql = 'UPDATE Vote SET userId = \"'+ userId + '\", mapId = \"'+ mapId + '\", vote = \"' + vote +'\" WHERE userID = \"'+ userId +'\";';
            console.log('Update Vote: ', sql);
            db.query(
                sql,
                (error, results) => {
                if (error) {
                    console.log(error);
                    res.header('Access-Control-Allow-Origin', "*").status(500).json({status: 'error in updateVote'});
                } else {
                    if (results.affectedRows === 1) next();
                    else res.header('Access-Control-Allow-Origin', "*").status(500).json({status: 'error in updateVote'});
                }
            });
        } else {
            res.header('Access-Control-Allow-Origin', "*").status(500).json({status: 'Vote Request is not valid'});
        }
    };

    const getMapInfo = function getMapInfo(req, res) {
        if (isVoteRequestValid(req)) {
            const mapId = req.body.mapId;
            const vote = req.body.vote;
            const sql = 'SELECT count(userId) as votes, round(avg(vote)) as average FROM Vote WHERE mapId LIKE \"'+ mapId + '\";';
            console.log('getMapInfo: ', sql);
            db.query(
                sql,
                (error, results) => {
                if (error) {
                    console.log(error);
                    res.header('Access-Control-Allow-Origin', "*").status(500).json({status: 'error in getMapInfo'});
                } else {
                    if (results.length === 1) {
                        const average = results[0].average;
                        const votes = results[0].votes;
                        if (average !== null && votes !== null) {
                            res.header('Access-Control-Allow-Origin', "*").status(500).json({votes: votes, average: average, vote: vote});
                            return;
                        }
                    }
                    res.header('Access-Control-Allow-Origin', "*").status(500).json({status: 'error in getMapInfo'});
                }
            });
        } else {
            res.header('Access-Control-Allow-Origin', "*").status(500).json({status: 'Vote Request is not valid'});
        }
    };

    const getVote = function getVote(req, res) {
        if (isgetMapInfoValid(req)) {
            const mapId = req.body.mapId;
            const userId = req.body.userId;
            const sql = 'SELECT vote FROM Vote v2 WHERE mapId LIKE \"'+ mapId + '\" AND userId LIKE \"' + userId + '\";';
            console.log('Update Vote: ', sql);
            db.query(
                sql,
                (error, results) => {
                    if (error) {
                        console.log(error);
                        res.header('Access-Control-Allow-Origin', "*").status(500).json({status: 'error in getVote'});
                    } else {
                        if (results.length === 1) {
                            const vote = results[0].vote;
                            if (vote !== null) {
                                req.body.vote = vote;
                                getMapInfo(req, res);
                                return;
                            }
                        }
                        res.header('Access-Control-Allow-Origin', "*").status(500).json({status: 'error in getVote'});
                    }
                });
        } else {
            res.header('Access-Control-Allow-Origin', "*").status(500).json({status: 'Vote Request is not valid'});
        }
    };

    // the routes are defined here

    //Return all Sessions (Not neccesary)
    router.post('/addMap', [hasMap, hasVote, getMapInfo]);
    router.post('/getMapInfo', [getVote]);

    return router;
}

module.exports = createRouter;
+6 −6
Original line number Original line Diff line number Diff line
@@ -3,14 +3,14 @@ const express = require('express');
const cors = require('cors');
const cors = require('cors');
const bodyParser = require('body-parser');
const bodyParser = require('body-parser');
const mysql = require('mysql');
const mysql = require('mysql');
//const events = require('./events');
const events = require('./events');


/*const connection = mysql.createConnection({
const connection = mysql.createConnection({
    host     : '192.168.0.50',
    host     : '192.168.0.50',
    port     : '3307',
    port     : '3307',
    user     : '--',
    user     : 'votingApp',
    password : '--',
    password : 'R0b0TecDev!',
    database : '--',
    database : 'Voting',
    multipleStatements: true,
    multipleStatements: true,
});
});


@@ -25,4 +25,4 @@ const app = express()


app.listen(port, () => {
app.listen(port, () => {
    console.log(`Express server listening on port ${port}`);
    console.log(`Express server listening on port ${port}`);
});*/
});