hoginfo ergänzt
This commit is contained in:
parent
24e6e572a6
commit
3ec5ebd592
21
app.js
21
app.js
|
@ -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) {
|
||||
|
|
|
@ -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
|
||||
};
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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;",
|
||||
|
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
Loading…
Reference in New Issue