hoginfo ergänzt

This commit is contained in:
Thomas Mack 2019-09-28 13:03:23 +02:00
parent 24e6e572a6
commit 3ec5ebd592
10 changed files with 529 additions and 2 deletions

21
app.js
View File

@ -5,10 +5,15 @@ var logger = require('morgan');
var cors = require('cors');
var sassMiddleware = require('node-sass-middleware');
var xml = require('xml');
//var passport = require('passport');
//var LocalStrategy = require('passport-local').Strategy;
const db = require('./db')
const dbhog = require('./dbhog')
const PORT = process.env.PORT || 4000;
@ -16,6 +21,11 @@ var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var valuelistRouter = require('./routes/valuelist');
var recepieRouter = require('./routes/recepie');
var personRouter = require('./routes/v1/person');
var schuelerRouter = require('./routes/v1/schueler');
var schuljahrRouter = require('./routes/v1/schuljahr');
var punkteRouter = require('./routes/v1/punkte');
var hausRouter = require('./routes/v1/haus');
var app = express();
@ -58,11 +68,22 @@ app.use('/', (req, res, next ) => {
next();
})
app.use('/api/v1', (req, res, next ) => {
req.db = dbhog;
next();
})
app.use('/', indexRouter);
app.use('/users', usersRouter);
app.use('/wl', valuelistRouter);
app.use('/recepies', recepieRouter);
app.use('/api/v1/person', personRouter);
app.use('/api/v1/schueler', schuelerRouter);
app.use('/api/v1/schuljahr', schuljahrRouter);
app.use('/api/v1/punkte', punkteRouter);
app.use('/api/v1/haus', hausRouter);
// catch 404 and forward to error handler
app.use(function(req, res, next) {

194
dbhog/index.js Normal file
View File

@ -0,0 +1,194 @@
// SQL-Class
// Author: Thomas Mack
const DEBUG = true;
const { Pool } = require('pg');
const pool = new Pool({
user: 'postgres',
host: 'localhost',
database: 'hogwarts',
password: 'postgres',
port: 5432
});
const query = function (text, params, callback) {
const start = Date.now()
return pool.query(text, params, (err, res) => {
const duration = Date.now() - start;
//if(res)
console.log('executed query', { text, duration})
callback(err, res)
})
}
const getClient = function (callback) {
pool.connect((err, client, done) => {
callback(err, client, done)
})
}
const dataStructure = {
categories: {
tableName: "kategorie",
jsonName: "categories"
},
units: {
tableName: "einheit",
jsonName: "units"
},
tools: {
tableName: "geraet",
jsonName: "tools"
},
difficulties: {
tableName: "schwierigkeit",
jsonName: "difficulties"
},
ingredients: {
tableName: "zutat",
jsonName: "ingredients"
},
ratingcategories: {
tableName: "wertungkategorie",
jsonName: "ratingcategories"
}
}
const selectAllFromTable = (table) => {
return "SELECT * FROM "+table+" order by name;";
}
const selectAllFromTableByFieldValue = (table, field, value) => {
return "SELECT * FROM "+table+" WHERE "+field+"="+value+";";
}
const selectItemFromTable = function (table, id) {
return "SELECT * FROM "+table+" WHERE id = "+id+";";
}
const deleteItemFromTable = function (table, id) {
return "DELETE FROM "+table+" WHERE id = "+id+";";
}
const deleteNameKeyObject = function(req, res, next) {
if(DEBUG) console.log("Delte Valuelist");
let structure = getStructure(req);
let obj = req.body[structure.jsonName][0];
let query = "DELETE FROM "+structure.tableName+
" WHERE id = "+req.itemId;
pool.query(query, (err, rs) => {
if(err) {
console.log(query);
next(err)
} else {
res.status(204).send();
}
});
}
const updateNameKeyObject = function(req, res, next) {
if(DEBUG) console.log("Update Valuelist");
let structure = getStructure(req);
if(DEBUG) console.log(req.body[structure.jsonName]);
let obj = req.body[structure.jsonName][0];
let query = "UPDATE "+structure.tableName+
" set schluessel = '"+obj.schluessel+
"', name = '"+obj.name+
"', beschreibung = '"+obj.beschreibung+
"' WHERE id = "+req.itemId+" returning *";
pool.query(query, (err, rs) => {
if(err) {
console.log(query);
next(err)
} else {
let result = {};
result[structure['jsonName']] = rs.rows;
res.status(200).json(result);
}
});
}
const insertNameKeyObject = function(req, res, next) {
if(DEBUG) console.log("Insert Valuelist");
let structure = getStructure(req);
if(DEBUG) console.log(req.body[structure.jsonName]);
let obj = req.body[structure.jsonName][0];
let query = "INSERT INTO "+structure.tableName+" (schluessel, name, beschreibung) "+
" VALUES ('"+obj.schluessel+"','"+obj.name+"','"+obj.beschreibung+"')" +
" returning *";
if(DEBUG) console.log(query);
pool.query(query, (err, rs) => {
if(err) {
console.log(query);
next(err)
} else {
let result = {};
result[structure['jsonName']] = rs.rows;
console.log(result);
res.status(200).json(result);
}
});
}
const getStructure = function(req) {
let path = req.pathCall;
let structure = dataStructure[path];
return structure;
}
const getAllFromTable = function(req, res, next) {
let structure = getStructure(req);
if(DEBUG) {
console.log("Found Structure-Object: ");
console.log(structure);
}
if(structure === undefined) return res.status(404).send();
pool.query(selectAllFromTable(structure.tableName), (err, rs) => {
if(err) next(err)
else {
if(DEBUG) console.log(res);
let result = {};
result[structure['jsonName']] = rs.rows;
console.log(result);
res.status(200).json(result);
}
})
}
const getUserByEmail = function(username) {
let query = "Select id, name, email, kennwort, beschreibung FROM nutzer WHERE email ilike '"+username+"'";
if(DEBUG) console.log(query);
req.db.query(query, (err, rs) => {
if (err) {
return err
}
return rs.rows[0];
})
}
module.exports = {
query,
selectAllFromTable,
selectAllFromTableByFieldValue,
deleteItemFromTable,
updateNameKeyObject,
insertNameKeyObject,
deleteNameKeyObject,
getAllFromTable,
getUserByEmail,
getStructure
};

13
package-lock.json generated
View File

@ -2035,6 +2035,14 @@
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
},
"connect-pg-simple": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/connect-pg-simple/-/connect-pg-simple-5.0.0.tgz",
"integrity": "sha512-WZ7xkN+qe5bbDLgZ1L9GxnSbr155cJHmfNRzVR5hBvqio7Pg/vuH7Cf8lPUSFClQjtybYSejUqyO54sYt4cg+w==",
"requires": {
"pg": "^7.4.3"
}
},
"console-browserify": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
@ -6802,6 +6810,11 @@
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
},
"xml": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz",
"integrity": "sha1-eLpyAgApxbyHuKgaPPzXS0ovweU="
},
"xtend": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",

