Added Categories

This commit is contained in:
Thomas Mack 2019-01-07 16:50:07 +01:00
parent d8d9d54679
commit f4efbbc975
4 changed files with 148 additions and 12 deletions

16
app.js
View File

@ -5,6 +5,9 @@ var logger = require('morgan');
var cors = require('cors');
var sassMiddleware = require('node-sass-middleware');
//var passport = require('passport');
//var LocalStrategy = require('passport-local').Strategy;
const db = require('./db')
const PORT = process.env.PORT || 4000;
@ -26,6 +29,19 @@ 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 }));

View File

@ -106,7 +106,7 @@ db.run("CREATE TABLE" +" IF NOT EXISTS rezept_schritt" +
" rezept bigint NOT NULL REFERENCES rezept(id)," +
" sort INT NOT NULL DEFAULT 0," +
" name text NOT NULL," +
" beschreibung text NOT NULL" +
" beschreibung text" +
" );" +
);
@ -116,7 +116,7 @@ db.run("CREATE TABLE" +" IF NOT EXISTS rezept_kategorie" +
" rezept bigint NOT NULL REFERENCES rezept(id)," +
" kategorie bigint NOT NULL REFERENCES kategorie(id)," +
" modifikator NUMERIC NOT NULL DEFAULT 1," +
" beschreibung text NOT NULL" +
" beschreibung text" +
" );" +
);
@ -126,7 +126,7 @@ db.run("CREATE TABLE" +" IF NOT EXISTS nutzer" +
" name text NOT NULL," +
" email text NOT NULL," +
" kennwort text NOT NULL," +
" beschreibung text NOT NULL" +
" beschreibung text" +
" );" +
);
@ -144,7 +144,7 @@ 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" +
" beschreibung text" +
" );" +
);
@ -153,7 +153,7 @@ 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" +
" beschreibung text" +
" );" +
);
@ -164,7 +164,7 @@ db.run("CREATE TABLE" +" IF NOT EXISTS rezept_wertung" +
" rezept bigint NOT NULL REFERENCES rezept(id)," +
" wertungkategorie bigint NOT NULL REFERENCES wertungkategorie(id)," +
" wert INTEGER NOT NULL DEFAULT 5," +
" beschreibung text NOT NULL" +
" beschreibung text" +
" );" +
);
@ -174,7 +174,7 @@ db.run("CREATE TABLE" +" IF NOT EXISTS nutzer_kommentar" +
" nutzer bigint NOT NULL REFERENCES nutzer(id)," +
" relation text NOT NULL," +
" relation_id bigint NOT NULL," +
" beschreibung text NOT NULL" +
" beschreibung text" +
);
db.run("CREATE UNIQUE INDEX idx_geraet_schluessel ON geraet (schluessel);");

View File

@ -10,6 +10,7 @@ const ingredientsRouter = require('./recepieIngredients');
const toolsRouter = require('./recepieTools');
const durationsRouter = require('./recepieDurations');
const stepsRouter = require('./recepieSteps');
const categoriesRouter = require('./recepieCategories');
const DEBUG = false;
@ -18,15 +19,22 @@ const DEBUG = false;
router.param('recepieId', function(req, res, next, id) {
req.recepieId = id;
let query = " Select rezept.id, rezept.schluessel, schwierigkeit, schwierigkeit.name as schwierigkeitName, rezept.name, portionen, nutzer, rezept.beschreibung, "+
let query = " Select rezept.id, rezept.schluessel, schwierigkeit, schwierigkeit.name as schwierigkeitName, rezept.name, portionen, nutzer, nutzer.name as nutzername, rezept.beschreibung, "+
" (SELECT sum(dauer) FROM rezept_dauer WHERE rezept = rezept.id) as overall_duration, "+
" (SELECT round(avg(wert),1) FROM rezept_wertung WHERE rezept = rezept.id) as rating "+
" FROM rezept JOIN schwierigkeit on schwierigkeit = schwierigkeit.id ";
" (SELECT round(avg(wert),1) FROM rezept_wertung WHERE rezept = rezept.id) as rating, "+
" array_agg(kategorie.name) as categories, " +
" array_agg(kategorie.id) as categorieids" +
" FROM rezept JOIN schwierigkeit on schwierigkeit = schwierigkeit.id "+
" JOIN nutzer on nutzer = nutzer.id" +
" LEFT JOIN rezept_kategorie ON rezept.id = rezept" +
" LEFT JOIN kategorie on kategorie.id = kategorie ";
if(isNaN(req.recepieId)) {
query += " WHERE rezept.schluessel ilike '$1'";
} else {
query += " WHERE rezept.id = $1";
}
query += " GROUP BY 1,2,3,4,5,6,7,8"
if(DEBUG) console.log(query);
req.db.query(query, [req.recepieId], (err, rs) => {
@ -42,14 +50,23 @@ router.use('/:recepieId/ingredients/', ingredientsRouter);
router.use('/:recepieId/tools/', toolsRouter);
router.use('/:recepieId/durations/', durationsRouter);
router.use('/:recepieId/steps/', stepsRouter);
router.use('/:recepieId/categories/', categoriesRouter);
/* GET recepies listing. */
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, "+
" (SELECT round(avg(wert),1) FROM rezept_wertung WHERE rezept = rezept.id) as rating "+
" FROM rezept JOIN schwierigkeit on schwierigkeit = schwierigkeit.id ";
" (SELECT round(avg(wert),1) FROM rezept_wertung WHERE rezept = rezept.id) as rating, "+
" array_agg(kategorie.name) as categories," +
" array_agg(kategorie.id) as categorieids" +
" 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+"%' "
query += " GROUP BY 1,2,3,4,5,6,7"
if(req.query['sort_by']) {
if(req.query['sort_by'] === 'creation') query += " ORDER BY rezept.id desc";
if(req.query['sort_by'] === 'best_match') query += " ORDER BY rezept.name ";
@ -171,6 +188,7 @@ router.put('/:recepieId', function(req, res, next) {
let query = "UPDATE rezept set name = '"+recepie.name+
"', schluessel='"+recepie.schluessel+
"', portionen='"+recepie.portionen+
"', nutzer='"+recepie.nutzer+
"', schwierigkeit='"+recepie.schwierigkeit+
"', beschreibung = '"+recepie.beschreibung+"' "+
" WHERE id = "+req.recepieId +

102
routes/recepieCategories.js Normal file
View File

@ -0,0 +1,102 @@
const express = require('express');
const router = express.Router({mergeParams:true});
const bcrypt = require('bcrypt');
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;
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;