Compare commits

..

13 Commits

Author SHA1 Message Date
tommy 50e14b5f05 verbesserte Suche 2022-02-11 19:26:32 +01:00
Thomas Mack 86c108e2d8 React entfernt 2019-10-25 20:35:44 +02:00
Thomas Mack 86ac2f7ec8 Fehlerbehandlung bei null Werten in der Menge 2019-10-25 20:32:10 +02:00
Toking 482b476831 Aufräumarbeiten, Entfernen von User-Router 2019-10-22 16:53:34 +02:00
Thomas Mack ebc97b5470 Adminfunktion eingeführt 2019-10-20 16:17:32 +02:00
Thomas Mack 6fa98c8d6c Rating implementiert 2019-10-15 21:01:47 +02:00
Thomas Mack e14315f9c5 Fehler bei Anlage von Zutaten behoben 2019-10-08 20:53:49 +02:00
Toking 086eec1e03 logging 2019-10-08 08:48:23 +02:00
Toking 4666b56102 loggin für Produktion eingestellt 2019-10-08 08:46:30 +02:00
Toking 9914cb4a40 Kategorienauswahl 2019-10-07 16:22:27 +02:00
Thomas Mack 3c95a9c2f3 limit 2019-10-06 19:35:07 +02:00
Thomas Mack 19fc6f0fce Comment ergänzt 2019-10-06 19:12:35 +02:00
Thomas Mack ab219363b2 suche erweitert 2019-10-06 19:05:55 +02:00
32 changed files with 756 additions and 1851 deletions

1
.gitignore vendored
View File

@ -1 +1,2 @@
node_modules
uploads

31
app.js
View File