View File

@ -10,6 +10,7 @@
"dependencies": {
"bcrypt": "^3.0.3",
"body-parser": "^1.18.3",
"connect-pg-simple": "^5.0.0",
"cors": "^2.8.5",
"debug": "~2.6.9",
"express": "~4.16.0",
@ -24,7 +25,8 @@
"react": "^16.7.0",
"react-dom": "^15.6.1",
"react-router-dom": "^4.2.2",
"whatwg-fetch": "^3.0.0"
"whatwg-fetch": "^3.0.0",
"xml": "^1.0.1"
},
"devDependencies": {
"babel": "^6.23.0",

View File

@ -64,6 +64,42 @@ router.post('/', function(req, res, next) {
});
});
router.put('/login', function(req, res, next) {
let username = req.body.username;
let password = req.body.password;
console.log(username);
let query = "Select id, name, email, kennwort, beschreibung FROM nutzer WHERE email ilike $1";
if(DEBUG) console.log(query);
req.db.query(query, [username], (err, rs) => {
if (err) {
return next(err)
}
req.user = rs.rows[0];
console.log(req.user);
if(!req.user) return next(new Error);
console.log(req.user.kennwort);
bcrypt.compare(password, req.user.kennwort, function(err, checkResult) {
console.log(checkResult);
if(checkResult) {
console.log("Login erfolgreich")
req.login = true;
} else {
req.login = false;
console.log(err);
res.status(409).send("Passwd didn't match");
}
});
next();
})
});
/* Methods with id */
router.get('/:userId', function(req, res, next) {
let user = {};
@ -114,7 +150,7 @@ router.put('/:userId/changepasswd', function(req, res, next) {
console.log("Compare: "+oldPasswd+" WITH "+req.user.kennwort+" Result:");
console.log(checkResult);
if(checkResult) {
bcrypt.hash('myPassword', 10, function(err, hash) {
bcrypt.hash(newPasswd, 10, function(err, hash) {
let query = "UPDATE nutzer set kennwort = '"+hash+"'"+
" WHERE id = "+req.userId +
" returning *";
@ -143,6 +179,7 @@ router.put('/:userId/changepasswd', function(req, res, next) {
});
router.delete('/:userId', function(req, res, next) {
let query = [
"DELETE FROM nutzer_favorit where nutzer = $1;",

76
routes/v1/haus.js Normal file
View File

@ -0,0 +1,76 @@
const express = require('express');
const router = express.Router();
const cors = require('cors');
const xml = require('xml');
const bcrypt = require('bcrypt');
const randToken = require('rand-token');
const DEBUG = true;
router.param('hausId', function(req, res, next, id) {
req.hausId = id;
let query = " Select * from haus ";
query += " WHERE id = $1";
if(DEBUG) console.log(query);
if(DEBUG) console.log(req.hausId);
req.db.query(query, [req.hausId], (err, rs) => {
if (err) {
return next(err)
}
let result = "<haus>";
for (var i in rs.rows[0]) {
var val = rs.rows[0][i];
result += "<"+i+">"+val+"</"+i+">";
}
result += "</haus>";
if(DEBUG) console.log(result);
res.set('Content-Type', 'text/xml');
res.send(result);
//next();
})
});
/* GET recepies listing. */
router.get('/', function(req, res, next) {
let query = " Select * from haus ";
if(DEBUG) console.log(query);
req.db.query(query, (err, rs) => {
if (err){
console.log(query);
next(err);
} else {
let result = "<list>";
for (var haus in rs.rows) {
console.log(haus);
result += "<haus>";
for (var i in rs.rows[haus]) {
var val = rs.rows[haus][i];
result += "<"+i+">"+val+"</"+i+">";
}
result += "</haus>";
}
result += "</list>";
console.log(result);
res.set('Content-Type', 'text/xml');
res.send(result);
// res.status(200).json(result);
}
});
});
/* Methods with id */
router.get('/:hausId', function(req, res, next) {
// res.status(200).json(req.haus);
});
module.exports = router;

49
routes/v1/person.js Normal file
View File

@ -0,0 +1,49 @@
const express = require('express');
const router = express.Router();
var cors = require('cors');
const bcrypt = require('bcrypt');
const randToken = require('rand-token');
const DEBUG = true;
router.param('personId', function(req, res, next, id) {
req.personId = id;
let query = " Select * from person ";
query += " WHERE id = $1";
if(DEBUG) console.log(query);
if(DEBUG) console.log(req.personId);
req.db.query(query, [req.personId], (err, rs) => {
if (err) {
return next(err)
}
req.person = rs.rows[0];
next();
})
});
/* GET recepies listing. */
router.get('/', function(req, res, next) {
let query = " Select * from person ";
if(DEBUG) console.log(query);
req.db.query(query, (err, rs) => {
if (err){
console.log(query);
next(err);
} else {
let result = {};
result['person'] = rs.rows;
console.log(result);
res.status(200).json(result);
}
});
});
/* Methods with id */
router.get('/:personId', function(req, res, next) {
res.status(200).json(req.person);
});
module.exports = router;

35
routes/v1/punkte.js Normal file
View File

@ -0,0 +1,35 @@
const express = require('express');
const router = express.Router();
var cors = require('cors');
const bcrypt = require('bcrypt');
const randToken = require('rand-token');
const DEBUG = true;
router.param('punkteId', function(req, res, next, id) {
req.punkteId = id;
const group = req.query.group;
let query = 'SELECT * FROM v_hauspunkte_small WHERE schuljahr = $1;';
if(group==1) query = 'SELECT schuljahr, haus, sum(punkte) FROM v_hauspunkte WHERE schuljahr = $1 GROUP BY schuljahr, haus;'
if(DEBUG) console.log(query);
if(DEBUG) console.log(group);
req.db.query(query, [req.punkteId], (err, rs) => {
if (err) {
return next(err)
}
req.punkte = rs.rows;
next();
})
});
/* Methods with id */
router.get('/:punkteId', function(req, res, next) {
res.status(200).json(req.punkte);
});
module.exports = router;

49
routes/v1/schueler.js Normal file
View File

@ -0,0 +1,49 @@
const express = require('express');
const router = express.Router();
var cors = require('cors');
const bcrypt = require('bcrypt');
const randToken = require('rand-token');
const DEBUG = true;
router.param('schuelerId', function(req, res, next, id) {
req.schuelerId = id;
let query = " Select * from schueler ";
query += " WHERE id = $1";
if(DEBUG) console.log(query);
if(DEBUG) console.log(req.schuelerId);
req.db.query(query, [req.schuelerId], (err, rs) => {
if (err) {
return next(err)
}
req.schueler = rs.rows[0];
next();
})
});
/* GET recepies listing. */
router.get('/', function(req, res, next) {
let query = " Select * from schueler ";
if(DEBUG) console.log(query);
req.db.query(query, (err, rs) => {
if (err){
console.log(query);
next(err);
} else {
let result = {};
result['schueler'] = rs.rows;
console.log(result);
res.status(200).json(result);
}
});
});
/* Methods with id */
router.get('/:schuelerId', function(req, res, next) {
res.status(200).json(req.schueler);
});
module.exports = router;

51
routes/v1/schuljahr.js Normal file
View File

@ -0,0 +1,51 @@
const express = require('express');
const router = express.Router();
var cors = require('cors');
const bcrypt = require('bcrypt');
const randToken = require('rand-token');
const DEBUG = true;
router.param('schuljahrId', function(req, res, next, id) {
req.schuljahrId = id;
let query = " select * from schueler where id in (SELECT schuelerid from schueler_schuljahr where schuljahrid in (select id from schuljahr where name = $1)); ";
if(DEBUG) console.log(query);
if(DEBUG) console.log(req.schuljahrId);
req.db.query(query, [req.schuljahrId], (err, rs) => {
if (err) {
return next(err)
}
req.schuljahr = rs.rows;
next();
})
});
/* GET recepies listing. */
router.get('/', function(req, res, next) {
let query = " select schuljahr.id as id, schuljahr.name, count(*) as schueler from schueler"+
" join schueler_schuljahr on schueler_schuljahr.schuelerid = schueler.id"+
" join schuljahr on schueler_schuljahr.schuljahrid = schuljahr.id"+
" group by schuljahr.id , schuljahr.name";
if(DEBUG) console.log(query);
req.db.query(query, (err, rs) => {
if (err){
console.log(query);
next(err);
} else {
let result = {};
result['schuljahr'] = rs.rows;
console.log(result);
res.status(200).json(result);
}
});
});
/* Methods with id */
router.get('/:schuljahrId', function(req, res, next) {
res.status(200).json(req.schuljahr);
});
module.exports = router;