124 lines
3.7 KiB
JavaScript
124 lines
3.7 KiB
JavaScript
const express = require('express');
|
|
const router = express.Router();
|
|
|
|
const DEBUG = true;
|
|
|
|
|
|
|
|
router.param('userId', function(req, res, next, id) {
|
|
req.userId = id;
|
|
let query = "Select id, name, email, kennwort, beschreibung FROM nutzer WHERE id ="+req.userId+" ORDER BY name";
|
|
if(isNaN(req.userId)) query = "Select id, name, email, kennwort, beschreibung FROM nutzer WHERE email ilike '"+req.userId+"'"+" ORDER BY name";
|
|
if(DEBUG) console.log(query);
|
|
req.db.query(query, (err, rs) => {
|
|
if (err) {
|
|
return next(err)
|
|
}
|
|
req.user = rs.rows[0];
|
|
next();
|
|
})
|
|
});
|
|
|
|
/* GET users listing. */
|
|
router.get('/', function(req, res, next) {
|
|
let query = "Select id, name, email, beschreibung FROM nutzer ORDER BY name";
|
|
if(!isNaN(req.query.active) && req.query.active==1) query = "Select id, name, email, beschreibung FROM nutzer where id in (select nutzer from rezept) ORDER BY name";
|
|
if(DEBUG) console.log("Request", req.query.active);
|
|
if(DEBUG) console.log(query);
|
|
req.db.query(query, (err, rs) => {
|
|
if (err){
|
|
next(err);
|
|
} else {
|
|
let result = {};
|
|
result['users'] = rs.rows;
|
|
console.log(result);
|
|
res.status(200).json(result);
|
|
}
|
|
});
|
|
});
|
|
|
|
router.post('/', function(req, res, next) {
|
|
let user = req.body.users[0];
|
|
|
|
let query = "INSERT INTO nutzer ( name, email, kennwort, beschreibung) "+
|
|
" VALUES ('"+user.name+"','"+user.email+"','"+hash+"','"+user.beschreibung+"')" +
|
|
" returning *";
|
|
if(DEBUG) console.log(query);
|
|
|
|
req.db.query(query, (err, rs) => {
|
|
if(err && err.constraint && err.constraint ==='idx_nutzer_email') {
|
|
return res.status(409).send("Email-adress already in use");
|
|
} else if (err){
|
|
next(err);
|
|
} else {
|
|
let result = {};
|
|
let user = {};
|
|
user['name'] = rs.rows[0].name;
|
|
user['email'] = rs.rows[0].email;
|
|
user['id'] = rs.rows[0].id;
|
|
user['beschreibung'] = rs.rows[0].beschreibung;
|
|
result['users'] = user;
|
|
res.status(200).json(result);
|
|
}
|
|
});
|
|
|
|
});
|
|
|
|
|
|
/* Methods with id */
|
|
router.get('/:userId', function(req, res, next) {
|
|
let user = {};
|
|
let result = {};
|
|
user['name'] = req.user.name;
|
|
user['email'] = req.user.email;
|
|
user['id'] = req.user.id;
|
|
user['beschreibung'] = req.user.beschreibung;
|
|
result['users'] = user;
|
|
res.status(200).json(result);
|
|
});
|
|
|
|
router.put('/:userId', function(req, res, next) {
|
|
let user = req.body.users[0];
|
|
let query = "UPDATE nutzer set name = '"+user.name+"', email='"+user.email+"', beschreibung = '"+user.beschreibung+"' "+
|
|
" WHERE id = "+req.userId +
|
|
" returning *";
|
|
if(DEBUG) console.log(query);
|
|
req.db.query(query, (err, rs) => {
|
|
if(err && err.constraint && err.constraint ==='idx_nutzer_email') {
|
|
return res.status(409).send("Email-adress already in use");
|
|
} else if (err){
|
|
next(err);
|
|
} else {
|
|
let result = {};
|
|
let user = {};
|
|
user['name'] = rs.rows[0].name;
|
|
user['email'] = rs.rows[0].email;
|
|
user['id'] = rs.rows[0].id;
|
|
user['beschreibung'] = rs.rows[0].beschreibung;
|
|
result['users'] = user;
|
|
res.status(200).json(result);
|
|
}
|
|
});
|
|
});
|
|
|
|
|
|
|
|
|
|
router.delete('/:userId', function(req, res, next) {
|
|
let query = [
|
|
"DELETE FROM nutzer_favorit where nutzer = $1;",
|
|
"DELETE FROM nutzer_kommentar where nutzer = $1;",
|
|
"DELETE FROM nutzer_rolle where nutzer = $1;",
|
|
"DELETE FROM nutzer where id = $1;"
|
|
];
|
|
for(let i = 0; i< query.length; i++) {
|
|
req.db.query(query[i], [req.userId], (err, rs) => {
|
|
if (err) next(err)
|
|
|
|
});
|
|
}
|
|
res.status(204).send();
|
|
});
|
|
|
|
module.exports = router;
|