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 */
 | 
					/* Modules */
 | 
				
			||||||
require('dotenv').config();
 | 
					require('dotenv').config();
 | 
				
			||||||
 | 
					const path    = require('path');
 | 
				
			||||||
const express = require('express');
 | 
					const express = require('express');
 | 
				
			||||||
const helmet  = require('helmet');
 | 
					const helmet  = require('helmet');
 | 
				
			||||||
const cors    = require('cors');
 | 
					const cors    = require('cors');
 | 
				
			||||||
const morgan  = require('morgan');
 | 
					const morgan  = require('morgan');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Files Imports & Variables */
 | 
					/* Files Imports & Variables */
 | 
				
			||||||
 | 
					const sequelize     = require('./assets/utils/database');
 | 
				
			||||||
const { PORT }      = require('./assets/config/config');
 | 
					const { PORT }      = require('./assets/config/config');
 | 
				
			||||||
const errorHandling = require('./assets/utils/errorHandling');
 | 
					const errorHandling = require('./assets/utils/errorHandling');
 | 
				
			||||||
const app           = express();
 | 
					const app           = express();
 | 
				
			||||||
@@ -17,7 +19,9 @@ app.use(morgan('dev'));
 | 
				
			|||||||
app.use(express.json());
 | 
					app.use(express.json());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Routes */ 
 | 
					/* Routes */ 
 | 
				
			||||||
 | 
					app.use('/images', express.static(path.join(__dirname, "assets", "images")));
 | 
				
			||||||
app.use('/functions', require('./routes/functions'));
 | 
					app.use('/functions', require('./routes/functions'));
 | 
				
			||||||
 | 
					app.use('/categories', require('./routes/categories'));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Errors Handling */
 | 
					/* Errors Handling */
 | 
				
			||||||
