const express = require('express'); const router = express.Router(); const DEBUG = false; 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; if(isNaN(req.userId)) query = "Select id, name, email, kennwort, beschreibung FROM nutzer WHERE email ilike '"+req.userId+"'"; 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 "; 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;