backend: Ajout de Sequelize, GET /functions
TODO: Trier par catégorie et chercher les fonctions
This commit is contained in:
		@@ -1 +1,5 @@
 | 
			
		||||
OpenWeatherMap_API_KEY = ""
 | 
			
		||||
OpenWeatherMap_API_KEY = ""
 | 
			
		||||
DB_HOST = ""
 | 
			
		||||
DB_NAME = ""
 | 
			
		||||
DB_USER = ""
 | 
			
		||||
DB_PASS = ""
 | 
			
		||||
@@ -1,11 +1,13 @@
 | 
			
		||||
/* Modules */
 | 
			
		||||
require('dotenv').config();
 | 
			
		||||
const path    = require('path');
 | 
			
		||||
const express = require('express');
 | 
			
		||||
const helmet  = require('helmet');
 | 
			
		||||
const cors    = require('cors');
 | 
			
		||||
const morgan  = require('morgan');
 | 
			
		||||
 | 
			
		||||
/* Files Imports & Variables */
 | 
			
		||||
const sequelize     = require('./assets/utils/database');
 | 
			
		||||
const { PORT }      = require('./assets/config/config');
 | 
			
		||||
const errorHandling = require('./assets/utils/errorHandling');
 | 
			
		||||
const app           = express();
 | 
			
		||||
@@ -17,7 +19,9 @@ app.use(morgan('dev'));
 | 
			
		||||
app.use(express.json());
 | 
			
		||||
 | 
			
		||||
/* Routes */ 
 | 
			
		||||
app.use('/images', express.static(path.join(__dirname, "assets", "images")));
 | 
			
		||||
app.use('/functions', require('./routes/functions'));
 | 
			
		||||
app.use('/categories', require('./routes/categories'));
 | 
			
		||||
 | 
			
		||||
/* Errors Handling */
 | 
			
		||||
app.use((_req, _res, next) => errorHandling(next, { statusCode: 404, message: "La route n'existe pas!" })); // 404
 | 
			
		||||
