Default Project Structure
This commit is contained in:
parent
64e665869f
commit
77c1c089d5
|
@ -0,0 +1 @@
|
|||
node_modules
|
|
@ -0,0 +1,66 @@
|
|||
var createError = require('http-errors');
|
||||
var express = require('express');
|
||||
var path = require('path');
|
||||
var logger = require('morgan');
|
||||
var sassMiddleware = require('node-sass-middleware');
|
||||
|
||||
const db = require('./db')
|
||||
|
||||
const PORT = process.env.PORT || 4000;
|
||||
|
||||
var indexRouter = require('./routes/index');
|
||||
var usersRouter = require('./routes/users');
|
||||
var valuelistRouter = require('./routes/valuelist');
|
||||
var recepieRouter = require('./routes/recepie');
|
||||
|
||||
|
||||
var app = express();
|
||||
|
||||
// view engine setup
|
||||
app.set('views', path.join(__dirname, 'views'));
|
||||
app.set('view engine', 'pug');
|
||||
|
||||
app.use(logger('dev'));
|
||||
app.use(express.json());
|
||||
app.use(express.urlencoded({ extended: false }));
|
||||
app.use(sassMiddleware({
|
||||
src: path.join(__dirname, 'public'),
|
||||
dest: path.join(__dirname, 'public'),
|
||||
indentedSyntax: true, // true = .sass and false = .scss
|
||||
sourceMap: true
|
||||
}));
|
||||
app.use(express.static(path.join(__dirname, 'public')));
|
||||
|
||||
app.use('/', (req, res, next ) => {
|
||||
req.db = db;
|
||||
next();
|
||||
})
|
||||
|
||||
app.use('/', indexRouter);
|
||||
app.use('/users', usersRouter);
|
||||
app.use('/wl', valuelistRouter);
|
||||
app.use('/recepies', recepieRouter);
|
||||
|
||||
|
||||
// catch 404 and forward to error handler
|
||||
app.use(function(req, res, next) {
|
||||
next(createError(404));
|
||||
});
|
||||
|
||||
// error handler
|
||||
app.use(function(err, req, res, next) {
|
||||
// set locals, only providing error in development
|
||||
res.locals.message = err.message;
|
||||
res.locals.error = req.app.get('env') === 'development' ? err : {};
|
||||
|
||||
// render the error page
|
||||
res.status(err.status || 500);
|
||||
res.render('error');
|
||||
});
|
||||
|
||||
|
||||
app.listen(PORT, ()=> {
|
||||
console.log('Server listening on PORT '+PORT);
|
||||
})
|
||||
|
||||
module.exports = app;
|
|
@ -0,0 +1,90 @@
|
|||
#!/usr/bin/env node
|
||||
|
||||
/**
|
||||
* Module dependencies.
|
||||
*/
|
||||
|
||||
var app = require('../app');
|
||||
var debug = require('debug')('myrezeptapp:server');
|
||||
var http = require('http');
|
||||
|
||||
/**
|
||||
* Get port from environment and store in Express.
|
||||
*/
|
||||
|
||||
var port = normalizePort(process.env.PORT || '3000');
|
||||
app.set('port', port);
|
||||
|
||||
/**
|
||||
* Create HTTP server.
|
||||
*/
|
||||
|
||||
var server = http.createServer(app);
|
||||
|
||||
/**
|
||||
* Listen on provided port, on all network interfaces.
|
||||
*/
|
||||
|
||||
server.listen(port);
|
||||
server.on('error', onError);
|
||||
server.on('listening', onListening);
|
||||
|
||||
/**
|
||||
* Normalize a port into a number, string, or false.
|
||||
*/
|
||||
|
||||
function normalizePort(val) {
|
||||
var port = parseInt(val, 10);
|
||||
|
||||
if (isNaN(port)) {
|
||||
// named pipe
|
||||
return val;
|
||||
}
|
||||
|
||||
if (port >= 0) {
|
||||
// port number
|
||||
return port;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Event listener for HTTP server "error" event.
|
||||
*/
|
||||
|
||||
function onError(error) {
|
||||
if (error.syscall !== 'listen') {
|
||||
throw error;
|
||||
}
|
||||
|
||||
var bind = typeof port === 'string'
|
||||
? 'Pipe ' + port
|
||||
: 'Port ' + port;
|
||||
|
||||
// handle specific listen errors with friendly messages
|
||||
switch (error.code) {
|
||||
case 'EACCES':
|
||||
console.error(bind + ' requires elevated privileges');
|
||||
process.exit(1);
|
||||
break;
|
||||
case 'EADDRINUSE':
|
||||
console.error(bind + ' is already in use');
|
||||
process.exit(1);
|
||||
break;
|
||||
default:
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Event listener for HTTP server "listening" event.
|
||||
*/
|
||||
|
||||
function onListening() {
|
||||
var addr = server.address();
|
||||
var bind = typeof addr === 'string'
|
||||
? 'pipe ' + addr
|
||||
: 'port ' + addr.port;
|
||||
debug('Listening on ' + bind);
|
||||
}
|
|
@ -0,0 +1,182 @@
|
|||
// SQL-Class
|
||||
// Author: Thomas Mack
|
||||
|
||||
const DEBUG = true;
|
||||
|
||||
const { Pool } = require('pg');
|
||||
const pool = new Pool({
|
||||
user: 'postgres',
|
||||
host: 'localhost',
|
||||
database: 'bidat_cookbook',
|
||||
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+";";
|
||||
}
|
||||
|
||||
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;
|
||||
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 *";
|
||||
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);
|
||||
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();
|
||||
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);
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
module.exports = {
|
||||
query,
|
||||
selectAllFromTable,
|
||||
selectAllFromTableByFieldValue,
|
||||
deleteItemFromTable,
|
||||
updateNameKeyObject,
|
||||
insertNameKeyObject,
|
||||
deleteNameKeyObject,
|
||||
getAllFromTable,
|
||||
getStructure
|
||||
};
|
|
@ -0,0 +1,116 @@
|
|||
|
||||
const express = require('express');
|
||||
const router = express.Router();
|
||||
const pg = require('pg');
|
||||
const path = require('path');
|
||||
const { Pool } = require('pg');
|
||||
const pool = new Pool({
|
||||
user: 'postgres',
|
||||
host: 'localhost',
|
||||
database: 'hogwarts',
|
||||
password: 'postgres',
|
||||
port: 5432
|
||||
});
|
||||
|
||||
|
||||
pool.on('error', (err, client) => {
|
||||
console.error('Unexpected error on idle client', err)
|
||||
process.exit(-1)
|
||||
});
|
||||
|
||||
router.use(function(req, res, next) {
|
||||
res.header("Access-Control-Allow-Origin", "*");
|
||||
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
|
||||
next();
|
||||
});
|
||||
|
||||
/* GET home page. */
|
||||
router.get('/', function(req, res, next) {
|
||||
res.render('index', { title: 'Express' });
|
||||
});
|
||||
|
||||
|
||||
router.get('/api/v1/person', function(req, res, next) {
|
||||
const results = [];
|
||||
pool.connect((err, client, done) => {
|
||||
if (err) throw err
|
||||
client.query('SELECT * FROM v_person ORDER BY name ASC;', (err, rs) => {
|
||||
|
||||
for(var i= 0; i<rs.rows.length; i++) {
|
||||
results.push(rs.rows[i]);
|
||||
}
|
||||
console.log(err, rs);
|
||||
done();
|
||||
return res.json(results);
|
||||
|
||||
});
|
||||
//done();
|
||||
})
|
||||
});
|
||||
|
||||
|
||||
router.get('/api/v1/person/:person_id', function(req, res, next) {
|
||||
const results = [];
|
||||
const id = req.params.person_id;
|
||||
|
||||
pool.connect((err, client, done) => {
|
||||
if (err) throw err
|
||||
client.query('SELECT * FROM v_person WHERE id = $1;',[id], (err, rs) => {
|
||||
|
||||
for(var i= 0; i<rs.rows.length; i++) {
|
||||
results.push(rs.rows[i]);
|
||||
}
|
||||
console.log(err, rs);
|
||||
done();
|
||||
return res.json(results);
|
||||
|
||||
});
|
||||
})
|
||||
});
|
||||
|
||||
|
||||
router.get('/api/v1/schuljahr', function(req, res, next) {
|
||||
const results = [];
|
||||
pool.connect((err, client, done) => {
|
||||
if (err) throw err
|
||||
client.query('SELECT * FROM schuljahr ORDER BY von ASC;', (err, rs) => {
|
||||
|
||||
for(var i= 0; i<rs.rows.length; i++) {
|
||||
results.push(rs.rows[i]);
|
||||
}
|
||||
console.log(err, rs);
|
||||
done();
|
||||
return res.json(results);
|
||||
|
||||
});
|
||||
//done();
|
||||
})
|
||||
});
|
||||
|
||||
|
||||
router.get('/api/v1/punkte/:schuljahr', function(req, res, next) {
|
||||
const results = [];
|
||||
const id = req.params.schuljahr;
|
||||
const group = req.query.group;
|
||||
|
||||
var queryString = 'SELECT * FROM v_hauspunkte_small WHERE schuljahr = $1;';
|
||||
|
||||
if(group==1) queryString = 'SELECT schuljahr, haus, sum(punkte) FROM v_hauspunkte WHERE schuljahr = $1 GROUP BY schuljahr, haus;'
|
||||
|
||||
pool.connect((err, client, done) => {
|
||||
if (err) throw err
|
||||
client.query(queryString,[id], (err, rs) => {
|
||||
|
||||
for(var i= 0; i<rs.rows.length; i++) {
|
||||
results.push(rs.rows[i]);
|
||||
}
|
||||
console.log(err, rs);
|
||||
done();
|
||||
return res.json(results);
|
||||
|
||||
});
|
||||
})
|
||||
});
|
||||
|
||||
|
||||
module.exports = router;
|
|
@ -0,0 +1,191 @@
|
|||
// Todo Implement Database Connection
|
||||
|
||||
db.serialize(function() {
|
||||
db.run("CREATE TABLE" +" IF NOT EXISTS zutat" +
|
||||
" (" +
|
||||
" id bigserial PRIMARY KEY," +
|
||||
" schluessel text NOT NULL," +
|
||||
" name text NOT NULL," +
|
||||
" beschreibung text" +
|
||||
" );" +
|
||||
|
||||
);
|
||||
db.run("CREATE TABLE" +" IF NOT EXISTS einheit" +
|
||||
" (" +
|
||||
" id bigserial PRIMARY KEY," +
|
||||
" schluessel text NOT NULL," +
|
||||
" name text NOT NULL," +
|
||||
" beschreibung text" +
|
||||
" );" +
|
||||
|
||||
);
|
||||
db.run("CREATE TABLE" +" IF NOT EXISTS geraet" +
|
||||
" (" +
|
||||
" id bigserial PRIMARY KEY," +
|
||||
" schluessel text NOT NULL," +
|
||||
" name text NOT NULL," +
|
||||
" beschreibung text" +
|
||||
" );" +
|
||||
|
||||
);
|
||||
db.run("CREATE TABLE" +" IF NOT EXISTS kategorie" +
|
||||
" (" +
|
||||
" id bigserial PRIMARY KEY," +
|
||||
" schluessel text NOT NULL," +
|
||||
" name text NOT NULL," +
|
||||
" beschreibung text" +
|
||||
" );" +
|
||||
|
||||
);
|
||||
db.run("CREATE TABLE" +" IF NOT EXISTS wertungkategorie" +
|
||||
" (" +
|
||||
" id bigserial PRIMARY KEY," +
|
||||
" schluessel text NOT NULL," +
|
||||
" name text NOT NULL," +
|
||||
" beschreibung text" +
|
||||
" );" +
|
||||
|
||||
);
|
||||
db.run("CREATE TABLE" +" IF NOT EXISTS schwierigkeit" +
|
||||
" (" +
|
||||
" id bigserial PRIMARY KEY," +
|
||||
" schluessel text NOT NULL," +
|
||||
" name text NOT NULL," +
|
||||
" beschreibung text" +
|
||||
" );" +
|
||||
|
||||
);
|
||||
db.run("CREATE TABLE" +" IF NOT EXISTS rezept" +
|
||||
" (" +
|
||||
" id bigserial PRIMARY KEY," +
|
||||
" schluessel text NOT NULL," +
|
||||
" schwierigkeit bigint NOT NULL REFERENCES schwierigkeit(id)," +
|
||||
" name text NOT NULL," +
|
||||
" portionen NUMERIC NOT NULL DEFAULT 4.0," +
|
||||
" nutzer bigint NOT NULL REFERENCES nutzer(id)," +
|
||||
" beschreibung text" +
|
||||
" );" +
|
||||
|
||||
);
|
||||
db.run("CREATE TABLE" +" IF NOT EXISTS rezept_dauer" +
|
||||
" (" +
|
||||
" id bigserial PRIMARY KEY," +
|
||||
" rezept bigint NOT NULL REFERENCES rezept(id)," +
|
||||
" dauer interval NOT NULL," +
|
||||
" name text NOT NULL," +
|
||||
" sort INT NOT NULL DEFAULT 0," +
|
||||
" beschreibung text" +
|
||||
" );" +
|
||||
|
||||
);
|
||||
db.run("CREATE TABLE" +" IF NOT EXISTS rezept_zutat" +
|
||||
" (" +
|
||||
" id bigserial PRIMARY KEY," +
|
||||
" rezept bigint NOT NULL REFERENCES rezept(id)," +
|
||||
" einheit bigint NOT NULL REFERENCES einheit(id)," +
|
||||
" zutat bigint NOT NULL REFERENCES zutat(id)," +
|
||||
" menge NUMERIC," +
|
||||
" beschreibung text" +
|
||||
" );" +
|
||||
|
||||
);
|
||||
db.run("CREATE TABLE" +" IF NOT EXISTS rezept_geraet" +
|
||||
" (" +
|
||||
" id bigserial PRIMARY KEY," +
|
||||
" rezept bigint NOT NULL REFERENCES rezept(id)," +
|
||||
" einheit bigint NOT NULL REFERENCES einheit(id)," +
|
||||
" geraet bigint NOT NULL REFERENCES geraet(id)," +
|
||||
" menge NUMERIC," +
|
||||
" beschreibung text" +
|
||||
" );" +
|
||||
|
||||
);
|
||||
db.run("CREATE TABLE" +" IF NOT EXISTS rezept_schritt" +
|
||||
" (" +
|
||||
" id bigserial PRIMARY KEY," +
|
||||
" rezept bigint NOT NULL REFERENCES rezept(id)," +
|
||||
" sort INT NOT NULL DEFAULT 0," +
|
||||
" name text NOT NULL," +
|
||||
" beschreibung text NOT NULL" +
|
||||
" );" +
|
||||
|
||||
);
|
||||
db.run("CREATE TABLE" +" IF NOT EXISTS rezept_kategorie" +
|
||||
" (" +
|
||||
" id bigserial PRIMARY KEY," +
|
||||
" rezept bigint NOT NULL REFERENCES rezept(id)," +
|
||||
" kategorie bigint NOT NULL REFERENCES kategorie(id)," +
|
||||
" modifikator NUMERIC NOT NULL DEFAULT 1," +
|
||||
" beschreibung text NOT NULL" +
|
||||
" );" +
|
||||
|
||||
);
|
||||
db.run("CREATE TABLE" +" IF NOT EXISTS nutzer" +
|
||||
" (" +
|
||||
" id bigserial PRIMARY KEY," +
|
||||
" name text NOT NULL," +
|
||||
" email text NOT NULL," +
|
||||
" kennwort text NOT NULL," +
|
||||
" beschreibung text NOT NULL" +
|
||||
" );" +
|
||||
|
||||
);
|
||||
db.run("CREATE TABLE" +" IF NOT EXISTS rolle" +
|
||||
" (" +
|
||||
" id bigserial PRIMARY KEY," +
|
||||
" schluessel text NOT NULL," +
|
||||
" name text NOT NULL," +
|
||||
" beschreibung text" +
|
||||
" );" +
|
||||
|
||||
);
|
||||
db.run("CREATE TABLE" +" IF NOT EXISTS nutzer_rolle" +
|
||||
" (" +
|
||||
" id bigserial PRIMARY KEY," +
|
||||
" nutzer bigint NOT NULL REFERENCES nutzer(id)," +
|
||||
" rolle bigint NOT NULL REFERENCES rolle(id)," +
|
||||
" beschreibung text NOT NULL" +
|
||||
" );" +
|
||||
|
||||
);
|
||||
db.run("CREATE TABLE" +" IF NOT EXISTS nutzer_favorit" +
|
||||
" (" +
|
||||
" id bigserial PRIMARY KEY," +
|
||||
" nutzer bigint NOT NULL REFERENCES nutzer(id)," +
|
||||
" rezept bigint NOT NULL REFERENCES rezept(id)," +
|
||||
" beschreibung text NOT NULL" +
|
||||
" );" +
|
||||
|
||||
);
|
||||
db.run("CREATE TABLE" +" IF NOT EXISTS rezept_wertung" +
|
||||
" (" +
|
||||
" id bigserial PRIMARY KEY," +
|
||||
" nutzer bigint NOT NULL REFERENCES nutzer(id)," +
|
||||
" rezept bigint NOT NULL REFERENCES rezept(id)," +
|
||||
" wertungkategorie bigint NOT NULL REFERENCES wertungkategorie(id)," +
|
||||
" wert INTEGER NOT NULL DEFAULT 5," +
|
||||
" beschreibung text NOT NULL" +
|
||||
" );" +
|
||||
|
||||
);
|
||||
db.run("CREATE TABLE" +" IF NOT EXISTS nutzer_kommentar" +
|
||||
" (" +
|
||||
" id bigserial PRIMARY KEY," +
|
||||
" nutzer bigint NOT NULL REFERENCES nutzer(id)," +
|
||||
" relation text NOT NULL," +
|
||||
" relation_id bigint NOT NULL," +
|
||||
" beschreibung text NOT NULL" +
|
||||
);
|
||||
|
||||
db.run("CREATE UNIQUE INDEX idx_geraet_schluessel ON geraet (schluessel);");
|
||||
db.run("CREATE UNIQUE INDEX idx_einheit_schluessel ON einheit (schluessel);");
|
||||
db.run("CREATE UNIQUE INDEX idx_kategorie_schluessel ON kategorie (schluessel);");
|
||||
db.run("CREATE UNIQUE INDEX idx_schwierigket_schluessel ON schwierigkeit (schluessel);");
|
||||
db.run("CREATE UNIQUE INDEX idx_zutat_schluessel ON zutat (schluessel);");
|
||||
db.run("CREATE UNIQUE INDEX idx_rezept_schluessel ON rezept (schluessel);");
|
||||
db.run("CREATE UNIQUE INDEX idx_nutzer_email ON nutzer (email);");
|
||||
db.run("CREATE UNIQUE INDEX idx_wertungkategorie_email ON wertungkategorie (schluessel);")"
|
||||
|
||||
|
||||
);
|
||||
};
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,28 @@
|
|||
{
|
||||
"name": "bidatCookbook",
|
||||
"version": "0.5.0",
|
||||
"description": "Cookbook app for Families to share their recipies",
|
||||
"main": "app.js",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"start": "node ./bin/www"
|
||||
},
|
||||
"dependencies": {
|
||||
"bcrypt": "^3.0.3",
|
||||
"body-parser": "^1.18.3",
|
||||
"cors": "^2.8.5",
|
||||
"debug": "~2.6.9",
|
||||
"express": "~4.16.0",
|
||||
"express-session": "^1.15.6",
|
||||
"http-errors": "~1.6.2",
|
||||
"morgan": "~1.9.0",
|
||||
"node-sass-middleware": "0.11.0",
|
||||
"passport-local": "^1.0.0",
|
||||
"pg": "^7.7.1",
|
||||
"pug": "2.0.0-beta11",
|
||||
"rand-token": "^0.4.0",
|
||||
"react": "^16.7.0",
|
||||
"react-dom": "^15.6.1",
|
||||
"react-router-dom": "^4.2.2"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
body {
|
||||
padding: 50px;
|
||||
font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; }
|
||||
|
||||
a {
|
||||
color: #00B7FF; }
|
||||
|
||||
/*# sourceMappingURL=style.css.map */
|
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
"version": 3,
|
||||
"file": "style.css",
|
||||
"sources": [
|
||||
"style.sass"
|
||||
],
|
||||
"names": [],
|
||||
"mappings": "AAAA,AAAA,IAAI,CAAC;EACH,OAAO,EAAE,IAAI;EACb,IAAI,EAAE,kDAAkD,GAAG;;AAE7D,AAAA,CAAC,CAAC;EACA,KAAK,EAAE,OAAO,GAAG"
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
body
|
||||
padding: 50px
|
||||
font: 14px "Lucida Grande", Helvetica, Arial, sans-serif
|
||||
|
||||
a
|
||||
color: #00B7FF
|
|
@ -0,0 +1,9 @@
|
|||
var express = require('express');
|
||||
var router = express.Router();
|
||||
|
||||
/* GET home page. */
|
||||
router.get('/', function(req, res, next) {
|
||||
res.render('index', { title: 'Express' });
|
||||
});
|
||||
|
||||
module.exports = router;
|
|
@ -0,0 +1,165 @@
|
|||
const express = require('express');
|
||||
const router = express.Router();
|
||||
|
||||
const bcrypt = require('bcrypt');
|
||||
const randToken = require('rand-token');
|
||||
|
||||
const ingredientsRouter = require('./recepieIngredients');
|
||||
const toolsRouter = require('./recepieTools');
|
||||
const durationsRouter = require('./recepieDurations');
|
||||
|
||||
|
||||
const DEBUG = false;
|
||||
|
||||
|
||||
|
||||
router.param('recepieId', function(req, res, next, id) {
|
||||
req.recepieId = id;
|
||||
let query = " Select id, schluessel, schwierigkeit, name, portionen, nutzer, beschreibung, "+
|
||||
" (SELECT sum(dauer) FROM rezept_dauer WHERE rezept = $1) as overall_duration "+
|
||||
" FROM rezept ";
|
||||
if(isNaN(req.recepieId)) {
|
||||
query += " WHERE schluessel ilike '$1'";
|
||||
} else {
|
||||
query += " WHERE id = $1";
|
||||
}
|
||||
if(DEBUG) console.log(query);
|
||||
req.db.query(query, [req.recepieId], (err, rs) => {
|
||||
if (err) {
|
||||
return next(err)
|
||||
}
|
||||
req.recepie = rs.rows[0];
|
||||
next();
|
||||
})
|
||||
});
|
||||
|
||||
router.use('/:recepieId/ingredients/', ingredientsRouter);
|
||||
router.use('/:recepieId/tools/', toolsRouter);
|
||||
router.use('/:recepieId/durations/', durationsRouter);
|
||||
|
||||
/* GET recepies listing. */
|
||||
router.get('/', function(req, res, next) {
|
||||
let query = "Select * FROM rezept ";
|
||||
if(DEBUG) console.log(query);
|
||||
req.db.query(query, (err, rs) => {
|
||||
if (err){
|
||||
next(err);
|
||||
} else {
|
||||
let result = {};
|
||||
result['recepies'] = rs.rows;
|
||||
console.log(result);
|
||||
res.status(200).json(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
router.post('/', function(req, res, next) {
|
||||
let recepie = req.body.recepies[0];
|
||||
if(!recepie.schluessel) recepie.schluessel = randToken.uid(8);
|
||||
if(!recepie.schwierigkeit || !recepie.name || !recepie.nutzer) {
|
||||
return res.status(400).send("Wrong Params")
|
||||
}
|
||||
|
||||
|
||||
let query = "INSERT INTO rezept (nutzer, name, schluessel, schwierigkeit, portionen, beschreibung) "+
|
||||
" VALUES ($1, $2, $3, $4, $5, $6)" +
|
||||
" returning *";
|
||||
let values = [recepie.nutzer, recepie.name, recepie.schluessel, recepie.schwierigkeit, recepie.portionen, recepie.beschreibung];
|
||||
|
||||
if(DEBUG) console.log(query);
|
||||
|
||||
req.db.query(query, values, (err, rs) => {
|
||||
if(err && err.constraint && err.constraint ==='idx_rezept_email') {
|
||||
return res.status(409).send("Email-adress already in use");
|
||||
} else if (err){
|
||||
next(err);
|
||||
} else {
|
||||
let result = {};
|
||||
result['recepies'] = rs.rows[0];
|
||||
res.status(200).json(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
/* Methods with id */
|
||||
router.get('/:recepieId', function(req, res, next) {
|
||||
res.status(200).json(req.recepie);
|
||||
});
|
||||
|
||||
router.put('/:recepieId', function(req, res, next) {
|
||||
let recepie = req.body.recepies[0];
|
||||
let query = "UPDATE rezept set name = '"+recepie.name+"', email='"+recepie.email+"', beschreibung = '"+recepie.beschreibung+"' "+
|
||||
" WHERE id = "+req.recepieId +
|
||||
" returning *";
|
||||
if(DEBUG) console.log(query);
|
||||
req.db.query(query, (err, rs) => {
|
||||
if (err){
|
||||
next(err);
|
||||
} else {
|
||||
let result = {};
|
||||
result['recepies'] = rs.rows[0];
|
||||
res.status(200).json(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
router.put('/:recepieId/changepasswd', function(req, res, next) {
|
||||
let recepie = req.body.recepies[0];
|
||||
|
||||
let oldPasswd = req.body.recepies[0]['oldPasswd'];
|
||||
let newPasswd = req.body.recepies[0]['newPasswd'];
|
||||
|
||||
if(!oldPasswd || !newPasswd) {
|
||||
return res.status(400).send("Wrong Params");
|
||||
}
|
||||
|
||||
bcrypt.compare(oldPasswd, req.recepie.kennwort, function(err, checkResult) {
|
||||
console.log("Compare: "+oldPasswd+" WITH "+req.recepie.kennwort+" Result:");
|
||||
console.log(checkResult);
|
||||
if(checkResult) {
|
||||
bcrypt.hash('myPassword', 10, function(err, hash) {
|
||||
let query = "UPDATE rezept set kennwort = '"+hash+"'"+
|
||||
" WHERE id = "+req.recepieId +
|
||||
" returning *";
|
||||
req.db.query(query, (err, rs) => {
|
||||
if (err){
|
||||
next(err);
|
||||
} else {
|
||||
let result = {};
|
||||
let recepie = {};
|
||||
recepie['name'] = rs.rows[0].name;
|
||||
recepie['email'] = rs.rows[0].email;
|
||||
recepie['id'] = rs.rows[0].id;
|
||||
recepie['beschreibung'] = rs.rows[0].beschreibung;
|
||||
result['recepies'] = recepie;
|
||||
console.log(result);
|
||||
res.status(200).json(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
} else {
|
||||
console.log(err);
|
||||
res.status(409).send("Old Passwd didn't match");
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
|
||||
router.delete('/:recepieId', function(req, res, next) {
|
||||
let query = [
|
||||
"DELETE FROM rezept_favorit where rezept = $1;",
|
||||
"DELETE FROM rezept_kommentar where rezept = $1;",
|
||||
"DELETE FROM rezept_rolle where rezept = $1;",
|
||||
"DELETE FROM rezept where id = $1;"
|
||||
];
|
||||
for(let i = 0; i< query.length; i++) {
|
||||
req.db.query(query[i], [req.recepieId], (err, rs) => {
|
||||
if (err) next(err)
|
||||
|
||||
});
|
||||
}
|
||||
res.status(204).send();
|
||||
});
|
||||
|
||||
module.exports = router;
|
|
@ -0,0 +1,97 @@
|
|||
const express = require('express');
|
||||
const router = express.Router({mergeParams:true});
|
||||
|
||||
const bcrypt = require('bcrypt');
|
||||
const randToken = require('rand-token');
|
||||
|
||||
const DEBUG = false;
|
||||
|
||||
router.param('durationId', function(req, res, next, id) {
|
||||
req.durationId = id;
|
||||
let query = " Select rezept_dauer.id, dauer, name, sort, beschreibung "+
|
||||
" FROM rezept_dauer "+
|
||||
" WHERE rezept =$1 AND rezept_dauer.id = $2";
|
||||
if(DEBUG) console.log(query);
|
||||
req.db.query(query, [req.recepieId, req.durationId], (err, rs) => {
|
||||
if (err) {
|
||||
return next(err)
|
||||
}
|
||||
req.recepieDuration = rs.rows[0];
|
||||
next();
|
||||
})
|
||||
});
|
||||
|
||||
/* GET recepieDurations listing. */
|
||||
router.get('/', function(req, res, next) {
|
||||
let query = " Select rezept_dauer.id, dauer, name, sort, beschreibung "+
|
||||
" FROM rezept_dauer "+
|
||||
" WHERE rezept =$1";
|
||||
if(DEBUG) console.log(query);
|
||||
req.db.query(query,[req.recepieId], (err, rs) => {
|
||||
if (err){
|
||||
next(err);
|
||||
} else {
|
||||
let result = {};
|
||||
result['recepieDurations'] = rs.rows;
|
||||
console.log(result);
|
||||
res.status(200).json(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
router.post('/', function(req, res, next) {
|
||||
let recepieDuration = req.body.recepieDurations[0];
|
||||
if(!recepieDuration.dauer || !recepieDuration.name || !recepieDuration.sort) {
|
||||
return res.status(400).send("Wrong Params")
|
||||
}
|
||||
let query = "INSERT INTO rezept_dauer (rezept, dauer, name, sort, beschreibung) "+
|
||||
" VALUES ($1, $2, $3, $4, $5)" +
|
||||
" returning *";
|
||||
let values = [req.recepieId, recepieDuration.dauer, recepieDuration.name, recepieDuration.sort, recepieDuration.beschreibung];
|
||||
|
||||
if(DEBUG) console.log(query);
|
||||
|
||||
req.db.query(query, values, (err, rs) => {
|
||||
if (err){
|
||||
next(err);
|
||||
} else {
|
||||
let result = {};
|
||||
result['recepieDurations'] = rs.rows[0];
|
||||
res.status(200).json(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
/* Methods with id */
|
||||
router.get('/:durationId', function(req, res, next) {
|
||||
res.status(200).json(req.recepieDuration);
|
||||
});
|
||||
|
||||
router.put('/:durationId', function(req, res, next) {
|
||||
let recepieDuration = req.body.recepieDurations[0];
|
||||
let query = "UPDATE rezept_dauer set name = $1, dauer = $2, sort =$3, beschreibung =$4"+
|
||||
" WHERE id = "+req.durationId +
|
||||
" returning *";
|
||||
let values = [recepieDuration.name, recepieDuration.dauer, recepieDuration.sort, recepieDuration.beschreibung];
|
||||
|
||||
if(DEBUG) console.log(query);
|
||||
req.db.query(query, values, (err, rs) => {
|
||||
if (err){
|
||||
next(err);
|
||||
} else {
|
||||
let result = {};
|
||||
result['recepieDurations'] = rs.rows[0];
|
||||
res.status(200).json(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
router.delete('/:durationId', function(req, res, next) {
|
||||
let query = "DELETE FROM rezept_dauer where id = $1;";
|
||||
req.db.query(query, [req.durationId], (err, rs) => {
|
||||
if (err) next(err)
|
||||
});
|
||||
res.status(204).send();
|
||||
});
|
||||
|
||||
module.exports = router;
|
|
@ -0,0 +1,101 @@
|
|||
const express = require('express');
|
||||
const router = express.Router({mergeParams:true});
|
||||
|
||||
const bcrypt = require('bcrypt');
|
||||
const randToken = require('rand-token');
|
||||
|
||||
const DEBUG = false;
|
||||
|
||||
router.param('ingredientId', function(req, res, next, id) {
|
||||
req.ingredientId = id;
|
||||
let query = " Select rezept_zutat.id, rezept, einheit, einheit.name as einheitname, einheit.schluessel as einheitschluessel , zutat, zutat.name as zutatname, menge "+
|
||||
" FROM rezept_zutat "+
|
||||
" JOIN zutat on zutat.id = zutat "+
|
||||
" JOIN einheit on einheit.id = einheit "+
|
||||
" WHERE rezept =$1 AND rezept_zutat.id = $2";
|
||||
if(DEBUG) console.log(query);
|
||||
req.db.query(query, [req.recepieId, req.ingredientId], (err, rs) => {
|
||||
if (err) {
|
||||
return next(err)
|
||||
}
|
||||
req.recepieIngredient = rs.rows[0];
|
||||
next();
|
||||
})
|
||||
});
|
||||
|
||||
/* GET recepieIngredients listing. */
|
||||
router.get('/', function(req, res, next) {
|
||||
let query = " Select rezept_zutat.id, rezept, einheit, einheit.name as einheitname, einheit.schluessel as einheitschluessel , zutat, zutat.name as zutatname, menge "+
|
||||
" FROM rezept_zutat "+
|
||||
" JOIN zutat on zutat.id = zutat "+
|
||||
" JOIN einheit on einheit.id = einheit "+
|
||||
" WHERE rezept =$1";
|
||||
if(DEBUG) console.log(query);
|
||||
req.db.query(query,[req.recepieId], (err, rs) => {
|
||||
if (err){
|
||||
next(err);
|
||||
} else {
|
||||
let result = {};
|
||||
result['recepieIngredients'] = rs.rows;
|
||||
console.log(result);
|
||||
res.status(200).json(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
router.post('/', function(req, res, next) {
|
||||
let recepieIngredient = req.body.recepieIngredients[0];
|
||||
if(!recepieIngredient.zutat || !recepieIngredient.einheit || !recepieIngredient.menge) {
|
||||
return res.status(400).send("Wrong Params")
|
||||
}
|
||||
let query = "INSERT INTO rezept_zutat (rezept, menge, einheit, zutat, beschreibung) "+
|
||||
" VALUES ($1, $2, $3, $4, $5)" +
|
||||
" returning *";
|
||||
let values = [req.recepieId, recepieIngredient.menge, recepieIngredient.einheit, recepieIngredient.zutat, recepieIngredient.beschreibung];
|
||||
|
||||
if(DEBUG) console.log(query);
|
||||
|
||||
req.db.query(query, values, (err, rs) => {
|
||||
if (err){
|
||||
next(err);
|
||||
} else {
|
||||
let result = {};
|
||||
result['recepieIngredients'] = rs.rows[0];
|
||||
res.status(200).json(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
/* Methods with id */
|
||||
router.get('/:ingredientId', function(req, res, next) {
|
||||
res.status(200).json(req.recepieIngredient);
|
||||
});
|
||||
|
||||
router.put('/:ingredientId', function(req, res, next) {
|
||||
let recepieIngredient = req.body.recepieIngredients[0];
|
||||
let query = "UPDATE rezept_zutat set menge = $1, einheit = $2, zutat =$3, beschreibung =$4"+
|
||||
" WHERE id = "+req.ingredientId +
|
||||
" returning *";
|
||||
let values = [recepieIngredient.menge, recepieIngredient.einheit, recepieIngredient.zutat, recepieIngredient.beschreibung];
|
||||
|
||||
if(DEBUG) console.log(query);
|
||||
req.db.query(query, values, (err, rs) => {
|
||||
if (err){
|
||||
next(err);
|
||||
} else {
|
||||
let result = {};
|
||||
result['recepieIngredients'] = rs.rows[0];
|
||||
res.status(200).json(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
router.delete('/:ingredientId', function(req, res, next) {
|
||||
let query = "DELETE FROM rezept_zutat where id = $1;";
|
||||
req.db.query(query, [req.ingredientId], (err, rs) => {
|
||||
if (err) next(err)
|
||||
});
|
||||
res.status(204).send();
|
||||
});
|
||||
|
||||
module.exports = router;
|
|
@ -0,0 +1,97 @@
|
|||
const express = require('express');
|
||||
const router = express.Router({mergeParams:true});
|
||||
|
||||
const bcrypt = require('bcrypt');
|
||||
const randToken = require('rand-token');
|
||||
|
||||
const DEBUG = false;
|
||||
|
||||
router.param('stepId', function(req, res, next, id) {
|
||||
req.stepId = id;
|
||||
let query = " Select rezept_schritt.id, dauer, name, sort, beschreibung "+
|
||||
" FROM rezept_schritt "+
|
||||
" WHERE rezept =$1 AND rezept_schritt.id = $2";
|
||||
if(DEBUG) console.log(query);
|
||||
req.db.query(query, [req.recepieId, req.stepId], (err, rs) => {
|
||||
if (err) {
|
||||
return next(err)
|
||||
}
|
||||
req.recepieStep = rs.rows[0];
|
||||
next();
|
||||
})
|
||||
});
|
||||
|
||||
/* GET recepieSteps listing. */
|
||||
router.get('/', function(req, res, next) {
|
||||
let query = " Select rezept_schritt.id, dauer, name, sort, beschreibung "+
|
||||
" FROM rezept_schritt "+
|
||||
" WHERE rezept =$1";
|
||||
if(DEBUG) console.log(query);
|
||||
req.db.query(query,[req.recepieId], (err, rs) => {
|
||||
if (err){
|
||||
next(err);
|
||||
} else {
|
||||
let result = {};
|
||||
result['recepieSteps'] = rs.rows;
|
||||
console.log(result);
|
||||
res.status(200).json(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
router.post('/', function(req, res, next) {
|
||||
let recepieStep = req.body.recepieSteps[0];
|
||||
if(!recepieStep.dauer || !recepieStep.name || !recepieStep.sort) {
|
||||
return res.status(400).send("Wrong Params")
|
||||
}
|
||||
let query = "INSERT INTO rezept_schritt (rezept, dauer, name, sort, beschreibung) "+
|
||||
" VALUES ($1, $2, $3, $4, $5)" +
|
||||
" returning *";
|
||||
let values = [req.recepieId, recepieStep.dauer, recepieStep.name, recepieStep.sort, recepieStep.beschreibung];
|
||||
|
||||
if(DEBUG) console.log(query);
|
||||
|
||||
req.db.query(query, values, (err, rs) => {
|
||||
if (err){
|
||||
next(err);
|
||||
} else {
|
||||
let result = {};
|
||||
result['recepieSteps'] = rs.rows[0];
|
||||
res.status(200).json(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
/* Methods with id */
|
||||
router.get('/:stepId', function(req, res, next) {
|
||||
res.status(200).json(req.recepieStep);
|
||||
});
|
||||
|
||||
router.put('/:stepId', function(req, res, next) {
|
||||
let recepieStep = req.body.recepieSteps[0];
|
||||
let query = "UPDATE rezept_schritt set name = $1, dauer = $2, sort =$3, beschreibung =$4"+
|
||||
" WHERE id = "+req.stepId +
|
||||
" returning *";
|
||||
let values = [recepieStep.name, recepieStep.dauer, recepieStep.sort, recepieStep.beschreibung];
|
||||
|
||||
if(DEBUG) console.log(query);
|
||||
req.db.query(query, values, (err, rs) => {
|
||||
if (err){
|
||||
next(err);
|
||||
} else {
|
||||
let result = {};
|
||||
result['recepieSteps'] = rs.rows[0];
|
||||
res.status(200).json(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
router.delete('/:stepId', function(req, res, next) {
|
||||
let query = "DELETE FROM rezept_schritt where id = $1;";
|
||||
req.db.query(query, [req.stepId], (err, rs) => {
|
||||
if (err) next(err)
|
||||
});
|
||||
res.status(204).send();
|
||||
});
|
||||
|
||||
module.exports = router;
|
|
@ -0,0 +1,103 @@
|
|||
const express = require('express');
|
||||
const router = express.Router({mergeParams:true});
|
||||
|
||||
const bcrypt = require('bcrypt');
|
||||
const randToken = require('rand-token');
|
||||
|
||||
const DEBUG = false;
|
||||
|
||||
router.param('toolId', function(req, res, next, id) {
|
||||
req.toolId = id;
|
||||
let query = " Select rezept_geraet.id, rezept, einheit, einheit.name as einheitname, einheit.schluessel as einheitschluessel ,"+
|
||||
" geraet, geraet.name as geraetname, menge, rezept_geraet.beschreibung "+
|
||||
" FROM rezept_geraet "+
|
||||
" JOIN geraet on geraet.id = geraet "+
|
||||
" JOIN einheit on einheit.id = einheit "+
|
||||
" WHERE rezept =$1 AND rezept_geraet.id = $2";
|
||||
if(DEBUG) console.log(query);
|
||||
req.db.query(query, [req.recepieId, req.toolId], (err, rs) => {
|
||||
if (err) {
|
||||
return next(err)
|
||||
}
|
||||
req.recepieTool = rs.rows[0];
|
||||
next();
|
||||
})
|
||||
});
|
||||
|
||||
/* GET recepieTools listing. */
|
||||
router.get('/', function(req, res, next) {
|
||||
let query = " Select rezept_geraet.id, rezept, einheit, einheit.name as einheitname, einheit.schluessel as einheitschluessel , "+
|
||||
" geraet, geraet.name as geraetname, menge, rezept_geraet.beschreibung "+
|
||||
" FROM rezept_geraet "+
|
||||
" JOIN geraet on geraet.id = geraet "+
|
||||
" JOIN einheit on einheit.id = einheit "+
|
||||
" WHERE rezept =$1";
|
||||
if(DEBUG) console.log(query);
|
||||
req.db.query(query,[req.recepieId], (err, rs) => {
|
||||
if (err){
|
||||
next(err);
|
||||
} else {
|
||||
let result = {};
|
||||
result['recepieTools'] = rs.rows;
|
||||
console.log(result);
|
||||
res.status(200).json(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
router.post('/', function(req, res, next) {
|
||||
let recepieTool = req.body.recepieTools[0];
|
||||
if(!recepieTool.geraet || !recepieTool.einheit || !recepieTool.menge) {
|
||||
return res.status(400).send("Wrong Params")
|
||||
}
|
||||
let query = "INSERT INTO rezept_geraet (rezept, menge, einheit, geraet, beschreibung) "+
|
||||
" VALUES ($1, $2, $3, $4, $5)" +
|
||||
" returning *";
|
||||
let values = [req.recepieId, recepieTool.menge, recepieTool.einheit, recepieTool.geraet, recepieTool.beschreibung];
|
||||
|
||||
if(DEBUG) console.log(query);
|
||||
|
||||
req.db.query(query, values, (err, rs) => {
|
||||
if (err){
|
||||
next(err);
|
||||
} else {
|
||||
let result = {};
|
||||
result['recepieTools'] = rs.rows[0];
|
||||
res.status(200).json(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
/* Methods with id */
|
||||
router.get('/:toolId', function(req, res, next) {
|
||||
res.status(200).json(req.recepieTool);
|
||||
});
|
||||
|
||||
router.put('/:toolId', function(req, res, next) {
|
||||
let recepieTool = req.body.recepieTools[0];
|
||||
let query = "UPDATE rezept_geraet set menge = $1, einheit = $2, geraet =$3, beschreibung =$4"+
|
||||
" WHERE id = "+req.toolId +
|
||||
" returning *";
|
||||
let values = [recepieTool.menge, recepieTool.einheit, recepieTool.geraet, recepieTool.beschreibung];
|
||||
|
||||
if(DEBUG) console.log(query);
|
||||
req.db.query(query, values, (err, rs) => {
|
||||
if (err){
|
||||
next(err);
|
||||
} else {
|
||||
let result = {};
|
||||
result['recepieTools'] = rs.rows[0];
|
||||
res.status(200).json(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
router.delete('/:toolId', function(req, res, next) {
|
||||
let query = "DELETE FROM rezept_geraet where id = $1;";
|
||||
req.db.query(query, [req.toolId], (err, rs) => {
|
||||
if (err) next(err)
|
||||
});
|
||||
res.status(204).send();
|
||||
});
|
||||
|
||||
module.exports = router;
|
|
@ -0,0 +1,162 @@
|
|||
const express = require('express');
|
||||
const router = express.Router();
|
||||
|
||||
const bcrypt = require('bcrypt');
|
||||
|
||||
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];
|
||||
bcrypt.hash(user.kennwort, 10, function(err, hash) {
|
||||
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.put('/:userId/changepasswd', function(req, res, next) {
|
||||
let user = req.body.users[0];
|
||||
|
||||
let oldPasswd = req.body.users[0]['oldPasswd'];
|
||||
let newPasswd = req.body.users[0]['newPasswd'];
|
||||
|
||||
if(!oldPasswd || !newPasswd) {
|
||||
return res.status(400).send("Wrong Params");
|
||||
}
|
||||
|
||||
bcrypt.compare(oldPasswd, req.user.kennwort, function(err, checkResult) {
|
||||
console.log("Compare: "+oldPasswd+" WITH "+req.user.kennwort+" Result:");
|
||||
console.log(checkResult);
|
||||
if(checkResult) {
|
||||
bcrypt.hash('myPassword', 10, function(err, hash) {
|
||||
let query = "UPDATE nutzer set kennwort = '"+hash+"'"+
|
||||
" WHERE id = "+req.userId +
|
||||
" returning *";
|
||||
req.db.query(query, (err, rs) => {
|
||||
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;
|
||||
console.log(result);
|
||||
res.status(200).json(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
} else {
|
||||
console.log(err);
|
||||
res.status(409).send("Old Passwd didn't match");
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
|
||||
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;
|
|
@ -0,0 +1,68 @@
|
|||
var express = require('express');
|
||||
var router = express.Router();
|
||||
|
||||
|
||||
const { selectAllFromTable,
|
||||
selectAllFromTableByFieldValue,
|
||||
deleteItemFromTable,
|
||||
updateNameKeyObject,
|
||||
insertNameKeyObject,
|
||||
deleteNameKeyObject,
|
||||
getAllFromTable,
|
||||
getStructure} = require('./../db/');
|
||||
|
||||
|
||||
|
||||
router.param('id', function(req, res, next, id) {
|
||||
req.itemId = id;
|
||||
console.log(req.body);
|
||||
let structure = getStructure(req);
|
||||
req[structure.jsonName] = req.body;
|
||||
next();
|
||||
});
|
||||
|
||||
router.param('path', function(req, res, next, id) {
|
||||
let test = id;
|
||||
req.pathCall = test.replace(/\//g,"");
|
||||
next();
|
||||
});
|
||||
|
||||
/* GET users listing. */
|
||||
router.get('/:path', function(req, res, next) {
|
||||
getAllFromTable(req, res, next)
|
||||
});
|
||||
|
||||
router.put('/:path/:id', function(req, res, next) {
|
||||
console.log("Update WL");
|
||||
updateNameKeyObject(req, res, next)
|
||||
});
|
||||
|
||||
router.post('/:path', function(req, res, next) {
|
||||
console.log("Insert WL");
|
||||
insertNameKeyObject(req, res, next)
|
||||
});
|
||||
|
||||
router.delete('/:path/:id', function(req, res, next) {
|
||||
console.log("Delete WL");
|
||||
deleteNameKeyObject(req, res, next)
|
||||
});
|
||||
|
||||
|
||||
router.post('/', function(req, res, next) {
|
||||
res.send('CreateUser');
|
||||
});
|
||||
|
||||
/* Methods with id */
|
||||
router.get('/:userId', function(req, res, next) {
|
||||
res.send(req.user);
|
||||
});
|
||||
|
||||
router.put('/:userId', function(req, res, next) {
|
||||
res.send('Update a User');
|
||||
});
|
||||
|
||||
router.delete('/:userId', function(req, res, next) {
|
||||
res.send('Delete User');
|
||||
});
|
||||
|
||||
module.exports = router;
|
|
@ -0,0 +1,144 @@
|
|||
const db = require('./db')
|
||||
|
||||
|
||||
let defaultZutaten = [
|
||||
"Mehl",
|
||||
"Zucker",
|
||||
"Milch",
|
||||
"Wasser",
|
||||
"Rotwein",
|
||||
"Weißwein",
|
||||
"Gemüsebrühe",
|
||||
"Puderzucker",
|
||||
"Vanillezucker",
|
||||
"Salz",
|
||||
"Pfeffer",
|
||||
"Paprika",
|
||||
"Kräuter der Provence",
|
||||
"Basilikum",
|
||||
"Weißbrot",
|
||||
"Kartoffeln",
|
||||
"Kartoffeln (mehlig)",
|
||||
"Kartoffeln (festkochend)",
|
||||
"Reis",
|
||||
"Nudeln",
|
||||
"Kroketten",
|
||||
"Spätzle",
|
||||
"Hähnchenbrustfilet",
|
||||
"Putenschnitzel",
|
||||
"Rindfleisch",
|
||||
"Kalbfleisch",
|
||||
"Rindersteak",
|
||||
"Rinderhackfleisch",
|
||||
"Hackfleisch gemischt",
|
||||
"Schweineschnitzel",
|
||||
"Schweinekotelett",
|
||||
"Ente",
|
||||
"Gans",
|
||||
"Käse",
|
||||
"Frischkäse",
|
||||
"Kräuterquark",
|
||||
"Quark",
|
||||
"Mozzarella",
|
||||
"Parmesan",
|
||||
"Speisequark (40 % Fett)",
|
||||
"Camembert",
|
||||
"Gouda",
|
||||
"Edamer",
|
||||
"Raclette",
|
||||
"Mascarpone",
|
||||
"Schinken (gekocht)",
|
||||
"Schinken (roh)",
|
||||
"Schinken (geräuchert)",
|
||||
"Salami",
|
||||
"Oliven schwarz",
|
||||
"Butter",
|
||||
"Butterschmalz",
|
||||
"Olivenöl",
|
||||
"Rapsöl",
|
||||
"Sonnenblumenöl",
|
||||
"Margarine",
|
||||
"Honig",
|
||||
"Marmelade",
|
||||
"Konfitüre",
|
||||
"Nussnougatcreme",
|
||||
"Eier",
|
||||
"Joghurt, 1,5 % Fett",
|
||||
"Joghurt, 3,5 % Fett",
|
||||
"Seelachs",
|
||||
"Zander",
|
||||
"Kabeljau",
|
||||
"Garnelen",
|
||||
"Krabben",
|
||||
"Forelle",
|
||||
"Makrele",
|
||||
"Lachs",
|
||||
"Lachs (geräuchert)",
|
||||
"Heringsfilet",
|
||||
"passierte Tomaten",
|
||||
"Saure Sahne",
|
||||
"Pesto (rot)",
|
||||
"Pesto (grün)",
|
||||
"Mayonnaise",
|
||||
"Sahne",
|
||||
"Crème fraiche",
|
||||
"Nüsse",
|
||||
"Mandeln",
|
||||
"Apfelmus",
|
||||
"Preiselbeeren",
|
||||
"Schokolade (Vollmilch)",
|
||||
"Schokolade (Zartbitter)",
|
||||
"Kuvertüre (Vollmilch)",
|
||||
"Kuvertüre (Zartbitter)",
|
||||
"Marzipan",
|
||||
"Hefe"
|
||||
];
|
||||
|
||||
let defaultSchwierigkeiten = [
|
||||
"leicht",
|
||||
"mittel",
|
||||
"anspruchsvoll"
|
||||
];
|
||||
|
||||
|
||||
let defaultWertungskategorien = [
|
||||
{ "name":"Gesamtwertung",
|
||||
"schluessel":"sum"},
|
||||
{ "name":"Kosten",
|
||||
"schluessel":"kosten"}
|
||||
|
||||
];
|
||||
|
||||
const makeKey = (input) => {
|
||||
let result = input.toLowerCase();
|
||||
result = result.replace(/[\(\)]/g,"");
|
||||
result = result.replace(/[%,. ]/g,"_");
|
||||
return result;
|
||||
//console.log(result);
|
||||
|
||||
}
|
||||
|
||||
for(let i = 0; i<defaultSchwierigkeiten.length; i++) {
|
||||
let query = "INSERT INTO schwierigkeit (name, schluessel) "+
|
||||
"VALUES ($1, $2) returning *";
|
||||
db.query(query, [defaultSchwierigkeiten[i], makeKey(defaultSchwierigkeiten[i])], (err, rs) => {
|
||||
console.log(err);
|
||||
})
|
||||
}
|
||||
|
||||
for(let i = 0; i<defaultWertungskategorien.length; i++) {
|
||||
let query = "INSERT INTO wertungkategorie (name, schluessel) "+
|
||||
"VALUES ($1, $2) returning *";
|
||||
db.query(query, [defaultWertungskategorien[i]['name'], makeKey(defaultWertungskategorien[i]['schluessel'])], (err, rs) => {
|
||||
console.log(err);
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
for(let i = 0; i<defaultZutaten.length; i++) {
|
||||
let query = "INSERT INTO zutat (name, schluessel) "+
|
||||
"VALUES ($1, $2) returning *";
|
||||
db.query(query, [defaultZutaten[i], makeKey(defaultZutaten[i])], (err, rs) => {
|
||||
console.log(err);
|
||||
})
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
// codecademy Project Cap2
|
||||
const express = require('express');
|
||||
const morgan = require('morgan');
|
||||
const cors = require('cors');
|
||||
const sqlite3 = require('sqlite3');
|
||||
const errorhandler = require('errorhandler');
|
||||
|
||||
const bodyParser = require('body-parser');
|
||||
const apiRouter = require('./api/api');
|
||||
|
||||
const DEBUG = true;
|
||||
|
||||
const PORT = process.env.PORT || 4000;
|
||||
|
||||
const app = express();
|
||||
|
||||
app.use(bodyParser.json());
|
||||
app.use(morgan('tiny'));
|
||||
app.use(cors());
|
||||
|
||||
app.use('/api', apiRouter);
|
||||
|
||||
app.use(errorhandler());
|
||||
|
||||
// INIT server
|
||||
app.listen(PORT, ()=> {
|
||||
console.log('Server listening on PORT '+PORT);
|
||||
})
|
||||
|
||||
module.exports = app;
|
|
@ -0,0 +1,6 @@
|
|||
extends layout
|
||||
|
||||
block content
|
||||
h1= message
|
||||
h2= error.status
|
||||
pre #{error.stack}
|
|
@ -0,0 +1,5 @@
|
|||
extends layout
|
||||
|
||||
block content
|
||||
h1= title
|
||||
p Welcome to #{title}
|
|
@ -0,0 +1,7 @@
|
|||
doctype html
|
||||
html
|
||||
head
|
||||
title= title
|
||||
link(rel='stylesheet', href='/stylesheets/style.css')
|
||||
body
|
||||
block content
|
|
@ -0,0 +1,76 @@
|
|||
Weißbrot
|
||||
Kartoffeln
|
||||
Kartoffeln (mehlig)
|
||||
Kartofflen (festkochend)
|
||||
Reis
|
||||
Nudeln
|
||||
Kroketten
|
||||
Spätzle
|
||||
Hähnchenbrustfilet
|
||||
Putenschnitzel
|
||||
Rindfleisch
|
||||
Kalbfleisch
|
||||
Rindersteak
|
||||
Rinderhackfleisch
|
||||
Hackfleisch gemischt
|
||||
Schweineschnitzel
|
||||
Schweinekotelett
|
||||
Ente
|
||||
Gans
|
||||
Käse
|
||||
Frischkäse
|
||||
Kräuterquark
|
||||
Quark
|
||||
Mozzarella
|
||||
Parmesan
|
||||
Speisequark (40 % Fett)
|
||||
Camembert
|
||||
Gouda
|
||||
Edamer
|
||||
Raclette
|
||||
Mascarpone
|
||||
Schinken (gekocht)
|
||||
Schinken (roh)
|
||||
Schinken (geräuchert)
|
||||
Salami
|
||||
Oliven schwarz
|
||||
Butter
|
||||
Butterschmalz
|
||||
Olivenöl
|
||||
Rapsöl
|
||||
Sonnenblumenöl
|
||||
Margarine
|
||||
Honig
|
||||
Marmelade
|
||||
Konfitüre
|
||||
Nussnougatcreme
|
||||
Eier
|
||||
Joghurt, 1,5 % Fett
|
||||
Joghurt, 3,5 % Fett
|
||||
Seelachs
|
||||
Zander
|
||||
Kabeljau
|
||||
Garnelen
|
||||
Krabben
|
||||
Forelle
|
||||
Makrele
|
||||
Lachs
|
||||
Lachs (geräuchert)
|
||||
Heringsfilet
|
||||
passierte Tomaten
|
||||
Saure Sahne
|
||||
Pesto (rot)
|
||||
Pesto (grün)
|
||||
Mayonnaise
|
||||
Sahne
|
||||
Crème fraiche
|
||||
Nüsse
|
||||
Mandeln
|
||||
Apfelmus
|
||||
Preiselbeeren
|
||||
Schokolade (Vollmilch)
|
||||
Schokolade (Zartbitter)
|
||||
Kuvertüre (Vollmilch)
|
||||
Kuvertüre (Zartbitter)
|
||||
Marzipan
|
||||
Hefe
|
Loading…
Reference in New Issue