app.use((_req, _res, next) => errorHandling(next, { statusCode: 404, message: "La route n'existe pas!" })); // 404
 | 
					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 });
 | 
					    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 */
 | 
					/* 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 = {
 | 
					const config = {
 | 
				
			||||||
    PORT: process.env.PORT || 8080,
 | 
					    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;
 | 
					module.exports = config;
 | 
				
			||||||
@@ -4,6 +4,11 @@ const errors = {
 | 
				
			|||||||
        statusCode: 400
 | 
					        statusCode: 400
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    serverError: {
 | 
				
			||||||
 | 
					        message: "Le serveur n'a pas pu traiter votre requête.",
 | 
				
			||||||
 | 
					        statusCode: 500
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    requiredFields: {
 | 
					    requiredFields: {
 | 
				
			||||||
        message: "Vous devez remplir tous les champs...",
 | 
					        message: "Vous devez remplir tous les champs...",
 | 
				
			||||||
        statusCode: 400
 | 
					        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 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');
 | 
					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) => {
 | 
					exports.executeFunctionName = (req, res, next) => {
 | 
				
			||||||
    const functionOutput = functionToExecute(req.params.functionName);
 | 
					    const functionOutput = functionToExecute(req.params.functionName);
 | 
				
			||||||
    if (functionOutput !== undefined) {
 | 
					    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,
 | 
					  "lockfileVersion": 1,
 | 
				
			||||||
  "requires": true,
 | 
					  "requires": true,
 | 
				
			||||||
  "dependencies": {
 | 
					  "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": {
 | 
					    "abbrev": {
 | 
				
			||||||
      "version": "1.1.1",
 | 
					      "version": "1.1.1",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
 | 
				
			||||||
@@ -43,6 +48,16 @@
 | 
				
			|||||||
        "color-convert": "^1.9.0"
 | 
					        "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": {
 | 
					    "anymatch": {
 | 
				
			||||||
      "version": "3.1.1",
 | 
					      "version": "3.1.1",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
 | 
				
			||||||
@@ -87,6 +102,11 @@
 | 
				
			|||||||
      "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==",
 | 
					      "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==",
 | 
				
			||||||
      "dev": true
 | 
					      "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": {
 | 
					    "body-parser": {
 | 
				
			||||||
      "version": "1.19.0",
 | 
					      "version": "1.19.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
 | 
				
			||||||
@@ -165,6 +185,15 @@
 | 
				
			|||||||
      "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==",
 | 
					      "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==",
 | 
				
			||||||
      "dev": true
 | 
					      "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": {
 | 
					    "chalk": {
 | 
				
			||||||
      "version": "2.4.2",
 | 
					      "version": "2.4.2",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
 | 
				
			||||||
@@ -204,6 +233,15 @@
 | 
				
			|||||||
      "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=",
 | 
					      "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=",
 | 
				
			||||||
      "dev": true
 | 
					      "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": {
 | 
					    "color-convert": {
 | 
				
			||||||
      "version": "1.9.3",
 | 
					      "version": "1.9.3",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
 | 
				
			||||||
@@ -321,6 +359,11 @@
 | 
				
			|||||||
      "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
 | 
					      "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
 | 
				
			||||||
      "dev": true
 | 
					      "dev": true
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "denque": {
 | 
				
			||||||
 | 
					      "version": "1.4.1",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/denque/-/denque-1.4.1.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-OfzPuSZKGcgr96rf1oODnfjqBFmr1DVoc/TrItj3Ohe0Ah1C5WX5Baquw/9U9KovnQ88EqmJbD66rKYUQYN1tQ=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "depd": {
 | 
					    "depd": {
 | 
				
			||||||
      "version": "1.1.2",
 | 
					      "version": "1.1.2",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
 | 
				
			||||||
@@ -356,6 +399,11 @@
 | 
				
			|||||||
      "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==",
 | 
					      "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==",
 | 
				
			||||||
      "dev": true
 | 
					      "dev": true
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "dottie": {
 | 
				
			||||||
 | 
					      "version": "2.0.2",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.2.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-fmrwR04lsniq/uSr8yikThDTrM7epXHBAAjH9TbeH3rEA8tdCO7mRzB9hdmdGyJCxF8KERo9CITcm3kGuoyMhg=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "duplexer3": {
 | 
					    "duplexer3": {
 | 
				
			||||||
      "version": "0.1.4",
 | 
					      "version": "0.1.4",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
 | 
				
			||||||
@@ -383,6 +431,11 @@
 | 
				
			|||||||
      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
 | 
					      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
 | 
				
			||||||
      "dev": true
 | 
					      "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": {
 | 
					    "etag": {
 | 
				
			||||||
      "version": "1.8.1",
 | 
					      "version": "1.8.1",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
 | 
				
			||||||
@@ -513,6 +566,14 @@
 | 
				
			|||||||
      "dev": true,
 | 
					      "dev": true,
 | 
				
			||||||
      "optional": 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": {
 | 
					    "get-stream": {
 | 
				
			||||||
      "version": "3.0.0",
 | 
					      "version": "3.0.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
 | 
				
			||||||
@@ -681,6 +742,11 @@
 | 
				
			|||||||
      "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
 | 
					      "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
 | 
				
			||||||
      "dev": true
 | 
					      "dev": true
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "inflection": {
 | 
				
			||||||
 | 
					      "version": "1.12.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.12.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-ogCTVlbW9fa8TcdQLhrstwMihBY="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "inherits": {
 | 
					    "inherits": {
 | 
				
			||||||
      "version": "2.0.3",
 | 
					      "version": "2.0.3",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
 | 
				
			||||||
@@ -706,6 +772,11 @@
 | 
				
			|||||||
        "binary-extensions": "^2.0.0"
 | 
					        "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": {
 | 
					    "is-ci": {
 | 
				
			||||||
      "version": "1.2.1",
 | 
					      "version": "1.2.1",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz",
 | 
				
			||||||
@@ -773,6 +844,11 @@
 | 
				
			|||||||
        "path-is-inside": "^1.0.1"
 | 
					        "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": {
 | 
					    "is-redirect": {
 | 
				
			||||||
      "version": "1.0.0",
 | 
					      "version": "1.0.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz",
 | 
				
			||||||
@@ -806,6 +882,16 @@
 | 
				
			|||||||
        "package-json": "^4.0.0"
 | 
					        "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": {
 | 
					    "lowercase-keys": {
 | 
				
			||||||
      "version": "1.0.1",
 | 
					      "version": "1.0.1",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
 | 
				
			||||||
@@ -816,7 +902,6 @@
 | 
				
			|||||||
      "version": "4.1.5",
 | 
					      "version": "4.1.5",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
 | 
				
			||||||
      "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
 | 
					      "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "requires": {
 | 
					      "requires": {
 | 
				
			||||||
        "pseudomap": "^1.0.2",
 | 
					        "pseudomap": "^1.0.2",
 | 
				
			||||||
        "yallist": "^2.1.2"
 | 
					        "yallist": "^2.1.2"
 | 
				
			||||||
@@ -884,6 +969,14 @@
 | 
				
			|||||||
      "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz",
 | 
				
			||||||
      "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg=="
 | 
					      "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": {
 | 
					    "morgan": {
 | 
				
			||||||
      "version": "1.9.1",
 | 
					      "version": "1.9.1",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz",
 | 
					      "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",
 | 
					      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
 | 
				
			||||||
      "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
 | 
					      "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": {
 | 
					    "negotiator": {
 | 
				
			||||||
      "version": "0.6.2",
 | 
					      "version": "0.6.2",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
 | 
				
			||||||
@@ -1060,8 +1200,7 @@
 | 
				
			|||||||
    "pseudomap": {
 | 
					    "pseudomap": {
 | 
				
			||||||
      "version": "1.0.2",
 | 
					      "version": "1.0.2",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
 | 
				
			||||||
      "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
 | 
					      "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
 | 
				
			||||||
      "dev": true
 | 
					 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "pstree.remy": {
 | 
					    "pstree.remy": {
 | 
				
			||||||
      "version": "1.1.7",
 | 
					      "version": "1.1.7",
 | 
				
			||||||
@@ -1111,6 +1250,14 @@
 | 
				
			|||||||
        "picomatch": "^2.0.7"
 | 
					        "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": {
 | 
					    "referrer-policy": {
 | 
				
			||||||
      "version": "1.2.0",
 | 
					      "version": "1.2.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/referrer-policy/-/referrer-policy-1.2.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/referrer-policy/-/referrer-policy-1.2.0.tgz",
 | 
				
			||||||
@@ -1135,6 +1282,14 @@
 | 
				
			|||||||
        "rc": "^1.0.1"
 | 
					        "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": {
 | 
					    "safe-buffer": {
 | 
				
			||||||
      "version": "5.1.2",
 | 
					      "version": "5.1.2",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
 | 
					      "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": {
 | 
					    "serve-static": {
 | 
				
			||||||
      "version": "1.14.1",
 | 
					      "version": "1.14.1",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
 | 
				
			||||||
@@ -1218,6 +1425,11 @@
 | 
				
			|||||||
      "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
 | 
					      "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
 | 
				
			||||||
      "dev": true
 | 
					      "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": {
 | 
					    "signal-exit": {
 | 
				
			||||||
      "version": "3.0.2",
 | 
					      "version": "3.0.2",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
 | 
					      "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": {
 | 
					    "statuses": {
 | 
				
			||||||
      "version": "1.5.0",
 | 
					      "version": "1.5.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
 | 
					      "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",
 | 
					      "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
 | 
				
			||||||
      "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
 | 
					      "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": {
 | 
					    "touch": {
 | 
				
			||||||
      "version": "3.1.0",
 | 
					      "version": "3.1.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz",
 | 
					      "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",
 | 
					      "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
 | 
				
			||||||
      "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
 | 
					      "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": {
 | 
					    "vary": {
 | 
				
			||||||
      "version": "1.1.2",
 | 
					      "version": "1.1.2",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
 | 
				
			||||||
@@ -1429,6 +1656,14 @@
 | 
				
			|||||||
        "string-width": "^2.1.1"
 | 
					        "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": {
 | 
					    "write-file-atomic": {
 | 
				
			||||||
      "version": "2.4.3",
 | 
					      "version": "2.4.3",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz",
 | 
				
			||||||
@@ -1454,8 +1689,7 @@
 | 
				
			|||||||
    "yallist": {
 | 
					    "yallist": {
 | 
				
			||||||
      "version": "2.1.2",
 | 
					      "version": "2.1.2",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
 | 
				
			||||||
      "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
 | 
					      "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
 | 
				
			||||||
      "dev": true
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,6 +15,8 @@
 | 
				
			|||||||
    "express": "^4.17.1",
 | 
					    "express": "^4.17.1",
 | 
				
			||||||
    "helmet": "^3.21.3",
 | 
					    "helmet": "^3.21.3",
 | 
				
			||||||
    "moment": "^2.24.0",
 | 
					    "moment": "^2.24.0",
 | 
				
			||||||
 | 
					    "mysql2": "^2.1.0",
 | 
				
			||||||
 | 
					    "sequelize": "^5.21.5",
 | 
				
			||||||
    "smart-request-balancer": "^2.1.1"
 | 
					    "smart-request-balancer": "^2.1.1"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "devDependencies": {
 | 
					  "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 { Router }          = require('express');
 | 
				
			||||||
const { executeFunctionName } = require('../controllers/functions');
 | 
					const functionsController = require('../controllers/functions');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const FunctionsRouter = Router();
 | 
					const FunctionsRouter = Router();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					FunctionsRouter.route('/')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Récupère les fonctions
 | 
				
			||||||
 | 
					    .get(functionsController.getFunctions);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
FunctionsRouter.route('/:functionName')
 | 
					FunctionsRouter.route('/:functionName')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Exécute la fonction demandée en paramètre
 | 
					    // Exécute la fonction demandée en paramètre
 | 
				
			||||||
    .post(executeFunctionName);
 | 
					    .post(functionsController.executeFunctionName);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports = FunctionsRouter;
 | 
					module.exports = FunctionsRouter;
 | 
				
			||||||
		Reference in New Issue
	
	Block a user