@ -3,7 +3,6 @@ var express = require('express');
var path = require('path');
var logger = require('morgan');
var cors = require('cors');
var sassMiddleware = require('node-sass-middleware');
var xml = require('xml');
@ -17,8 +16,9 @@ const dbhog = require('./dbhog')
const PORT = process.env.PORT || 4000;
var userRouter = require('./routes/users');
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');
@ -39,44 +39,26 @@ var corsOptions = {
methods: ['GET', 'PUT', 'POST', 'DELETE', 'COPY']
}
app.use(cors(corsOptions));
// Setting up passport
/*passport.use(
new LocalStrategy(
function(username, password, done) {
}
);
);
*/
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('/api/v1', (req, res, next ) => {
req.db = dbhog;
next();
})
});
app.use('/', indexRouter);
app.use('/users', usersRouter);
app.use('/wl', valuelistRouter);
app.use('/vl', valuelistRouter);
app.use('/recepies', recepieRouter);
app.use('/users', userRouter);
app.use('/api/v1/person', personRouter);
app.use('/api/v1/schueler', schuelerRouter);
@ -85,6 +67,7 @@ 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) {
next(createError(404));

View File

@ -18,7 +18,7 @@ const query = function (text, params, callback) {
return pool.query(text, params, (err, res) => {
const duration = Date.now() - start;
//if(res)
console.log('executed query', { text, duration})
if(DEBUG) console.log('executed query', { text, duration})
callback(err, res)
})
}
@ -32,32 +32,38 @@ const dataStructure = {
categories: {
tableName: "kategorie",
jsonName: "categories"
jsonName: "categories",
displayName: "Kategorien"
},
units: {
tableName: "einheit",
jsonName: "units"
jsonName: "units",
displayName: "Einheiten"
},
tools: {
tableName: "geraet",
jsonName: "tools"
jsonName: "tools",
displayName: "Geräte und Sonstiges"
},
difficulties: {
tableName: "schwierigkeit",
jsonName: "difficulties"
jsonName: "difficulties",
displayName: "Schwierigkeit"
},
ingredients: {
tableName: "zutat",
jsonName: "ingredients"
jsonName: "ingredients",
displayName: "Zutaten"
},
ratingcategories: {
tableName: "wertungkategorie",
jsonName: "ratingcategories"
jsonName: "ratingcategories",
displayName: "Wertungskategorien"
}
}
@ -99,7 +105,14 @@ 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 obj = req.body['item'];
if(req.body[structure.jsonName]) {
obj = req.body[structure.jsonName][0];
}
if(!obj.beschreibung) {
obj.beschreibung = "";
}
let query = "UPDATE "+structure.tableName+
" set schluessel = '"+obj.schluessel+
"', name = '"+obj.name+
@ -134,7 +147,7 @@ const insertNameKeyObject = function(req, res, next) {
} else {
let result = {};
result[structure['jsonName']] = rs.rows;
console.log(result);
if(DEBUG) console.log(result);
res.status(200).json(result);
}
});
@ -148,6 +161,15 @@ const getStructure = function(req) {
}
const getDataStructure = function(req, res, next) {
let structure = dataStructure;
res.status(200).json(structure);
return structure;
}
const getAllFromTable = function(req, res, next) {
let structure = getStructure(req);
@ -168,6 +190,28 @@ const getAllFromTable = function(req, res, next) {
})
}
const getItemFromTable = function(req, res, next) {
let structure = getStructure(req);
if(DEBUG) {
console.log("Found Structure-Object for WL-Item: ");
console.log(structure);
console.log(structure['tableName']);
}
if(structure === undefined) return res.status(404).send();
pool.query(selectItemFromTable(structure['tableName'], req.itemId), (err, rs) => {
if(err) next(err)
else {
if(DEBUG) console.log(res);
let result = {};
result = rs.rows[0];
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);
@ -189,6 +233,8 @@ module.exports = {
insertNameKeyObject,
deleteNameKeyObject,
getAllFromTable,
getItemFromTable,
getUserByEmail,
getStructure
getStructure,
getDataStructure
};

0
db/wartung.sql Normal file
View File

116
index.js
View File

@ -1,116 +0,0 @@
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;

View File

@ -7,7 +7,7 @@ db.run("CREATE TABLE" +" IF NOT EXISTS zutat" +
" schluessel text NOT NULL," +
" name text NOT NULL," +
" beschreibung text" +
" );" +
" );"
);
db.run("CREATE TABLE" +" IF NOT EXISTS einheit" +
@ -16,7 +16,7 @@ db.run("CREATE TABLE" +" IF NOT EXISTS einheit" +
" schluessel text NOT NULL," +
" name text NOT NULL," +
" beschreibung text" +
" );" +
" );"
);
db.run("CREATE TABLE" +" IF NOT EXISTS geraet" +
@ -25,7 +25,7 @@ db.run("CREATE TABLE" +" IF NOT EXISTS geraet" +
" schluessel text NOT NULL," +
" name text NOT NULL," +
" beschreibung text" +
" );" +
" );"
);
db.run("CREATE TABLE" +" IF NOT EXISTS kategorie" +
@ -34,7 +34,7 @@ db.run("CREATE TABLE" +" IF NOT EXISTS kategorie" +
" schluessel text NOT NULL," +
" name text NOT NULL," +
" beschreibung text" +
" );" +
" );"
);
db.run("CREATE TABLE" +" IF NOT EXISTS wertungkategorie" +
@ -43,7 +43,7 @@ db.run("CREATE TABLE" +" IF NOT EXISTS wertungkategorie" +
" schluessel text NOT NULL," +
" name text NOT NULL," +
" beschreibung text" +
" );" +
" );"
);
db.run("CREATE TABLE" +" IF NOT EXISTS schwierigkeit" +
@ -52,7 +52,7 @@ db.run("CREATE TABLE" +" IF NOT EXISTS schwierigkeit" +
" schluessel text NOT NULL," +
" name text NOT NULL," +
" beschreibung text" +
" );" +
" );"
);
db.run("CREATE TABLE" +" IF NOT EXISTS rezept" +
@ -64,7 +64,7 @@ db.run("CREATE TABLE" +" IF NOT EXISTS rezept" +
" 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" +
@ -75,7 +75,7 @@ db.run("CREATE TABLE" +" IF NOT EXISTS rezept_dauer" +
" name text NOT NULL," +
" sort INT NOT NULL DEFAULT 0," +
" beschreibung text" +
" );" +
" );"
);
db.run("CREATE TABLE" +" IF NOT EXISTS rezept_zutat" +
@ -86,7 +86,7 @@ db.run("CREATE TABLE" +" IF NOT EXISTS rezept_zutat" +
" zutat bigint NOT NULL REFERENCES zutat(id)," +
" menge NUMERIC," +
" beschreibung text" +
" );" +
" );"
);
db.run("CREATE TABLE" +" IF NOT EXISTS rezept_geraet" +
@ -97,7 +97,7 @@ db.run("CREATE TABLE" +" IF NOT EXISTS rezept_geraet" +
" geraet bigint NOT NULL REFERENCES geraet(id)," +
" menge NUMERIC," +
" beschreibung text" +
" );" +
" );"
);
db.run("CREATE TABLE" +" IF NOT EXISTS rezept_schritt" +
@ -107,7 +107,7 @@ db.run("CREATE TABLE" +" IF NOT EXISTS rezept_schritt" +
" sort INT NOT NULL DEFAULT 0," +
" name text NOT NULL," +
" beschreibung text" +
" );" +
" );"
);
db.run("CREATE TABLE" +" IF NOT EXISTS rezept_kategorie" +
@ -117,7 +117,7 @@ db.run("CREATE TABLE" +" IF NOT EXISTS rezept_kategorie" +
" kategorie bigint NOT NULL REFERENCES kategorie(id)," +
" modifikator NUMERIC NOT NULL DEFAULT 1," +
" beschreibung text" +
" );" +
" );"
);
db.run("CREATE TABLE" +" IF NOT EXISTS nutzer" +
@ -127,7 +127,7 @@ db.run("CREATE TABLE" +" IF NOT EXISTS nutzer" +
" email text NOT NULL," +
" kennwort text NOT NULL," +
" beschreibung text" +
" );" +
" );"
);
db.run("CREATE TABLE" +" IF NOT EXISTS rolle" +
@ -136,7 +136,7 @@ db.run("CREATE TABLE" +" IF NOT EXISTS rolle" +
" schluessel text NOT NULL," +
" name text NOT NULL," +
" beschreibung text" +
" );" +
" );"
);
db.run("CREATE TABLE" +" IF NOT EXISTS nutzer_rolle" +
@ -145,7 +145,7 @@ db.run("CREATE TABLE" +" IF NOT EXISTS nutzer_rolle" +
" nutzer bigint NOT NULL REFERENCES nutzer(id)," +
" rolle bigint NOT NULL REFERENCES rolle(id)," +
" beschreibung text" +
" );" +
" );"
);
db.run("CREATE TABLE" +" IF NOT EXISTS nutzer_favorit" +
@ -154,7 +154,7 @@ db.run("CREATE TABLE" +" IF NOT EXISTS nutzer_favorit" +
" nutzer bigint NOT NULL REFERENCES nutzer(id)," +
" rezept bigint NOT NULL REFERENCES rezept(id)," +
" beschreibung text" +
" );" +
" );"
);
db.run("CREATE TABLE" +" IF NOT EXISTS rezept_wertung" +
@ -165,7 +165,7 @@ db.run("CREATE TABLE" +" IF NOT EXISTS rezept_wertung" +
" wertungkategorie bigint NOT NULL REFERENCES wertungkategorie(id)," +
" wert INTEGER NOT NULL DEFAULT 5," +
" beschreibung text" +
" );" +
" );"
);
db.run("CREATE TABLE" +" IF NOT EXISTS nutzer_kommentar" +
@ -175,17 +175,26 @@ db.run("CREATE TABLE" +" IF NOT EXISTS nutzer_kommentar" +
" relation text NOT NULL," +
" relation_id bigint NOT NULL," +
" beschreibung text" +
" );"
);
db.run("CREATE TABLE" +" IF NOT EXISTS rezept_image" +
" (" +
" id bigserial PRIMARY KEY," +
" rezept bigint NOT NULL REFERENCES rezept(id)," +
" pfad text NOT NULL," +
" dateiname text NOT NULL," +
" lizenz text NOT NULL," +
" uploadtime timestamp NOT NULL default current_timestamp," +
" beschreibung text" +
" );"
);
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);")"
);
db.run("CREATE UNIQUE INDEX idx_wertungkategorie_email ON wertungkategorie (schluessel);");
};

1803
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -4,11 +4,7 @@
"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",
"connect-pg-simple": "^5.0.0",
"cors": "^2.8.5",
@ -17,14 +13,10 @@
"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",
"multer": "^1.4.2",
"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",
"whatwg-fetch": "^3.0.0",
"xml": "^1.0.1"
},

View File

@ -1,8 +0,0 @@
body {
padding: 50px;
font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; }
a {
color: #00B7FF; }
/*# sourceMappingURL=style.css.map */

View File

@ -1,9 +0,0 @@
{
"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"
}

View File

@ -1,6 +0,0 @@
body
padding: 50px
font: 14px "Lucida Grande", Helvetica, Arial, sans-serif
a
color: #00B7FF

View File

@ -3,7 +3,7 @@ const router = express.Router();
var cors = require('cors');
const bcrypt = require('bcrypt');
const randToken = require('rand-token');
const ingredientsRouter = require('./recepieIngredients');
@ -11,9 +11,10 @@ const toolsRouter = require('./recepieTools');
const durationsRouter = require('./recepieDurations');
const stepsRouter = require('./recepieSteps');
const categoriesRouter = require('./recepieCategories');
const voteRouter = require('./recepieVote');
const DEBUG = false;
const DEBUG = true;
@ -51,9 +52,11 @@ router.use('/:recepieId/tools/', toolsRouter);
router.use('/:recepieId/durations/', durationsRouter);
router.use('/:recepieId/steps/', stepsRouter);
router.use('/:recepieId/categories/', categoriesRouter);
router.use('/:recepieId/votes/', voteRouter);
/* GET recepies listing. */
/* Gesucht wird in Rezept, Zutaten und Beschreibung */
router.get('/', function(req, res, next) {
let query = " Select rezept.id, rezept.schluessel, schwierigkeit, schwierigkeit.name as schwierigkeitName, rezept.name, portionen, nutzer, rezept.beschreibung, "+
" (SELECT sum(dauer) FROM rezept_dauer WHERE rezept = rezept.id) as overall_duration, "+
@ -63,9 +66,15 @@ router.get('/', function(req, res, next) {
" FROM rezept JOIN schwierigkeit on schwierigkeit = schwierigkeit.id "+
" LEFT JOIN rezept_kategorie ON rezept.id = rezept" +
" LEFT JOIN kategorie on kategorie.id = kategorie ";
if(req.query.term) query += " WHERE rezept.name ilike '%"+req.query.term+"%' "
if(req.query.hashtag) query += " WHERE rezept.schluessel ilike '"+req.query.hashtag+"' "
" LEFT JOIN kategorie on kategorie.id = kategorie "+
" WHERE 1 = 1 ";
if(req.query.term) query += " AND rezept.name ilike '%"+req.query.term+
"%' OR rezept.beschreibung ilike '%"+req.query.term+"%' "+
" OR rezept.id in (select rezept from rezept_zutat where zutat in (select id from zutat where name ilike '%"+req.query.term+"%'))";
if(req.query.hashtag) query += " AND rezept.schluessel ilike '"+req.query.hashtag+"' "
if(req.query.cat) query += " AND kategorie.id IN ("+req.query.cat+")"
query += " GROUP BY 1,2,3,4,5,6,7"
@ -73,20 +82,27 @@ router.get('/', function(req, res, next) {
if(req.query['sort_by'] === 'creation') query += " ORDER BY rezept.id desc";
if(req.query['sort_by'] === 'best_match') query += " ORDER BY rezept.name ";
if(req.query['sort_by'] === 'rating') query += " ORDER BY rating ";
} else if (req.query.limit) {
query += " ORDER BY random() LIMIT "+req.query.limit+" "
} else {
query += " ORDER BY rezept.name "
}
if(DEBUG) console.log(query);
if(DEBUG) console.log("DB", req.db);
req.db.query(query, (err, rs) => {
console.log("Returned from DB Query");
console.log(rs);
if (err){
console.log(query);
next(err);
} else {
let result = {};
if (DEBUG) console.log("RESULT", rs.rows);
result['recepies'] = rs.rows;
console.log(result);
if (DEBUG) console.log(result);
res.status(200).json(result);
}
});
@ -120,9 +136,11 @@ router.post('/', function(req, res, next) {
"INSERT into rezept_schritt (rezept, sort, name, beschreibung) VALUES ($1, 1, 'Zubereitung', 'Mit Sherry ablöschen, Sahne hinzugeben und Parmesan reiben.')"
];
console.log(querys[0],rs.rows[0].id);
console.log(querys[1],[rs.rows[0].nutzer, rs.rows[0].id]);
console.log(querys[2],rs.rows[0].id);
if (DEBUG) {
console.log(querys[0],rs.rows[0].id);
console.log(querys[1],[rs.rows[0].nutzer, rs.rows[0].id]);
console.log(querys[2],rs.rows[0].id);
}
req.db.query(querys[0], [rs.rows[0].id], (err, rs) => {});
req.db.query(querys[1], [rs.rows[0].nutzer, rs.rows[0].id], (err, rs) => {});
@ -170,12 +188,12 @@ router.copy('/:recepieId', cors(), function(req, res, next) {
"INSERT into rezept_geraet (rezept, geraet, einheit, menge, beschreibung) SELECT $2, geraet, einheit, menge, beschreibung FROM rezept_geraet WHERE rezept = $1",
"INSERT into rezept_schritt (rezept, sort, name, beschreibung) SELECT $2, sort, name, beschreibung FROM rezept_schritt where rezept = $1"
];
console.log(querys[0],recepie.id);
console.log(querys[1],recepie.id);
console.log(querys[2],recepie.id);
console.log(querys[3],recepie.id);
if (DEBUG) {
console.log(querys[0],recepie.id);
console.log(querys[1],recepie.id);
console.log(querys[2],recepie.id);
console.log(querys[3],recepie.id);
}
req.db.query(querys[0], [recepie.id, rs.rows[0].id], (err, rs) => {});
req.db.query(querys[1], [recepie.id, rs.rows[0].id], (err, rs) => {});
req.db.query(querys[2], [recepie.id, rs.rows[0].id], (err, rs) => {});

View File

@ -1,7 +1,7 @@
const express = require('express');
const router = express.Router({mergeParams:true});
const bcrypt = require('bcrypt');
const randToken = require('rand-token');
const DEBUG = false;
@ -36,7 +36,7 @@ router.get('/', function(req, res, next) {
} else {
let result = {};
result['recepieCategories'] = rs.rows;
console.log(result);
if (DEBUG) console.log(result);
res.status(200).json(result);
}
});

View File

@ -1,7 +1,7 @@
const express = require('express');
const router = express.Router({mergeParams:true});
const bcrypt = require('bcrypt');
const randToken = require('rand-token');
const DEBUG = false;
@ -33,7 +33,7 @@ router.get('/', function(req, res, next) {
} else {
let result = {};
result['recepieDurations'] = rs.rows;
console.log(result);
if (DEBUG) console.log(result);
res.status(200).json(result);
}
});

125
routes/recepieImage.js Normal file
View File

@ -0,0 +1,125 @@
const express = require('express');
const router = express.Router({mergeParams:true});
const multer = require('multer');
const storage = multer.diskStorage({
destination: function(req, file, cb) {
cb(null, './uploads/');
},
filename: function(req, file, cb) {
cb(null, file.filename);
}
})
const fileFilter = (req, file, cb) => {
if (file.mimetype === 'image/jpeg' || file.mimetype === 'image/png') {
cb(null, true);
} else {
cb(null, false);
}
}
const upload = multer({
storage:storage,
limits: {
fileSize: 1024 * 1024 * 2
},
fileFilter:fileFilter
})
const randToken = require('rand-token');
const DEBUG = false;
router.param('categorieId', function(req, res, next, id) {
req.categorieId = id;
let query = " Select rezept_kategorie.id, kategorie, kategorie.name as kategoriename, modifikator, rezept_kategorie.beschreibung "+
" FROM rezept_kategorie "+
" JOIN kategorie on kategorie = kategorie.id"+
" WHERE rezept =$1 AND rezept_kategorie.id = $2";
if(DEBUG) console.log(query);
req.db.query(query, [req.recepieId, req.categorieId], (err, rs) => {
if (err) {
return next(err)
}
req.recepieCategorie = rs.rows[0];
next();
})
});
/* GET recepieCategories listing. */
router.get('/', function(req, res, next) {
let query = " Select rezept_kategorie.id, kategorie, kategorie.name as kategoriename, modifikator, rezept_kategorie.beschreibung "+
" FROM rezept_kategorie "+
" JOIN kategorie on kategorie = kategorie.id"+
" WHERE rezept =$1"+
" ORDER BY modifikator";
if(DEBUG) console.log(query);
req.db.query(query,[req.recepieId], (err, rs) => {
if (err){
next(err);
} else {
let result = {};
result['recepieCategories'] = rs.rows;
if (DEBUG) console.log(result);
res.status(200).json(result);
}
});
});
router.post('/', function(req, res, next) {
let recepieCategorie = req.body.recepieCategories[0];
if(!recepieCategorie.kategorie) {
return res.status(400).send("Wrong Params")
}
if (!recepieCategorie.modifikator) recepieCategorie.modifikator = 1;
let query = "INSERT INTO rezept_kategorie (rezept, kategorie, modifikator, beschreibung) "+
" VALUES ($1, $2, $3, $4)" +
" returning *";
let values = [req.recepieId, recepieCategorie.kategorie, recepieCategorie.modifikator, recepieCategorie.beschreibung];
if(DEBUG) console.log(query);
req.db.query(query, values, (err, rs) => {
if (err){
next(err);
} else {
let result = {};
result['recepieCategories'] = rs.rows[0];
res.status(200).json(result);
}
});
});
/* Methods with id */
router.get('/:categorieId', function(req, res, next) {
res.status(200).json(req.recepieCategorie);
});
router.put('/:categorieId', function(req, res, next) {
let recepieCategorie = req.body.recepieCategories[0];
let query = "UPDATE rezept_kategorie set kategorie = $1, modifikator =$2, beschreibung =$3"+
" WHERE id = "+req.categorieId +
" returning *";
let values = [recepieCategorie.kategorie, recepieCategorie.modifikator, recepieCategorie.beschreibung];
if(DEBUG) console.log(query);
req.db.query(query, values, (err, rs) => {
if (err){
next(err);
} else {
let result = {};
result['recepieCategories'] = rs.rows[0];
res.status(200).json(result);
}
});
});
router.delete('/:categorieId', function(req, res, next) {
let query = "DELETE FROM rezept_kategorie where id = $1;";
req.db.query(query, [req.categorieId], (err, rs) => {
if (err) next(err)
});
res.status(204).send();
});
module.exports = router;

View File

@ -1,7 +1,7 @@
const express = require('express');
const router = express.Router({mergeParams:true});
const bcrypt = require('bcrypt');
const randToken = require('rand-token');
const DEBUG = false;
@ -40,7 +40,7 @@ router.get('/', function(req, res, next) {
} else {
let result = {};
result['recepieIngredients'] = rs.rows;
console.log(result);
if (DEBUG) console.log(result);
res.status(200).json(result);
}
});
@ -79,10 +79,19 @@ router.get('/:ingredientId', function(req, res, next) {
router.put('/:ingredientId', function(req, res, next) {
let recepieIngredient = req.body.recepieIngredients[0];
//console.log(recepieIngredient.menge>0);
let menge = null;
if (recepieIngredient.menge>0) {
menge = recepieIngredient.menge;
} else {
menge = null;
}
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];
let values = [menge, recepieIngredient.einheit, recepieIngredient.zutat, recepieIngredient.beschreibung];
if(DEBUG) console.log(query);
req.db.query(query, values, (err, rs) => {

View File

@ -1,7 +1,7 @@
const express = require('express');
const router = express.Router({mergeParams:true});
const bcrypt = require('bcrypt');
const randToken = require('rand-token');
const DEBUG = false;
@ -34,7 +34,7 @@ router.get('/', function(req, res, next) {
} else {
let result = {};
result['recepieSteps'] = rs.rows;
console.log(result);
if (DEBUG) console.log(result);
res.status(200).json(result);
}
});

View File

@ -1,7 +1,7 @@
const express = require('express');
const router = express.Router({mergeParams:true});
const bcrypt = require('bcrypt');
const randToken = require('rand-token');
const DEBUG = false;
@ -39,7 +39,7 @@ router.get('/', function(req, res, next) {
} else {
let result = {};
result['recepieTools'] = rs.rows;
console.log(result);
if(DEBUG) console.log(result);
res.status(200).json(result);
}
});

60
routes/recepieVote.js Normal file
View File

@ -0,0 +1,60 @@
const express = require('express');
const router = express.Router({mergeParams:true});
const randToken = require('rand-token');
const DEBUG = true;
/* GET recepieVotes listing. */
router.get('/', function(req, res, next) {
let query = "SELECT avg(wert) as wertung FROM rezept_wertung WHERE rezept = $1";
let values = [req.recepieId];
req.db.query(query, values, (err, rs) => {
if (err){
next(err);
} else {
let result = {};
result['recepieVotes'] = rs.rows[0];
res.status(200).json(result);
}
});
});
router.post('/', function(req, res, next) {
let recepieVote = req.body.recepieVote;
if(!recepieVote.wert) {
return res.status(400).send("Wrong Params")
}
if (!recepieVote.nutzer) recepieVote.nutzer = 0;
let query = "INSERT INTO rezept_wertung (rezept, wertungkategorie, nutzer, wert, beschreibung) "+
" VALUES ($1, (SELECT id from wertungkategorie where schluessel = 'sum'), $2, $3, $4)";
let values = [req.recepieId, recepieVote.nutzer, recepieVote.wert, recepieVote.beschreibung];
if(DEBUG) console.log(query);
req.db.query(query, values, (err, rs) => {
if (err) {
next(err);
} else {
query = "SELECT avg(wert) as rating FROM rezept_wertung WHERE rezept = $1";
values = [req.recepieId];
req.db.query(query, values, (err, rs) => {
if (err){
next(err);
} else {
let result = {};
result = rs.rows[0];
res.status(200).json(result);
}
});
}
});
});
module.exports = router;

View File

@ -1,7 +1,7 @@
const express = require('express');
const router = express.Router();
const bcrypt = require('bcrypt');
const DEBUG = false;
@ -31,38 +31,38 @@ router.get('/', function(req, res, next) {
} else {
let result = {};
result['users'] = rs.rows;
console.log(result);
if (DEBUG) 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);
}
});
});
});
// 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);
// }
// });
// });
// });
router.put('/login', function(req, res, next) {

View File

@ -4,7 +4,7 @@ const cors = require('cors');
const xml = require('xml');
const bcrypt = require('bcrypt');
const randToken = require('rand-token');
const DEBUG = true;

View File

@ -2,7 +2,7 @@ const express = require('express');
const router = express.Router();
var cors = require('cors');
const bcrypt = require('bcrypt');
const randToken = require('rand-token');
const DEBUG = true;
@ -34,8 +34,8 @@ router.get('/', function(req, res, next) {
next(err);
} else {
let result = {};
result['items'] = rs.rows;
console.log(result);
result['person'] = rs.rows;
console.log(result);
res.status(200).json(result);
}
});

View File

@ -2,7 +2,7 @@ const express = require('express');
const router = express.Router();
var cors = require('cors');
const bcrypt = require('bcrypt');
const randToken = require('rand-token');
const DEBUG = true;

View File

@ -2,7 +2,7 @@ const express = require('express');
const router = express.Router();
var cors = require('cors');
const bcrypt = require('bcrypt');
const randToken = require('rand-token');
const DEBUG = true;
@ -34,7 +34,7 @@ router.get('/', function(req, res, next) {
next(err);
} else {
let result = {};
result['items'] = rs.rows;
result['schueler'] = rs.rows;
console.log(result);
res.status(200).json(result);
}

View File

@ -2,7 +2,7 @@ const express = require('express');
const router = express.Router();
var cors = require('cors');
const bcrypt = require('bcrypt');
const randToken = require('rand-token');
const DEBUG = true;
@ -36,7 +36,7 @@ router.get('/', function(req, res, next) {
next(err);
} else {
let result = {};
result['items'] = rs.rows;
result['schuljahr'] = rs.rows;
console.log(result);
res.status(200).json(result);
}

View File

@ -1,6 +1,7 @@
var express = require('express');
var router = express.Router();
const DEBUG = true;
const { selectAllFromTable,
selectAllFromTableByFieldValue,
@ -9,13 +10,15 @@ updateNameKeyObject,
insertNameKeyObject,
deleteNameKeyObject,
getAllFromTable,
getStructure} = require('./../db/');
getItemFromTable,
getStructure,
getDataStructure} = require('./../db/');
router.param('id', function(req, res, next, id) {
req.itemId = id;
console.log(req.body);
if (DEBUG) console.log(req.body);
let structure = getStructure(req);
req[structure.jsonName] = req.body;
next();
@ -27,23 +30,37 @@ router.param('path', function(req, res, next, id) {
next();
});
/* OPTIONS */
router.get('/options', function(req, res, next) {
getDataStructure(req, res, next);
});
/* GET users listing. */
router.get('/:path', function(req, res, next) {
getAllFromTable(req, res, next)
});
router.get('/:path/:id', function(req, res, next) {
if (DEBUG) console.log("Get Item from WL");
getItemFromTable(req, res, next)
});
router.put('/:path/:id', function(req, res, next) {
console.log("Update WL");
if (DEBUG) console.log("Update WL");
updateNameKeyObject(req, res, next)
});
router.post('/:path', function(req, res, next) {
console.log("Insert WL");
if (DEBUG) console.log("Insert WL");
insertNameKeyObject(req, res, next)
});
router.delete('/:path/:id', function(req, res, next) {
console.log("Delete WL");
if (DEBUG) console.log("Delete WL");
deleteNameKeyObject(req, res, next)
});

View File

@ -1,17 +0,0 @@
import { getUserByEmail } from ('./../db/');
class User {
findOne(username) {
getUserByEmail(username).then()
}
}
export default User;

View File

@ -1,4 +0,0 @@
import React from 'react';
import ReactDOM from 'react-dom';
import App from './views/App';
ReactDOM.render(<App />, document.getElementById('root'));

View File

@ -1,26 +0,0 @@
{
"name": "schmeckWieDaheim-FrontEnd",
"version": "0.1.0",
"private": true,
"dependencies": {
"react": "^16.7.0",
"react-dom": "^16.7.0",
"react-scripts": "2.1.2",
"whatwg-fetch": "^3.0.0"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": "react-app"
},
"browserslist": [
">0.2%",
"not dead",
"not ie <= 11",
"not op_mini all"
]
}

View File

@ -1,25 +0,0 @@
// API-Class to fetch Information from "schmektWieDaheim"
import 'whatwg-fetch';
const Cookbook = {};
const baseUrl = 'http://localhost:4000';
Cookbook.getRecepies = () => {
const url = `${baseUrl}/recepies`;
return fetch(url).then(response => {
if(!response.ok) {
return new Proimse(resolve => resolve([]));
}
return response.json().then(jsonResponse => {
return jsonResponse.recepies.map(recepie);
})
})
};
// Export Module
export default Cookbook;

View File

@ -1,33 +0,0 @@
import React, { Component } from 'react';
import { Link, HashRouter as Router, Route, browserHistory } from 'react-router-dom';
import Recepie from './Recepie';
class App extends Component {
constructor(props) {
super(props);
this.state = {};
}
render () {
return (
<Router history={browserHistory}>
<div className="App">
<header>
<Link to="/" className="logo">
<img src='public/img/logo.svg' alt="logo" />
</Link>
</header>
<Route exact path="/" component={Landing} />
<Route path="/recepies/:id" component={Employee} />
</div>
</Router>
);
}
}
export default App;

View File

@ -1,34 +0,0 @@
import React, { Component } from 'react';
import { withRouter } from "react-router-dom";
import Cookbook from '../utils/Cookbook';
class Cookbook extends Component {
constructor(props) {
super(props);
this.state = {
recepie: null,
ingredients: [],
durations: []
}
}
render() {
if (!this.state.recepie) {
return <div className="Recepie">Kein Rezept gefunden</div>
}
const recepie = this.state.recepie;
return (
<div className="Recepie">Rezept gefunden</div>
);
}
}
export default withRouter(Cookbook);