@@ -27,5 +31,17 @@ app.use((error, _req, res, _next) => {
 | 
			
		||||
    return res.status(statusCode || 500).json({ message });
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
/* Database Relations */
 | 
			
		||||
const Functions  = require('./models/functions');
 | 
			
		||||
const Categories = require('./models/categories');
 | 
			
		||||
 | 
			
		||||
Categories.hasOne(Functions, { constraints: true, onDelete: 'CASCADE'});
 | 
			
		||||
Functions.belongsTo(Categories);
 | 
			
		||||
 | 
			
		||||
/* Server */
 | 
			
		||||
app.listen(PORT, () => console.log('\x1b[36m%s\x1b[0m', `Started on port ${PORT}.`));
 | 
			
		||||
// sequelize.sync({ force: true })
 | 
			
		||||
sequelize.sync()
 | 
			
		||||
    .then(() => {
 | 
			
		||||
        app.listen(PORT, () =>  console.log('\x1b[36m%s\x1b[0m', `Started on port ${PORT}.`));
 | 
			
		||||
    })
 | 
			
		||||
    .catch((error) => console.log(error));
 | 
			
		||||
@@ -1,6 +1,12 @@
 | 
			
		||||
const config = {
 | 
			
		||||
    PORT: process.env.PORT || 8080,
 | 
			
		||||
    WEATHER_API_KEY: process.env.OpenWeatherMap_API_KEY
 | 
			
		||||
    WEATHER_API_KEY: process.env.OpenWeatherMap_API_KEY,
 | 
			
		||||
    DATABASE: {
 | 
			
		||||
        host: process.env.DB_HOST,
 | 
			
		||||
        name: process.env.DB_NAME,
 | 
			
		||||
        user: process.env.DB_USER,
 | 
			
		||||
        password: process.env.DB_PASS
 | 
			
		||||
    },
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
module.exports = config;
 | 
			
		||||
@@ -4,6 +4,11 @@ const errors = {
 | 
			
		||||
        statusCode: 400
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    serverError: {
 | 
			
		||||
        message: "Le serveur n'a pas pu traiter votre requête.",
 | 
			
		||||
        statusCode: 500
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    requiredFields: {
 | 
			
		||||
        message: "Vous devez remplir tous les champs...",
 | 
			
		||||
        statusCode: 400
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								backend/assets/images/functions/calculateAge.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								backend/assets/images/functions/calculateAge.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 140 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								backend/assets/images/functions/randomNumber.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								backend/assets/images/functions/randomNumber.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 76 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								backend/assets/images/functions/weatherRequest.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								backend/assets/images/functions/weatherRequest.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 91 KiB  | 
							
								
								
									
										9
									
								
								backend/assets/utils/database.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								backend/assets/utils/database.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
			
		||||
const Sequelize    = require('sequelize');
 | 
			
		||||
const { DATABASE } = require('../config/config');
 | 
			
		||||
 | 
			
		||||
const sequelize = new Sequelize(DATABASE.name, DATABASE.user, DATABASE.password, {
 | 
			
		||||
    dialect: 'mysql',
 | 
			
		||||
    host: DATABASE.host
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
module.exports = sequelize;
 | 
			
		||||
							
								
								
									
										13
									
								
								backend/controllers/categories.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								backend/controllers/categories.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
const errorHandling = require('../assets/utils/errorHandling');
 | 
			
		||||
const Categories    = require('../models/categories');
 | 
			
		||||
 | 
			
		||||
exports.getCategories = (_req, res, next) => {
 | 
			
		||||
    Categories.findAll()
 | 
			
		||||
        .then((result) => {
 | 
			
		||||
            res.status(200).json(result);
 | 
			
		||||
        })
 | 
			
		||||
        .catch((error) => {
 | 
			
		||||
            console.log(error);
 | 
			
		||||
            errorHandling(next, serverError);
 | 
			
		||||
        });
 | 
			
		||||
}
 | 
			
		||||
@@ -1,6 +1,39 @@
 | 
			
		||||
const errorHandling     = require('../assets/utils/errorHandling');
 | 
			
		||||
const { serverError }   = require('../assets/config/errors');
 | 
			
		||||
const Functions         = require('../models/functions');
 | 
			
		||||
const Categories        = require('../models/categories');
 | 
			
		||||
const functionToExecute = require('../assets/functions/functionObject');
 | 
			
		||||
 | 
			
		||||
exports.getFunctions = (req, res, next) => {
 | 
			
		||||
    // TODO: Trier et chercher par catégories
 | 
			
		||||
    let page = 1;
 | 
			
		||||
    let limit = 10;
 | 
			
		||||
    if (req.query.page && !isNaN(req.query.page)) {
 | 
			
		||||
        page = parseInt(req.query.page);
 | 
			
		||||
    }
 | 
			
		||||
    if (req.query.limit && !isNaN(req.query.limit)) {
 | 
			
		||||
        limit = parseInt(req.query.limit);
 | 
			
		||||
    }
 | 
			
		||||
    const offset = (page - 1) * limit;
 | 
			
		||||
    Functions.findAndCountAll({ 
 | 
			
		||||
        limit, 
 | 
			
		||||
        offset, 
 | 
			
		||||
        where: { isOnline: 1 },
 | 
			
		||||
        include: [
 | 
			
		||||
            { model: Categories, attributes: ["name", "color"] }
 | 
			
		||||
        ] 
 | 
			
		||||
    })
 | 
			
		||||
        .then((result) => {
 | 
			
		||||
            const { count, rows } = result;
 | 
			
		||||
            const hasMore = (page * limit) < count;
 | 
			
		||||
            res.status(200).json({ totalItems: count,  hasMore, rows });
 | 
			
		||||
        })
 | 
			
		||||
        .catch((error) => {
 | 
			
		||||
            console.log(error);
 | 
			
		||||
            errorHandling(next, serverError);
 | 
			
		||||
        });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
exports.executeFunctionName = (req, res, next) => {
 | 
			
		||||
    const functionOutput = functionToExecute(req.params.functionName);
 | 
			
		||||
    if (functionOutput !== undefined) {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										19
									
								
								backend/models/categories.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								backend/models/categories.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
			
		||||
const Sequelize = require('sequelize');
 | 
			
		||||
const sequelize = require('../assets/utils/database');
 | 
			
		||||
 | 
			
		||||
module.exports = sequelize.define('categorie', {
 | 
			
		||||
    id: {
 | 
			
		||||
        type: Sequelize.INTEGER,
 | 
			
		||||
        allowNull: false,
 | 
			
		||||
        autoIncrement: true,
 | 
			
		||||
        primaryKey: true
 | 
			
		||||
    },
 | 
			
		||||
    name: {
 | 
			
		||||
        type: Sequelize.STRING,
 | 
			
		||||
        allowNull: false,
 | 
			
		||||
    },
 | 
			
		||||
    color: {
 | 
			
		||||
        type: Sequelize.STRING,
 | 
			
		||||
        allowNull: false,
 | 
			
		||||
    }
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										32
									
								
								backend/models/functions.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								backend/models/functions.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
			
		||||
const Sequelize = require('sequelize');
 | 
			
		||||
const sequelize = require('../assets/utils/database');
 | 
			
		||||
 | 
			
		||||
module.exports = sequelize.define('function', {
 | 
			
		||||
    id: {
 | 
			
		||||
        type: Sequelize.INTEGER,
 | 
			
		||||
        allowNull: false,
 | 
			
		||||
        autoIncrement: true,
 | 
			
		||||
        primaryKey: true
 | 
			
		||||
    },
 | 
			
		||||
    title: {
 | 
			
		||||
        type: Sequelize.STRING(255),
 | 
			
		||||
        allowNull: false,
 | 
			
		||||
    },
 | 
			
		||||
    slug: {
 | 
			
		||||
        type: Sequelize.STRING(255),
 | 
			
		||||
        allowNull: false,
 | 
			
		||||
    },
 | 
			
		||||
    description: {
 | 
			
		||||
        type: Sequelize.STRING,
 | 
			
		||||
        allowNull: false
 | 
			
		||||
    },
 | 
			
		||||
    image: {
 | 
			
		||||
        type: Sequelize.STRING,
 | 
			
		||||
        allowNull: false
 | 
			
		||||
    },
 | 
			
		||||
    isOnline: {
 | 
			
		||||
        type: Sequelize.BOOLEAN,
 | 
			
		||||
        allowNull: false,
 | 
			
		||||
        defaultValue: 0
 | 
			
		||||
    }
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										244
									
								
								backend/package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										244
									
								
								backend/package-lock.json
									
									
									
										generated
									
									
									
								
							@@ -4,6 +4,11 @@
 | 
			
		||||
  "lockfileVersion": 1,
 | 
			
		||||
  "requires": true,
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "@types/node": {
 | 
			
		||||
      "version": "13.9.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@types/node/-/node-13.9.2.tgz",
 | 
			
		||||
      "integrity": "sha512-bnoqK579sAYrQbp73wwglccjJ4sfRdKU7WNEZ5FW4K2U6Kc0/eZ5kvXG0JKsEKFB50zrFmfFt52/cvBbZa7eXg=="
 | 
			
		||||
    },
 | 
			
		||||
    "abbrev": {
 | 
			
		||||
      "version": "1.1.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
 | 
			
		||||
@@ -43,6 +48,16 @@
 | 
			
		||||
        "color-convert": "^1.9.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "ansicolors": {
 | 
			
		||||
      "version": "0.3.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz",
 | 
			
		||||
      "integrity": "sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk="
 | 
			
		||||
    },
 | 
			
		||||
    "any-promise": {
 | 
			
		||||
      "version": "1.3.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
 | 
			
		||||
      "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8="
 | 
			
		||||
    },
 | 
			
		||||
    "anymatch": {
 | 
			
		||||
      "version": "3.1.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
 | 
			
		||||
@@ -87,6 +102,11 @@
 | 
			
		||||
      "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "bluebird": {
 | 
			
		||||
      "version": "3.7.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
 | 
			
		||||
      "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="
 | 
			
		||||
    },
 | 
			
		||||
    "body-parser": {
 | 
			
		||||
      "version": "1.19.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
 | 
			
		||||
@@ -165,6 +185,15 @@
 | 
			
		||||
      "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "cardinal": {
 | 
			
		||||
      "version": "2.1.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz",
 | 
			
		||||
      "integrity": "sha1-fMEFXYItISlU0HsIXeolHMe8VQU=",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "ansicolors": "~0.3.2",
 | 
			
		||||
        "redeyed": "~2.1.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "chalk": {
 | 
			
		||||
      "version": "2.4.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
 | 
			
		||||
@@ -204,6 +233,15 @@
 | 
			
		||||
      "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "cls-bluebird": {
 | 
			
		||||
      "version": "2.1.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/cls-bluebird/-/cls-bluebird-2.1.0.tgz",
 | 
			
		||||
      "integrity": "sha1-N+8eCAqP+1XC9BZPU28ZGeeWiu4=",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "is-bluebird": "^1.0.2",
 | 
			
		||||
        "shimmer": "^1.1.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "color-convert": {
 | 
			
		||||
      "version": "1.9.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
 | 
			
		||||
@@ -321,6 +359,11 @@
 | 
			
		||||
      "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "denque": {
 | 
			
		||||
      "version": "1.4.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/denque/-/denque-1.4.1.tgz",
 | 
			
		||||
      "integrity": "sha512-OfzPuSZKGcgr96rf1oODnfjqBFmr1DVoc/TrItj3Ohe0Ah1C5WX5Baquw/9U9KovnQ88EqmJbD66rKYUQYN1tQ=="
 | 
			
		||||
    },
 | 
			
		||||
    "depd": {
 | 
			
		||||
      "version": "1.1.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
 | 
			
		||||
@@ -356,6 +399,11 @@
 | 
			
		||||
      "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "dottie": {
 | 
			
		||||
      "version": "2.0.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.2.tgz",
 | 
			
		||||
      "integrity": "sha512-fmrwR04lsniq/uSr8yikThDTrM7epXHBAAjH9TbeH3rEA8tdCO7mRzB9hdmdGyJCxF8KERo9CITcm3kGuoyMhg=="
 | 
			
		||||
    },
 | 
			
		||||
    "duplexer3": {
 | 
			
		||||
      "version": "0.1.4",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
 | 
			
		||||
@@ -383,6 +431,11 @@
 | 
			
		||||
      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "esprima": {
 | 
			
		||||
      "version": "4.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
 | 
			
		||||
      "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
 | 
			
		||||
    },
 | 
			
		||||
    "etag": {
 | 
			
		||||
      "version": "1.8.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
 | 
			
		||||
@@ -513,6 +566,14 @@
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "optional": true
 | 
			
		||||
    },
 | 
			
		||||
    "generate-function": {
 | 
			
		||||
      "version": "2.3.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz",
 | 
			
		||||
      "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "is-property": "^1.0.2"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "get-stream": {
 | 
			
		||||
      "version": "3.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
 | 
			
		||||
@@ -681,6 +742,11 @@
 | 
			
		||||
      "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "inflection": {
 | 
			
		||||
      "version": "1.12.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.12.0.tgz",
 | 
			
		||||
      "integrity": "sha1-ogCTVlbW9fa8TcdQLhrstwMihBY="
 | 
			
		||||
    },
 | 
			
		||||
    "inherits": {
 | 
			
		||||
      "version": "2.0.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
 | 
			
		||||
@@ -706,6 +772,11 @@
 | 
			
		||||
        "binary-extensions": "^2.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "is-bluebird": {
 | 
			
		||||
      "version": "1.0.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/is-bluebird/-/is-bluebird-1.0.2.tgz",
 | 
			
		||||
      "integrity": "sha1-CWQ5Bg9KpBGr7hkUOoTWpVNG1uI="
 | 
			
		||||
    },
 | 
			
		||||
    "is-ci": {
 | 
			
		||||
      "version": "1.2.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz",
 | 
			
		||||
@@ -773,6 +844,11 @@
 | 
			
		||||
        "path-is-inside": "^1.0.1"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "is-property": {
 | 
			
		||||
      "version": "1.0.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
 | 
			
		||||
      "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ="
 | 
			
		||||
    },
 | 
			
		||||
    "is-redirect": {
 | 
			
		||||
      "version": "1.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz",
 | 
			
		||||
@@ -806,6 +882,16 @@
 | 
			
		||||
        "package-json": "^4.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "lodash": {
 | 
			
		||||
      "version": "4.17.15",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
 | 
			
		||||
      "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
 | 
			
		||||
    },
 | 
			
		||||
    "long": {
 | 
			
		||||
      "version": "4.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
 | 
			
		||||
    },
 | 
			
		||||
    "lowercase-keys": {
 | 
			
		||||
      "version": "1.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
 | 
			
		||||
@@ -816,7 +902,6 @@
 | 
			
		||||
      "version": "4.1.5",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
 | 
			
		||||
      "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "pseudomap": "^1.0.2",
 | 
			
		||||
        "yallist": "^2.1.2"
 | 
			
		||||
@@ -884,6 +969,14 @@
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz",
 | 
			
		||||
      "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg=="
 | 
			
		||||
    },
 | 
			
		||||
    "moment-timezone": {
 | 
			
		||||
      "version": "0.5.28",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.28.tgz",
 | 
			
		||||
      "integrity": "sha512-TDJkZvAyKIVWg5EtVqRzU97w0Rb0YVbfpqyjgu6GwXCAohVRqwZjf4fOzDE6p1Ch98Sro/8hQQi65WDXW5STPw==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "moment": ">= 2.9.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "morgan": {
 | 
			
		||||
      "version": "1.9.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz",
 | 
			
		||||
@@ -902,6 +995,53 @@
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
 | 
			
		||||
      "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
 | 
			
		||||
    },
 | 
			
		||||
    "mysql2": {
 | 
			
		||||
      "version": "2.1.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-2.1.0.tgz",
 | 
			
		||||
      "integrity": "sha512-9kGVyi930rG2KaHrz3sHwtc6K+GY9d8wWk1XRSYxQiunvGcn4DwuZxOwmK11ftuhhwrYDwGx9Ta4VBwznJn36A==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "cardinal": "^2.1.1",
 | 
			
		||||
        "denque": "^1.4.1",
 | 
			
		||||
        "generate-function": "^2.3.1",
 | 
			
		||||
        "iconv-lite": "^0.5.0",
 | 
			
		||||
        "long": "^4.0.0",
 | 
			
		||||
        "lru-cache": "^5.1.1",
 | 
			
		||||
        "named-placeholders": "^1.1.2",
 | 
			
		||||
        "seq-queue": "^0.0.5",
 | 
			
		||||
        "sqlstring": "^2.3.1"
 | 
			
		||||
      },
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "iconv-lite": {
 | 
			
		||||
          "version": "0.5.1",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.1.tgz",
 | 
			
		||||
          "integrity": "sha512-ONHr16SQvKZNSqjQT9gy5z24Jw+uqfO02/ngBSBoqChZ+W8qXX7GPRa1RoUnzGADw8K63R1BXUMzarCVQBpY8Q==",
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "safer-buffer": ">= 2.1.2 < 3"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "lru-cache": {
 | 
			
		||||
          "version": "5.1.1",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
 | 
			
		||||
          "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "yallist": "^3.0.2"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "yallist": {
 | 
			
		||||
          "version": "3.1.1",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
 | 
			
		||||
          "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "named-placeholders": {
 | 
			
		||||
      "version": "1.1.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.2.tgz",
 | 
			
		||||
      "integrity": "sha512-wiFWqxoLL3PGVReSZpjLVxyJ1bRqe+KKJVbr4hGs1KWfTZTQyezHFBbuKj9hsizHyGV2ne7EMjHdxEGAybD5SA==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "lru-cache": "^4.1.3"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "negotiator": {
 | 
			
		||||
      "version": "0.6.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
 | 
			
		||||
@@ -1060,8 +1200,7 @@
 | 
			
		||||
    "pseudomap": {
 | 
			
		||||
      "version": "1.0.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
 | 
			
		||||
      "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
 | 
			
		||||
      "dev": true
 | 
			
		||||
      "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
 | 
			
		||||
    },
 | 
			
		||||
    "pstree.remy": {
 | 
			
		||||
      "version": "1.1.7",
 | 
			
		||||
@@ -1111,6 +1250,14 @@
 | 
			
		||||
        "picomatch": "^2.0.7"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "redeyed": {
 | 
			
		||||
      "version": "2.1.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz",
 | 
			
		||||
      "integrity": "sha1-iYS1gV2ZyyIEacme7v/jiRPmzAs=",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "esprima": "~4.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "referrer-policy": {
 | 
			
		||||
      "version": "1.2.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/referrer-policy/-/referrer-policy-1.2.0.tgz",
 | 
			
		||||
@@ -1135,6 +1282,14 @@
 | 
			
		||||
        "rc": "^1.0.1"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "retry-as-promised": {
 | 
			
		||||
      "version": "3.2.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-3.2.0.tgz",
 | 
			
		||||
      "integrity": "sha512-CybGs60B7oYU/qSQ6kuaFmRd9sTZ6oXSc0toqePvV74Ac6/IFZSI1ReFQmtCN+uvW1Mtqdwpvt/LGOiCBAY2Mg==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "any-promise": "^1.3.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "safe-buffer": {
 | 
			
		||||
      "version": "5.1.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
 | 
			
		||||
@@ -1187,6 +1342,58 @@
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "seq-queue": {
 | 
			
		||||
      "version": "0.0.5",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz",
 | 
			
		||||
      "integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4="
 | 
			
		||||
    },
 | 
			
		||||
    "sequelize": {
 | 
			
		||||
      "version": "5.21.5",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-5.21.5.tgz",
 | 
			
		||||
      "integrity": "sha512-n9hR5K4uQGmBGK/Y/iqewCeSFmKVsd0TRnh0tfoLoAkmXbKC4tpeK96RhKs7d+TTMtrJlgt2TNLVBaAxEwC4iw==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "bluebird": "^3.5.0",
 | 
			
		||||
        "cls-bluebird": "^2.1.0",
 | 
			
		||||
        "debug": "^4.1.1",
 | 
			
		||||
        "dottie": "^2.0.0",
 | 
			
		||||
        "inflection": "1.12.0",
 | 
			
		||||
        "lodash": "^4.17.15",
 | 
			
		||||
        "moment": "^2.24.0",
 | 
			
		||||
        "moment-timezone": "^0.5.21",
 | 
			
		||||
        "retry-as-promised": "^3.2.0",
 | 
			
		||||
        "semver": "^6.3.0",
 | 
			
		||||
        "sequelize-pool": "^2.3.0",
 | 
			
		||||
        "toposort-class": "^1.0.1",
 | 
			
		||||
        "uuid": "^3.3.3",
 | 
			
		||||
        "validator": "^10.11.0",
 | 
			
		||||
        "wkx": "^0.4.8"
 | 
			
		||||
      },
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "debug": {
 | 
			
		||||
          "version": "4.1.1",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
 | 
			
		||||
          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "ms": "^2.1.1"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "ms": {
 | 
			
		||||
          "version": "2.1.2",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
 | 
			
		||||
          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
 | 
			
		||||
        },
 | 
			
		||||
        "semver": {
 | 
			
		||||
          "version": "6.3.0",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
 | 
			
		||||
          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "sequelize-pool": {
 | 
			
		||||
      "version": "2.3.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/sequelize-pool/-/sequelize-pool-2.3.0.tgz",
 | 
			
		||||
      "integrity": "sha512-Ibz08vnXvkZ8LJTiUOxRcj1Ckdn7qafNZ2t59jYHMX1VIebTAOYefWdRYFt6z6+hy52WGthAHAoLc9hvk3onqA=="
 | 
			
		||||
    },
 | 
			
		||||
    "serve-static": {
 | 
			
		||||
      "version": "1.14.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
 | 
			
		||||
@@ -1218,6 +1425,11 @@
 | 
			
		||||
      "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "shimmer": {
 | 
			
		||||
      "version": "1.2.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz",
 | 
			
		||||
      "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw=="
 | 
			
		||||
    },
 | 
			
		||||
    "signal-exit": {
 | 
			
		||||
      "version": "3.0.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
 | 
			
		||||
@@ -1248,6 +1460,11 @@
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "sqlstring": {
 | 
			
		||||
      "version": "2.3.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz",
 | 
			
		||||
      "integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A="
 | 
			
		||||
    },
 | 
			
		||||
    "statuses": {
 | 
			
		||||
      "version": "1.5.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
 | 
			
		||||
@@ -1322,6 +1539,11 @@
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
 | 
			
		||||
    },
 | 
			
		||||
    "toposort-class": {
 | 
			
		||||
      "version": "1.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz",
 | 
			
		||||
      "integrity": "sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg="
 | 
			
		||||
    },
 | 
			
		||||
    "touch": {
 | 
			
		||||
      "version": "3.1.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz",
 | 
			
		||||
@@ -1406,6 +1628,11 @@
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
 | 
			
		||||
      "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
 | 
			
		||||
    },
 | 
			
		||||
    "validator": {
 | 
			
		||||
      "version": "10.11.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/validator/-/validator-10.11.0.tgz",
 | 
			
		||||
      "integrity": "sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw=="
 | 
			
		||||
    },
 | 
			
		||||
    "vary": {
 | 
			
		||||
      "version": "1.1.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
 | 
			
		||||
@@ -1429,6 +1656,14 @@
 | 
			
		||||
        "string-width": "^2.1.1"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "wkx": {
 | 
			
		||||
      "version": "0.4.8",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.4.8.tgz",
 | 
			
		||||
      "integrity": "sha512-ikPXMM9IR/gy/LwiOSqWlSL3X/J5uk9EO2hHNRXS41eTLXaUFEVw9fn/593jW/tE5tedNg8YjT5HkCa4FqQZyQ==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "@types/node": "*"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "write-file-atomic": {
 | 
			
		||||
      "version": "2.4.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz",
 | 
			
		||||
@@ -1454,8 +1689,7 @@
 | 
			
		||||
    "yallist": {
 | 
			
		||||
      "version": "2.1.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
 | 
			
		||||
      "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
 | 
			
		||||
      "dev": true
 | 
			
		||||
      "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -15,6 +15,8 @@
 | 
			
		||||
    "express": "^4.17.1",
 | 
			
		||||
    "helmet": "^3.21.3",
 | 
			
		||||
    "moment": "^2.24.0",
 | 
			
		||||
    "mysql2": "^2.1.0",
 | 
			
		||||
    "sequelize": "^5.21.5",
 | 
			
		||||
    "smart-request-balancer": "^2.1.1"
 | 
			
		||||
  },
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										11
									
								
								backend/routes/categories.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								backend/routes/categories.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
const { Router }           = require('express');
 | 
			
		||||
const categoriesController = require('../controllers/categories');
 | 
			
		||||
 | 
			
		||||
const CategoriesRouter = Router();
 | 
			
		||||
 | 
			
		||||
CategoriesRouter.route('/')
 | 
			
		||||
 | 
			
		||||
    // Récupère les catégories
 | 
			
		||||
    .get(categoriesController.getCategories);
 | 
			
		||||
 | 
			
		||||
module.exports = CategoriesRouter;
 | 
			
		||||
@@ -1,11 +1,16 @@
 | 
			
		||||
const { Router } = require('express');
 | 
			
		||||
const { executeFunctionName } = require('../controllers/functions');
 | 
			
		||||
const { Router }          = require('express');
 | 
			
		||||
const functionsController = require('../controllers/functions');
 | 
			
		||||
 | 
			
		||||
const FunctionsRouter = Router();
 | 
			
		||||
 | 
			
		||||
FunctionsRouter.route('/')
 | 
			
		||||
 | 
			
		||||
    // Récupère les fonctions
 | 
			
		||||
    .get(functionsController.getFunctions);
 | 
			
		||||
 | 
			
		||||
FunctionsRouter.route('/:functionName')
 | 
			
		||||
 | 
			
		||||
    // Exécute la fonction demandée en paramètre
 | 
			
		||||
    .post(executeFunctionName);
 | 
			
		||||
    .post(functionsController.executeFunctionName);
 | 
			
		||||
 | 
			
		||||
module.exports = FunctionsRouter;
 | 
			
		||||
		Reference in New Issue
	
	Block a user