From 499fc53a7f276b73b2271cfcf1baedf50c954b26 Mon Sep 17 00:00:00 2001 From: ColineBol <45685982+ColineBol@users.noreply.github.com> Date: Fri, 7 Dec 2018 11:28:24 +0100 Subject: [PATCH 01/25] Create zoo3.js First commit --- zoo3.js | 1071 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1071 insertions(+) create mode 100644 zoo3.js diff --git a/zoo3.js b/zoo3.js new file mode 100644 index 00000000..d2c93ca4 --- /dev/null +++ b/zoo3.js @@ -0,0 +1,1071 @@ +//TP1 +const express = require('express'); // Chargement des librairies +const mysql = require('mysql'); +const app = express(); + +//TP2 +const bodyParser = require('body-parser'); +app.use(bodyParser.urlencoded({ extended: true })); + +// CONNECTION +var db = mysql.createConnection({ + host: "localhost" , + user: "root" , + password: "" , + database: "project" , + port: "3306" +}); + + +// FIREWALL +app.use( function (req, res, next) { + if ( "key" in req.query) { + var key = req.query[ "key" ]; + var query = "SELECT * FROM users WHERE apikey='" + key + "'" ;//Requête SQL table Direction valeur de l'apikey :ceciestmonjeton + db.query(query, function (err, result, fields) { + if (err) throw err; + if (result.length > 0 ) { + next(); + } + else { + res.sendStatus(403); // Erreur 403 si la clé différente de ceciestmonjeton + } + }); + } + else { + res.sendStatus(403); + } +}); + + +app.listen(3000, function() { + db.connect(function(err) { + if (err) throw err; + console.log('Connection to database successful!'); + }); + console.log('Example app listening on port 3000!'); +}); + + + +app.delete( '/animals' , function (req, res) { + + var query = "DELETE FROM animals" ; + db.query(query, function (err, result, fields) { + if (err) throw err; + res.send( JSON .stringify( "Success" )); + }); +}); + +app.delete( '/cages' , function (req, res) { + var query = "DELETE FROM cages" ; + db.query(query, function (err, result, fields) { + if (err) throw err; + res.send( JSON .stringify( "Success" )); + }); +}); +app.delete( '/food' , function (req, res) { + var query = "DELETE FROM food" ; + db.query(query, function (err, result, fields) { + if (err) throw err; + res.send( JSON .stringify( "Success" )); + }); +}); +app.delete( '/staff' , function (req, res) { + var query = "DELETE FROM staff" ; + db.query(query, function (err, result, fields) { + if (err) throw err; + res.send( JSON .stringify( "Success" )); + }); +}); + + + + +//CREAT +app.post( '/animals' , function (req, res){ + + var name = req.body.name; + var breed = req.body.breed; + var food_per_day = req.body.food_per_day; + var birthday = req.body.birthday; + var entry_date = req.body.entry_date; + var id_cage = req.body.id_cage; + var query = "INSERT INTO animals (name, breed, food_per_day, birthday, entry_date, id_cage) VALUES ('" + name + "','" + breed + "','" + food_per_day + "','" + birthday + "','" + entry_date + "','" + id_cage +"')" ; + // Affichage de la réussite de la requête + db.query(query, function (err, result, fields) { + if (err) throw err; + res.send( JSON .stringify( "Success" )); + }); +}); +app.post( '/cages' , function (req, res){ + var name = req.body.name; + var description = req.body.description; + var area = req.body.area; + var query = "INSERT INTO cages (name, description, area) VALUES ('" + name + "','" + description + "','" + area + "')" ; + db.query(query, function (err, result, fields) { + if (err) throw err; + res.send( JSON .stringify( "Success" )); + }); +}); +app.post( '/food' , function (req, res){ + var name = req.body.name; + var quantity = req.body.quantity; + var id_animal = req.body.id_animal; + var query = "INSERT INTO food (name, quantity, id_animal) VALUES ('" + name + "','" + quantity + "','" + id_animal +"')" ; + db.query(query, function (err, result, fields) { + if (err) throw err; + res.send( JSON .stringify( "Success" )); + }); +}); +app.post( '/staff' , function (req, res){ + var firstname = req.body.firstname; + var lastname = req.body.lastname; + var wage = req.body.wage; + var query = "INSERT INTO staff (firstname, lastname, wage) VALUES ('" + firstname + "','" + lastname + "','" + wage +"')" ; + db.query(query, function (err, result, fields) { + if (err) throw err; + res.send( JSON .stringify( "Success" )); + }); +}); + + + + + + + + + + + + + + +//READ +app.get( '/staff' , function (req, res) { + +// FILTRE CONDITION + var query = "SELECT * FROM staff" ; + var conditions = [ "id","firstname", "lastname", "wage" ]; + + // Parcours du tableau des éléments récupérés dans la requête + for ( var index in conditions) { + if (conditions[index] in req.query) { + + // 1ère condition + if (query.indexOf( "WHERE" ) < 0 ) { + query += " WHERE" ; + } + + // 2ème condition + else { + query += " AND" ; + } + + // Concaténation des conditions + query += " " + conditions[index] + "='" + + req.query[conditions[index]] + "'" ; + } + } + +// FILTRE D'ORDRE + // Tri des champs selon le paramètre saisi en url + if ("sort" in req.query) { + var sort = req.query["sort"].split(","); + query += " ORDER BY"; + for (var index in sort) { + var direction = sort[index].substr(0, 1); // On enlève le dernier élément que l'on a rentré + var field = sort[index].substr(1); + query += " " + field; + if (direction == "-") + query += " DESC,"; // Décroissant + else + query += " ASC,"; // Croissant + } + query = query.slice(0, -1); + + } + +// FILTRE DES CHAMPS + //Si les champs que l'on veut sont remplis dans l'url + if ( "fields" in req.query) { + query = query.replace( "*" , req.query[ "fields" ]); } + //localhost:3000/staff/?key=ceciestmonjeton&fields=Nom + +// FILTRE PAR PAGINATION + // Limit = nbe de filtres que l'on veut afficher + if ( "limit" in req.query) { + + // Concaténation de la requête en fonction du nbe de filtres que l'on veut afficher + query += " LIMIT " + req.query[ "limit" ]; + + // Décalage + if ( "offset" in req.query) { + // Concaténation de la requête en fonction du décalage que l'on veut afficher + query += " OFFSET " + req.query[ "offset" ]; + } + } + + db.query(query, function (err, result, fields) { + if (err) throw err; + res.send( JSON .stringify(result)); + }); + +}); + + + +//READ ALL DATA +app.get( '/animals' , function (req, res) { + +// FILTRE CONDITION + var query = "SELECT * FROM animals" ; + var conditions = [ "id", "name", "breed", "food_per_day", "birthday", "entry_date", "id_cage" ]; + for ( var index in conditions) { + if (conditions[index] in req.query) { + + if (query.indexOf( "WHERE" ) < 0 ) { + query += " WHERE" ; + } + + else { + query += " AND" ; + } + + query += " " + conditions[index] + "='" + + req.query[conditions[index]] + "'" ; + } + } + +// FILTRE D'ORDRE + if ("sort" in req.query) { + var sort = req.query["sort"].split(","); + query += " ORDER BY"; + for (var index in sort) { + var direction = sort[index].substr(0, 1); + var field = sort[index].substr(1); + query += " " + field; + if (direction == "-") + query += " DESC,"; + else + query += " ASC,"; + } + query = query.slice(0, -1); + + } + +// FILTRE DES CHAMPS + if ( "fields" in req.query) { + query = query.replace( "*" , req.query[ "fields" ]); } + +// FILTRE PAR PAGINATION + if ( "limit" in req.query) { + query += " LIMIT " + req.query[ "limit" ]; + + if ( "offset" in req.query) { + query += " OFFSET " + req.query[ "offset" ]; + } + } + + db.query(query, function (err, result, fields) { + if (err) throw err; + res.send( JSON .stringify(result)); + }); + +}); + + +//READ ALL DATA +app.get( '/cages' , function (req, res) { + +// FILTRE CONDITION + var query = "SELECT * FROM cages" ; + var conditions = [ "id", "name", "description", "area" ]; + for ( var index in conditions) { + if (conditions[index] in req.query) { + + if (query.indexOf( "WHERE" ) < 0 ) { + query += " WHERE" ; + } + + else { + query += " AND" ; + } + + query += " " + conditions[index] + "='" + + req.query[conditions[index]] + "'" ; + } + } + +// FILTRE D'ORDRE + // Tri des champs selon le paramètre saisi en url + if ("sort" in req.query) { + var sort = req.query["sort"].split(","); + query += " ORDER BY"; + for (var index in sort) { + var direction = sort[index].substr(0, 1); + var field = sort[index].substr(1); + query += " " + field; + if (direction == "-") + query += " DESC,"; + else + query += " ASC,"; + } + query = query.slice(0, -1); + + } + +// FILTRE DES CHAMPS + if ( "fields" in req.query) { + query = query.replace( "*" , req.query[ "fields" ]); } + +// FILTRE PAR PAGINATION + if ( "limit" in req.query) { + query += " LIMIT " + req.query[ "limit" ]; + + if ( "offset" in req.query) { + query += " OFFSET " + req.query[ "offset" ]; + } + } + db.query(query, function (err, result, fields) { + if (err) throw err; + res.send( JSON .stringify(result)); + }); + +}); + +//READ ALL DATA +app.get( '/food' , function (req, res) { + +// FILTRE CONDITION + var query = "SELECT * FROM food" ; + var conditions = [ "id", "name", "quantity", "id_animal" ]; + + for ( var index in conditions) { + if (conditions[index] in req.query) { + + if (query.indexOf( "WHERE" ) < 0 ) { + query += " WHERE" ; + } + + else { + query += " AND" ; + } + query += " " + conditions[index] + "='" + + req.query[conditions[index]] + "'" ; + } + } + +// FILTRE D'ORDRE + if ("sort" in req.query) { + var sort = req.query["sort"].split(","); + query += " ORDER BY"; + for (var index in sort) { + var direction = sort[index].substr(0, 1); + var field = sort[index].substr(1); + query += " " + field; + if (direction == "-") + query += " DESC,"; + else + query += " ASC,"; + } + query = query.slice(0, -1); + + } + +// FILTRE DES CHAMPS + if ( "fields" in req.query) { + query = query.replace( "*" , req.query[ "fields" ]); } + +// FILTRE PAR PAGINATION + if ( "limit" in req.query) { + + query += " LIMIT " + req.query[ "limit" ]; + + if ( "offset" in req.query) { + query += " OFFSET " + req.query[ "offset" ]; + } + } + + db.query(query, function (err, result, fields) { + if (err) throw err; + res.send( JSON .stringify(result)); + }); + +}); + + + + + + + + + + +//READ +app.get( '/animals/:id' , function (req, res) { + var id = req.params.id; + var query = "SELECT * FROM animals WHERE id=" + id; + + if ("fields" in req.query) { + query = query.replace("*", req.query["fields"]); + } + + query += ";"; + + db.query(query, function (err, result, fields) { + if (err) throw err; + res.send( JSON .stringify(result)); + }); +}); + +app.get( '/staff/:id' , function (req, res) { + var id = req.params.id; + var query = "SELECT * FROM staff WHERE id=" + id; + + if ("fields" in req.query) { + query = query.replace("*", req.query["fields"]); + } + query += ";"; + db.query(query, function (err, result, fields) { + if (err) throw err; + res.send( JSON .stringify(result)); + }); +}); +app.get( '/cages/:id' , function (req, res) { + var id = req.params.id; + var query = "SELECT * FROM cages WHERE id=" + id; + + if ("fields" in req.query) { + query = query.replace("*", req.query["fields"]); + } + query += ";"; + db.query(query, function (err, result, fields) { + if (err) throw err; + res.send( JSON .stringify(result)); + }); +}); +app.get( '/food/:id' , function (req, res) { + var id = req.params.id; + var query = "SELECT * FROM food WHERE id=" + id; + + if ("fields" in req.query) { + query = query.replace("*", req.query["fields"]); + } + query += ";"; + db.query(query, function (err, result, fields) { + if (err) throw err; + res.send( JSON .stringify(result)); + }); +}); + + + + + + + + + + +//UPDATE +app.put( '/animals/:id' , function (req, res) { + var id = req.params.id; + var name = req.body.name; + var breed = req.body.breed; + var food_per_day = req.body.food_per_day; + var birthday = req.body.birthday; + var entry_date = req.body.entry_date; + var id_cage = req.body.id_cage; + + var query = "UPDATE animals SET " + + "name = (CASE WHEN ? IS NULL THEN name ELSE ? END), " + + "breed = (CASE WHEN ? IS NULL THEN breed ELSE ? END), " + + "food_per_day = (CASE WHEN ? IS NULL THEN food_per_day ELSE ? END), " + + "birthday = (CASE WHEN ? IS NULL THEN birthday ELSE ? END), " + + "entry_date = (CASE WHEN ? IS NULL THEN entry_date ELSE ? END), " + + "id_cage = (CASE WHEN ? IS NULL THEN id_cage ELSE ? END) " + + "WHERE id=" + id; + db.query(query, [name, name, breed, breed, food_per_day, food_per_day, birthday, birthday, entry_date, entry_date, id_cage, id_cage], function (err, result, fields) { + if (err) throw err; + res.send( JSON .stringify( "Success" )); + }); + }); + +app.put( '/cages/:id' , function (req, res) { + var id = req.params.id; + var name = req.body.name; + var description = req.body.description; + var area = req.body.area; + + var query = "UPDATE cages SET " + + "name = (CASE WHEN ? IS NULL THEN name ELSE ? END), " + + "description = (CASE WHEN ? IS NULL THEN description ELSE ? END), " + + "area = (CASE WHEN ? IS NULL THEN area ELSE ? END) " + + "WHERE id=" + id; + db.query(query, [name, name, description, description, area, area], function (err, result, fields) { + if (err) throw err; + res.send( JSON .stringify( "Success" )); + }); + }); + +app.put( '/food/:id' , function (req, res) { + var id = req.params.id; + var name = req.body.name; + var quantity = req.body.quantity; + var id_animal = req.body.id_animal; + + var query = "UPDATE food SET " + + "name = (CASE WHEN ? IS NULL THEN name ELSE ? END), " + + "quantity = (CASE WHEN ? IS NULL THEN quantity ELSE ? END), " + + "id_animal = (CASE WHEN ? IS NULL THEN id_animal ELSE ? END) " + + "WHERE id=" + id; + db.query(query, [name, name, quantity, quantity, id_animal, id_animal], function (err, result, fields) { + if (err) throw err; + res.send( JSON .stringify( "Success" )); + }); + }); + +app.put( '/staff/:id' , function (req, res) { + var id = req.params.id; + var firstname = req.body.firstname; + var lastname = req.body.lastname; + var wage = req.body.wage; + + var query = "UPDATE staff SET " + + "firstname = (CASE WHEN ? IS NULL THEN firstname ELSE ? END), " + + "lastname = (CASE WHEN ? IS NULL THEN lastname ELSE ? END), " + + "wage = (CASE WHEN ? IS NULL THEN wage ELSE ? END) " + + "WHERE id=" + id; + db.query(query, [firstname, firstname, lastname, lastname, wage, wage], function (err, result, fields) { + if (err) throw err; + res.send( JSON .stringify( "Success" )); + }); + }); + + + + + + +// Delete an animal with the id in the route +app.delete( '/animals/:id' , function (req, res) { + + // Get the id of the animal + var id = req.params.id; + + var query = "DELETE FROM animals WHERE id=" + id; + db.query(query, function (err, result, fields) { + if (err) throw err; + res.send( JSON .stringify( "Success" )); + }); +}); +app.delete( '/cages/:id' , function (req, res) { + var id = req.params.id; + var query = "DELETE FROM cages WHERE id=" + id; + db.query(query, function (err, result, fields) { + if (err) throw err; + res.send( JSON .stringify( "Success" )); + }); +}); +app.delete( '/food/:id' , function (req, res) { + var id = req.params.id; + var query = "DELETE FROM food WHERE id=" + id; + db.query(query, function (err, result, fields) { + if (err) throw err; + res.send( JSON .stringify( "Success" )); + }); +}); +app.delete( '/staff/:id' , function (req, res) { + var id = req.params.id; + var query = "DELETE FROM staff WHERE id=" + id; + db.query(query, function (err, result, fields) { + if (err) throw err; + res.send( JSON .stringify( "Success" )); + }); +}); + + + + + + + + + + + +//RELATION ANIMAL IN CAGES : ALL + +//READ JOINTURE +app.get('/cages/:idca/animals', function(req, res) { + var idca = req.params.idca; +// FILTRE CONDITION + var query = "SELECT animals.* FROM cages INNER JOIN animals ON cages.id = animals.id_cage WHERE cages.id=" + idca; + //var conditions = [ "animals.id", "animals.name", "animals.breed", "animals.food_per_day", "animals.birthday", "animals.entry_date", "animals.id_cage", "cages.id", "cages.name", "cages.description", "cages.area" ]; + var conditions = [ "id", "name", "breed", "food_per_day", "birthday", "entry_date" ]; + //var conditions = [ "animals.id", "animals.name", "animals.breed", "animals.food_per_day", "animals.birthday", "animals.entry_date", "cages.id", "cages.name", "cages.description", "cages.area" ]; + for ( var index in conditions) { + if (conditions[index] in req.query) { + if (query.indexOf( "WHERE" ) < 0 ) { + query += " WHERE" ; + } + else { + query += " AND" ; + } + query += " animals." + conditions[index] + "='" + + req.query[conditions[index]] + "'" ; + } + } +// FILTRE D'ORDRE + if ("sort" in req.query) { + var sort = req.query["sort"].split(","); + query += " ORDER BY"; + for (var index in sort) { + var direction = sort[index].substr(0, 1); + var field = sort[index].substr(1); + query += " " + field; + if (direction == "-") + query += " DESC,"; + else + query += " ASC,"; + } + query = query.slice(0, -1); + } + +// FILTRE DES CHAMPS + if ( "fields" in req.query) { + query = query.replace( "*" , req.query[ "fields" ]); } + +// FILTRE PAR PAGINATION + if ( "limit" in req.query) { + query += " LIMIT " + req.query[ "limit" ]; + if ( "offset" in req.query) { + query += " OFFSET " + req.query[ "offset" ]; + } + } + db.query(query, function (err, result, fields) { + if (err) throw err; + res.send( JSON .stringify(result)); + }); +}); + + +//RELATION ANIMAL IN CAGES : ONE + +//READ JOINTURE +app.get('/cages/:idca/animals/:idan', function(req, res) { + var idca = req.params.idca; + var idan = req.params.idan; +// FILTRE CONDITION + var query = "SELECT animals.* FROM cages INNER JOIN animals ON cages.id = animals.id_cage WHERE cages.id=" + idca + " AND animals.id=" +idan; + var conditions = [ "id", "name", "breed", "food_per_day", "birthday", "entry_date" ]; + + for ( var index in conditions) { + if (conditions[index] in req.query) { + if (query.indexOf( "WHERE" ) < 0 ) { + query += " WHERE" ; + } + else { + query += " AND" ; + } + query += " animals." + conditions[index] + "='" + + req.query[conditions[index]] + "'" ; + } + } + +// FILTRE D'ORDRE + if ("sort" in req.query) { + var sort = req.query["sort"].split(","); + query += " ORDER BY"; + for (var index in sort) { + var direction = sort[index].substr(0, 1); + var field = sort[index].substr(1); + query += " " + field; + if (direction == "-") + query += " DESC,"; + else + query += " ASC,"; + } + query = query.slice(0, -1); + + } + +// FILTRE DES CHAMPS + if ( "fields" in req.query) { + query = query.replace( "*" , req.query[ "fields" ]); } + +// FILTRE PAR PAGINATION + if ( "limit" in req.query) { + query += " LIMIT " + req.query[ "limit" ]; + if ( "offset" in req.query) { + query += " OFFSET " + req.query[ "offset" ]; + } + } + + db.query(query, function (err, result, fields) { + if (err) throw err; + res.send( JSON .stringify(result)); + }); + +}); + + + + + +//RELATION CAGES IN ANIMALS : ALL + +//READ JOINTURE +app.get('/animals/:idan/cages', function(req, res) { + var idan = req.params.idan; +// FILTRE CONDITION + var query = "SELECT cages.* FROM animals INNER JOIN cages ON cages.id = animals.id_cage WHERE animals.id=" + idan; + var conditions = [ "id", "name", "description", "area" ]; + + for ( var index in conditions) { + if (conditions[index] in req.query) { + if (query.indexOf( "WHERE" ) < 0 ) { + query += " WHERE" ; + } + else { + query += " AND" ; + } + query += " cages." + conditions[index] + "='" + + req.query[conditions[index]] + "'" ; + } + } + +// FILTRE D'ORDRE + if ("sort" in req.query) { + var sort = req.query["sort"].split(","); + query += " ORDER BY"; + for (var index in sort) { + var direction = sort[index].substr(0, 1); + var field = sort[index].substr(1); + query += " " + field; + if (direction == "-") + query += " DESC,"; + else + query += " ASC,"; + } + query = query.slice(0, -1); + + } + +// FILTRE DES CHAMPS + if ( "fields" in req.query) { + query = query.replace( "*" , req.query[ "fields" ]); } + +// FILTRE PAR PAGINATION + if ( "limit" in req.query) { + query += " LIMIT " + req.query[ "limit" ]; + if ( "offset" in req.query) { + query += " OFFSET " + req.query[ "offset" ]; + } + } + + db.query(query, function (err, result, fields) { + if (err) throw err; + res.send( JSON .stringify(result)); + }); + +}); + + + +//RELATION CAGES IN ANIMALS : ONE + +//READ JOINTURE +app.get('/animals/:idan/cages/:idca', function(req, res) { + var idca = req.params.idca; + var idan = req.params.idan; +// FILTRE CONDITION + var query = "SELECT cages.* FROM cages INNER JOIN animals ON cages.id = animals.id_cage WHERE cages.id=" + idca + " AND animals.id=" +idan; + var conditions = [ "id", "name", "description", "area" ]; + + for ( var index in conditions) { + if (conditions[index] in req.query) { + if (query.indexOf( "WHERE" ) < 0 ) { + query += " WHERE" ; + } + else { + query += " AND" ; + } + query += " cages." + conditions[index] + "='" + + req.query[conditions[index]] + "'" ; + } + } + +// FILTRE D'ORDRE + if ("sort" in req.query) { + var sort = req.query["sort"].split(","); + query += " ORDER BY"; + for (var index in sort) { + var direction = sort[index].substr(0, 1); + var field = sort[index].substr(1); + query += " " + field; + if (direction == "-") + query += " DESC,"; + else + query += " ASC,"; + } + query = query.slice(0, -1); + + } + +// FILTRE DES CHAMPS + if ( "fields" in req.query) { + query = query.replace( "*" , req.query[ "fields" ]); } + +// FILTRE PAR PAGINATION + if ( "limit" in req.query) { + query += " LIMIT " + req.query[ "limit" ]; + if ( "offset" in req.query) { + query += " OFFSET " + req.query[ "offset" ]; + } + } + + db.query(query, function (err, result, fields) { + if (err) throw err; + res.send( JSON .stringify(result)); + }); + +}); + + + + +//RELATION ANIMAL IN FOOD : ALL + +//READ JOINTURE +app.get('/food/:id/animals', function(req, res) { + var id = req.params.id; +// FILTRE CONDITION + var query = "SELECT animals.* FROM animals INNER JOIN food ON animals.id = food.id_animal WHERE food.id=" + id; + var conditions = [ "id", "name", "breed", "food_per_day", "birthday", "entry_date" ]; + + for ( var index in conditions) { + if (conditions[index] in req.query) { + if (query.indexOf( "WHERE" ) < 0 ) { + query += " WHERE" ; + } + else { + query += " AND" ; + } + query += " animals." + conditions[index] + "='" + + req.query[conditions[index]] + "'" ; + } + } +// FILTRE D'ORDRE + if ("sort" in req.query) { + var sort = req.query["sort"].split(","); + query += " ORDER BY"; + for (var index in sort) { + var direction = sort[index].substr(0, 1); + var field = sort[index].substr(1); + query += " " + field; + if (direction == "-") + query += " DESC,"; + else + query += " ASC,"; + } + query = query.slice(0, -1); + } +// FILTRE DES CHAMPS + if ( "fields" in req.query) { + query = query.replace( "*" , req.query[ "fields" ]); } +// FILTRE PAR PAGINATION + if ( "limit" in req.query) { + query += " LIMIT " + req.query[ "limit" ]; + if ( "offset" in req.query) { + query += " OFFSET " + req.query[ "offset" ]; + } + } + db.query(query, function (err, result, fields) { + if (err) throw err; + res.send( JSON .stringify(result)); + }); + +}); + + +//RELATION ANIMAL IN FOOD : ONE + +//READ JOINTURE +app.get('/food/:id_food/animals/:id_animal', function(req, res) { + var id_animal = req.params.id_animal; + var id_food = req.params.id_food; +// FILTRE CONDITION + var query = "SELECT animals.* FROM animals INNER JOIN food ON animals.id = food.id_animal WHERE animals.id=" + id_animal + " AND food.id=" +id_food; + var conditions = [ "id", "name", "breed", "food_per_day", "birthday", "entry_date" ]; + + for ( var index in conditions) { + if (conditions[index] in req.query) { + if (query.indexOf( "WHERE" ) < 0 ) { + query += " WHERE" ; + } + else { + query += " AND" ; + } + query += " animals." + conditions[index] + "='" + + req.query[conditions[index]] + "'" ; + } + } +// FILTRE D'ORDRE + if ("sort" in req.query) { + var sort = req.query["sort"].split(","); + query += " ORDER BY"; + for (var index in sort) { + var direction = sort[index].substr(0, 1); + var field = sort[index].substr(1); + query += " " + field; + if (direction == "-") + query += " DESC,"; + else + query += " ASC,"; + } + query = query.slice(0, -1); + } +// FILTRE DES CHAMPS + if ( "fields" in req.query) { + query = query.replace( "*" , req.query[ "fields" ]); } +// FILTRE PAR PAGINATION + if ( "limit" in req.query) { + query += " LIMIT " + req.query[ "limit" ]; + if ( "offset" in req.query) { + query += " OFFSET " + req.query[ "offset" ]; + } + } + db.query(query, function (err, result, fields) { + if (err) throw err; + res.send( JSON .stringify(result)); + }); +}); + + + + +//RELATION FOOD IN ANIMAL : ALL + +//READ JOINTURE +app.get('/animals/:id/food', function(req, res) { + var id = req.params.id; +// FILTRE CONDITION + var query = "SELECT food.* FROM animals INNER JOIN food ON animals.id = food.id_animal WHERE animals.id=" + id; + var conditions = [ "id", "name", "quantity" ]; + + for ( var index in conditions) { + if (conditions[index] in req.query) { + if (query.indexOf( "WHERE" ) < 0 ) { + query += " WHERE" ; + } + else { + query += " AND" ; + } + query += " food." + conditions[index] + "='" + + req.query[conditions[index]] + "'" ; + } + } +// FILTRE D'ORDRE + if ("sort" in req.query) { + var sort = req.query["sort"].split(","); + query += " ORDER BY"; + for (var index in sort) { + var direction = sort[index].substr(0, 1); + var field = sort[index].substr(1); + query += " " + field; + if (direction == "-") + query += " DESC,"; + else + query += " ASC,"; + } + query = query.slice(0, -1); + } +// FILTRE DES CHAMPS + if ( "fields" in req.query) { + query = query.replace( "*" , req.query[ "fields" ]); } +// FILTRE PAR PAGINATION + if ( "limit" in req.query) { + query += " LIMIT " + req.query[ "limit" ]; + if ( "offset" in req.query) { + query += " OFFSET " + req.query[ "offset" ]; + } + } + db.query(query, function (err, result, fields) { + if (err) throw err; + res.send( JSON .stringify(result)); + }); + +}); + +//RELATION FOOD IN ANIMAL : ONE + +//READ JOINTURE +app.get('/animals/:id_animal/food/:id_food', function(req, res) { + var id_animal = req.params.id_animal; + var id_food = req.params.id_food; +// FILTRE CONDITION + var query = "SELECT food.* FROM animals INNER JOIN food ON animals.id = food.id_animal WHERE animals.id=" + id_animal + " AND food.id=" +id_food; + var conditions = [ "id", "name", "quantity" ]; + + for ( var index in conditions) { + if (conditions[index] in req.query) { + if (query.indexOf( "WHERE" ) < 0 ) { + query += " WHERE" ; + } + else { + query += " AND" ; + } + query += " food." + conditions[index] + "='" + + req.query[conditions[index]] + "'" ; + } + } +// FILTRE D'ORDRE + if ("sort" in req.query) { + var sort = req.query["sort"].split(","); + query += " ORDER BY"; + for (var index in sort) { + var direction = sort[index].substr(0, 1); + var field = sort[index].substr(1); + query += " " + field; + if (direction == "-") + query += " DESC,"; + else + query += " ASC,"; + } + query = query.slice(0, -1); + } +// FILTRE DES CHAMPS + if ( "fields" in req.query) { + query = query.replace( "*" , req.query[ "fields" ]); } +// FILTRE PAR PAGINATION + if ( "limit" in req.query) { + query += " LIMIT " + req.query[ "limit" ]; + if ( "offset" in req.query) { + query += " OFFSET " + req.query[ "offset" ]; + } + } + db.query(query, function (err, result, fields) { + if (err) throw err; + res.send( JSON .stringify(result)); + }); + +}); + + + + + +// FOOD STATS +app.get('/food-stats',function(req, res) { + + var query = "SELECT animals.id AS id, CASE WHEN (food.quantity / animals.food_per_day) IS NULL THEN 0 ELSE (food.quantity / animals.food_per_day) END AS days_left FROM animals JOIN food ON animals.id=food.id_animal"; + db.query(query , function(err, result, fields) { + if (err) throw err; + + res.send(JSON.stringify(result)); + }); + }); From f9598bcf569b84163ac608cd7c768cf76d7eac63 Mon Sep 17 00:00:00 2001 From: ColineBol <45685982+ColineBol@users.noreply.github.com> Date: Sat, 15 Dec 2018 16:06:36 +0100 Subject: [PATCH 02/25] Create Dockerfile --- Dockerfile | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..e69de29b From 8ba00d5fd02d08dfdb4c9012e53bc5f0a1352df4 Mon Sep 17 00:00:00 2001 From: ColineBol <45685982+ColineBol@users.noreply.github.com> Date: Sat, 15 Dec 2018 17:12:36 +0100 Subject: [PATCH 03/25] Update Dockerfile --- Dockerfile | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Dockerfile b/Dockerfile index e69de29b..3efb007a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -0,0 +1,7 @@ +FROM node:7 +WORKDIR /app +RUN npm install express +RUN npm install MySQL +COPY . /app + +CMD node zoo3.js \ No newline at end of file From 261dc3389379701b0fbfeb4aeddd8157da516b64 Mon Sep 17 00:00:00 2001 From: ColineBol <45685982+ColineBol@users.noreply.github.com> Date: Mon, 17 Dec 2018 01:03:15 +0100 Subject: [PATCH 04/25] Update zoo3.js --- zoo3.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/zoo3.js b/zoo3.js index d2c93ca4..7ada038e 100644 --- a/zoo3.js +++ b/zoo3.js @@ -11,7 +11,7 @@ app.use(bodyParser.urlencoded({ extended: true })); var db = mysql.createConnection({ host: "localhost" , user: "root" , - password: "" , + password: "root" , database: "project" , port: "3306" }); @@ -40,7 +40,7 @@ app.use( function (req, res, next) { app.listen(3000, function() { db.connect(function(err) { - if (err) throw err; + //if (err) throw err; console.log('Connection to database successful!'); }); console.log('Example app listening on port 3000!'); From c0779feeaa546bb4b13a00a63e7ba13f364efc38 Mon Sep 17 00:00:00 2001 From: ColineBol <45685982+ColineBol@users.noreply.github.com> Date: Mon, 17 Dec 2018 01:03:19 +0100 Subject: [PATCH 05/25] Update answers.md --- answers.md | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/answers.md b/answers.md index b7025b97..196c401b 100644 --- a/answers.md +++ b/answers.md @@ -1,24 +1,29 @@ # Answers -Lastname: -Firstname: +Lastname: Bolland +Firstname: Coline ## 2.2 -command: +command: docker run coline ## 2.3 question: -command: +command: +docker run -it -p 3000:3000 coline (dans powershell) +EXPOSE 3000 (dans dockerfile) ## 2.5 question: -command: +command: docker login --username=colinebolland +docker push colinebolland/devops-lab ## 2.6 -command: +command: docker stop $(docker ps -a -q) + docker rm $(docker ps -a -q) + docker rmi -f $(docker images -a -q) question: -command: + command: From b825c0d9097dd6ba61ee3bdeed8635fc7a7f8b2e Mon Sep 17 00:00:00 2001 From: ColineBol <45685982+ColineBol@users.noreply.github.com> Date: Mon, 17 Dec 2018 01:03:22 +0100 Subject: [PATCH 06/25] Create 1.PNG --- docker pictures/1.PNG | Bin 0 -> 4727 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docker pictures/1.PNG diff --git a/docker pictures/1.PNG b/docker pictures/1.PNG new file mode 100644 index 0000000000000000000000000000000000000000..91200bd6f5d2adc31db0529cf65ac0e39951875a GIT binary patch literal 4727 zcmbuDX;>3i+sAP$b*0Ltf~0kef
?%^(!&GRC5HNzurVx=$
z1dJ?UktHC6Kn0@&2oNO579a^UkU+MXd7#hrF4yzzz1|Nq_y5d?bLKwh%>4f6PI9of
z+PQ82HU$NRoi^6zoD>u`0&Duzx8JPYf83Kgv=%mmIa!@ic=J(nZmqG|&%(|^L7|ec
zUGBYQt-bY*wQHDy!k%B(uMJ~25s_ PB^CkcDa`_x
zt`b05uY8!o3|?oZUX2K#gYG6l7S+gl^JGc?CCcx&)!&Fzm(j0kIgWFKbWNsDtrOND
zc1$`1%iaZxxU@mP(jHtor5@hi8ClO0ky+~z&`6&)lrE;wS{`h6y8dI^swhipB`L}R
zL8}ZYp<;|w#$e!Wq=%_`+hwOb^MI_1(;1)INGeHfVGqq8WmWLsBr&>5!RDmXJn(+K
zCj}pbs42OH_(k#{fRfm7C$F&+zZARFWM+B{`}w8t3u5-rRNP}wdzFoQyw*Doqr|9}
zV;a$T%5Qv!Hs&HU-gt@3n;g6 M3{#d-tFcG&0fo}K^ZwQasO=gMu+;R&+J`Tj^F2#nsM9wc
zu?|e{-1p-*8sv>MFHB>IY)_%h27`-F&DRs{`&lDbWcBZ^+%VhK(*ZWbzYKBHl)MZ=
z6 IzhWd{Hwx@jc1-P>da6u0R};m
z`pjk_n4L6#g-Bum;yQ<}N+#`)lVbZL@mSa<21)_*kw`9Nb};VsG84b)WL(3CD=xEt
z5QS=5V#t}amb&*tYxSEyjruxw*Jt-;r448!?MD>_x~oO+3jSu~(JnrexT|CS^p0M0
zWcAMHekBP8TuFQE!v)T$iZQzjFPIaxJ-DhX%~j%4t!jQxgihv0L&!Q;3QmO#_J-YC
zuridzU<_V(GnwvBC)$QB*~JzN(nKHuYrVL;?TsCHm+M`KY1iMLk9%OnL-G{1WZcZn
zX{N-(NmPx^5QUN!&Kx3+gxUO1d0G~2clF{AOY`pe8xuLVVFeN%hlVuJhP~DmG?PyT
z->G#it^RiPdak%Lx@?s#WkreZ$!X9CdT-;&;r;hJ#$SWZW)gA*tXF_obU#VkAi{2F
zLgZ4bV9vL?bEp!LbAtUVyta~F8P}KRINm$eS1!2L4o^eoP(xHFftSdxuwN|s5|g19f7D|?>On=otIwO1qv(K}unCv(F18i2cp%1QgCE}|)?&Y??L-pg
zn*OxOW8_&-nZ!Srtp$&Q^Tvutz02&iE9xkUjj=#OO#fJC!vIE6Ts>6Z54OSZvuz5u
z-wm7gEv4ivUpGEVGcdO9;-Vwf9bR|>UJTG~xI4JZWr&
zf^3D^GyD27D~TQBhM`cy-1D-k*Beq=O5=LnoPNr;p>#>Br+)W&5*zw(oBXh{NL7YI
zI6a#SLb>p59V&NLckrsHtek!|o9!P3cc55C;;L#+VSuk>>X5YH(Ac9>OP+pHdvJ@)O85{A^}
zyIgs&*1bGLCjA6L_6_4xS_)9ukVdU{n%0G|K{M2^Q*q-*srzaA94{(K+pv#TUsRuP
zm}B3%Vbbj=$