Added Categories
This commit is contained in:
parent
d8d9d54679
commit
f4efbbc975
16
app.js
16
app.js
|
@ -5,6 +5,9 @@ var logger = require('morgan');
|
||||||
var cors = require('cors');
|
var cors = require('cors');
|
||||||
var sassMiddleware = require('node-sass-middleware');
|
var sassMiddleware = require('node-sass-middleware');
|
||||||
|
|
||||||
|
//var passport = require('passport');
|
||||||
|
//var LocalStrategy = require('passport-local').Strategy;
|
||||||
|
|
||||||
const db = require('./db')
|
const db = require('./db')
|
||||||
|
|
||||||
const PORT = process.env.PORT || 4000;
|
const PORT = process.env.PORT || 4000;
|
||||||
|
@ -26,6 +29,19 @@ var corsOptions = {
|
||||||
methods: ['GET', 'PUT', 'POST', 'DELETE', 'COPY']
|
methods: ['GET', 'PUT', 'POST', 'DELETE', 'COPY']
|
||||||
}
|
}
|
||||||
app.use(cors(corsOptions));
|
app.use(cors(corsOptions));
|
||||||
|
|
||||||
|
// Setting up passport
|
||||||
|
|
||||||
|
/*passport.use(
|
||||||
|
new LocalStrategy(
|
||||||
|
function(username, password, done) {
|
||||||
|
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
);
|
||||||
|
*/
|
||||||
|
|
||||||
app.use(logger('dev'));
|
app.use(logger('dev'));
|
||||||
app.use(express.json());
|
app.use(express.json());
|
||||||
app.use(express.urlencoded({ extended: false }));
|
app.use(express.urlencoded({ extended: false }));
|
||||||
|
|
14
migration.js
14
migration.js
|
@ -106,7 +106,7 @@ db.run("CREATE TABLE" +" IF NOT EXISTS rezept_schritt" +
|
||||||
" rezept bigint NOT NULL REFERENCES rezept(id)," +
|
" rezept bigint NOT NULL REFERENCES rezept(id)," +
|
||||||
" sort INT NOT NULL DEFAULT 0," +
|
" sort INT NOT NULL DEFAULT 0," +
|
||||||
" name text NOT NULL," +
|
" 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)," +
|
" rezept bigint NOT NULL REFERENCES rezept(id)," +
|
||||||
" kategorie bigint NOT NULL REFERENCES kategorie(id)," +
|
" kategorie bigint NOT NULL REFERENCES kategorie(id)," +
|
||||||
" modifikator NUMERIC NOT NULL DEFAULT 1," +
|
" 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," +
|
" name text NOT NULL," +
|
||||||
" email text NOT NULL," +
|
" email text NOT NULL," +
|
||||||
" kennwort 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," +
|
" id bigserial PRIMARY KEY," +
|
||||||
" nutzer bigint NOT NULL REFERENCES nutzer(id)," +
|
" nutzer bigint NOT NULL REFERENCES nutzer(id)," +
|
||||||
" rolle bigint NOT NULL REFERENCES rolle(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," +
|
" id bigserial PRIMARY KEY," +
|
||||||
" nutzer bigint NOT NULL REFERENCES nutzer(id)," +
|
" nutzer bigint NOT NULL REFERENCES nutzer(id)," +
|
||||||
" rezept bigint NOT NULL REFERENCES rezept(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)," +
|
" rezept bigint NOT NULL REFERENCES rezept(id)," +
|
||||||
" wertungkategorie bigint NOT NULL REFERENCES wertungkategorie(id)," +
|
" wertungkategorie bigint NOT NULL REFERENCES wertungkategorie(id)," +
|
||||||
" wert INTEGER NOT NULL DEFAULT 5," +
|
" 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)," +
|
" nutzer bigint NOT NULL REFERENCES nutzer(id)," +
|
||||||
" relation text NOT NULL," +
|
" relation text NOT NULL," +
|
||||||
" relation_id bigint NOT NULL," +
|
" relation_id bigint NOT NULL," +
|
||||||
" beschreibung text NOT NULL" +
|
" beschreibung text" +
|
||||||
);
|
);
|
||||||
|
|
||||||
db.run("CREATE UNIQUE INDEX idx_geraet_schluessel ON geraet (schluessel);");
|
db.run("CREATE UNIQUE INDEX idx_geraet_schluessel ON geraet (schluessel);");
|
||||||
|
|
|
@ -10,6 +10,7 @@ const ingredientsRouter = require('./recepieIngredients');
|
||||||
const toolsRouter = require('./recepieTools');
|
const toolsRouter = require('./recepieTools');
|
||||||
const durationsRouter = require('./recepieDurations');
|
const durationsRouter = require('./recepieDurations');
|
||||||
const stepsRouter = require('./recepieSteps');
|
const stepsRouter = require('./recepieSteps');
|
||||||
|
const categoriesRouter = require('./recepieCategories');
|
||||||
|
|
||||||
|
|
||||||
const DEBUG = false;
|
const DEBUG = false;
|
||||||
|
@ -18,15 +19,22 @@ const DEBUG = false;
|
||||||
|
|
||||||
router.param('recepieId', function(req, res, next, id) {
|
router.param('recepieId', function(req, res, next, id) {
|
||||||
req.recepieId = 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 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 "+
|
" (SELECT round(avg(wert),1) FROM rezept_wertung WHERE rezept = rezept.id) as rating, "+
|
||||||
" FROM rezept JOIN schwierigkeit on schwierigkeit = schwierigkeit.id ";
|
" 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)) {
|
if(isNaN(req.recepieId)) {
|
||||||
query += " WHERE rezept.schluessel ilike '$1'";
|
query += " WHERE rezept.schluessel ilike '$1'";
|
||||||
} else {
|
} else {
|
||||||
query += " WHERE rezept.id = $1";
|
query += " WHERE rezept.id = $1";
|
||||||
}
|
}
|
||||||
|
query += " GROUP BY 1,2,3,4,5,6,7,8"
|
||||||
|
|
||||||
if(DEBUG) console.log(query);
|
if(DEBUG) console.log(query);
|
||||||
req.db.query(query, [req.recepieId], (err, rs) => {
|
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/tools/', toolsRouter);
|
||||||
router.use('/:recepieId/durations/', durationsRouter);
|
router.use('/:recepieId/durations/', durationsRouter);
|
||||||
router.use('/:recepieId/steps/', stepsRouter);
|
router.use('/:recepieId/steps/', stepsRouter);
|
||||||
|
router.use('/:recepieId/categories/', categoriesRouter);
|
||||||
|
|
||||||
|
|
||||||
/* GET recepies listing. */
|
/* GET recepies listing. */
|
||||||
router.get('/', function(req, res, next) {
|
router.get('/', function(req, res, next) {
|
||||||
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, rezept.beschreibung, "+
|
||||||
" (SELECT sum(dauer) FROM rezept_dauer WHERE rezept = rezept.id) as overall_duration, "+
|
" (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 "+
|
" (SELECT round(avg(wert),1) FROM rezept_wertung WHERE rezept = rezept.id) as rating, "+
|
||||||
" FROM rezept JOIN schwierigkeit on schwierigkeit = schwierigkeit.id ";
|
" 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+"%' "
|
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']) {
|
||||||
if(req.query['sort_by'] === 'creation') query += " ORDER BY rezept.id desc";
|
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'] === '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+
|
let query = "UPDATE rezept set name = '"+recepie.name+
|
||||||
"', schluessel='"+recepie.schluessel+
|
"', schluessel='"+recepie.schluessel+
|
||||||
"', portionen='"+recepie.portionen+
|
"', portionen='"+recepie.portionen+
|
||||||
|
"', nutzer='"+recepie.nutzer+
|
||||||
"', schwierigkeit='"+recepie.schwierigkeit+
|
"', schwierigkeit='"+recepie.schwierigkeit+
|
||||||
"', beschreibung = '"+recepie.beschreibung+"' "+
|
"', beschreibung = '"+recepie.beschreibung+"' "+
|
||||||
" WHERE id = "+req.recepieId +
|
" WHERE id = "+req.recepieId +
|
||||||
|
|
|
@ -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;
|
Loading…
Reference in New Issue