diff --git a/.env b/.env
index 7b00263..c05b0bd 100644
--- a/.env
+++ b/.env
@@ -21,3 +21,5 @@ POOL_IDLE=10000
DEV_DATABASE_URL = postgres://vfbpnizybjvlgp:08a8b3922e6539cca6cb733f87a344178c4d883f998c811323bdd447195913e5@ec2-54-160-96-70.compute-1.amazonaws.com:5432/ddv5ljhh18mgjh
+#Authentification token secret
+JWT_SECRET = autolibDZ
\ No newline at end of file
diff --git a/app/app.js b/app/app.js
index 601d888..bc61f7d 100644
--- a/app/app.js
+++ b/app/app.js
@@ -5,6 +5,8 @@ import bodyParser from 'body-parser';
import db from './models/index';
import abonnementRouter from './routes/abonnement.route';
import locataireRouter from './routes/locataire.route';
+import adminRouter from './routes/admin.route';
+import agentRouter from './routes/agent.route';
import vehiculesRouter from './routes/vehicule.route';
dotenv.config();
@@ -19,15 +21,28 @@ app.use(bodyParser.json());
db.sequelize.sync();
+
+
+//
app.use('/api/abonnement', abonnementRouter);
+
+// Locataire Router
app.use('/api/locataire', locataireRouter);
+// Administrator Router
+app.use('/api/admin', adminRouter);
+
+// Agent de maintenance Router
+app.use('/api/agent', agentRouter);
+
// Vehicule Route
app.use('/api/vehicules', vehiculesRouter);
// Vehicule Route Of A Given Agent
app.use('/api/vehicules/agents/:id', vehiculesRouter);
+
+
//Home
app.use((req, res) => {
res.send('
Welcome to AutolibDZ REST API
');
diff --git a/app/controllers/admin.controller.js b/app/controllers/admin.controller.js
new file mode 100644
index 0000000..466617c
--- /dev/null
+++ b/app/controllers/admin.controller.js
@@ -0,0 +1,117 @@
+const db = require("../models");
+const bcrypt = require('bcryptjs')
+const Admin = db.administrateur;
+
+// La creation d'un locataire (lors de l'inscription)
+const createAdmin = async (req, res) => {
+ // Validate request
+ if (!req.body.nom || !req.body.prenom || !req.body.email || !req.body.motdepasse || !req.body.salaire) {
+ res.status(400).send({
+ message: "Content can not be empty!"
+ });
+ return;
+ }
+ const salt = await bcrypt.genSalt(10);
+ const mdp = await bcrypt.hash(req.body.motdepasse, salt);
+
+ const admin = {
+
+ nom: req.body.nom,
+ prenom: req.body.prenom,
+ email: req.body.email,
+ motDePasse: mdp,
+ salaire: req.body.salaire
+
+ };
+
+
+ // Enregistrer l'administrateur dans la BDD
+ try {
+ const data = await Admin.create(admin)
+ res.status(200).send({ success: true, message: `Admin ${admin.nom} ${admin.prenom} created successfully` });
+
+ } catch (err) {
+ res.status(500).send({
+ error: err.message || "Some error occurred while creating l'Administrateur."
+ });
+ }
+
+};
+
+//Retourner tout les locataires
+const findAll = (req, res) => {
+ var condition = 1 === 1
+
+ Admin.findAll({ where: condition })
+ .then(data => {
+ if (data.length == 0) {
+ return res.status(400).send({
+ success: false,
+ message: "No Admins were found"
+ });
+ }
+ res.status(200).send({ success: true, data });
+ })
+ .catch(err => {
+ res.status(500).send({
+ message: err.message || "Some error occurred while retrieving administrateur."
+ });
+ });
+};
+
+const findOne = async (req, res) => {
+
+ Admin.findOne({ where: { idAdministrateur: req.params.id } })
+ .then(data => {
+ if (!data) {
+ return res.status(400).send({
+ success: false,
+ message: "Admin not found"
+ });
+ }
+ res.status(200).send({ success: true, data });
+ })
+ .catch(err => {
+ res.status(500).send({
+ message: err.message || "Some error occurred while retrieving the admin."
+ });
+ });
+};
+const updateAdmin = async (req, res) => {
+ if (req.body.motdepasse) {
+ const salt = await bcrypt.genSalt(10);
+ req.body.motDePasse = await bcrypt.hash(req.body.motdepasse, salt);
+ }
+ Admin.update(req.body, { where: { idAdministrateur: req.params.id } })
+ .then(result => {
+ res.status(200).send({
+ success: true,
+ message: `Admin updated successfully`
+ })
+ }).catch(err => {
+ res.status(400).send({
+ success: false,
+ message: err.message
+ })
+ })
+}
+const deleteAdmin = async (req, res) => {
+ Admin.destroy({ where: { idAdministrateur: req.params.id } }).then(result => {
+ res.status(200).send({
+ success: true,
+ message: `Admin deleted successfully`
+ })
+ }).catch(err => {
+ res.status(400).send({
+ success: false,
+ message: err.message
+ })
+ })
+}
+export default {
+ createAdmin,
+ findAll,
+ findOne,
+ updateAdmin,
+ deleteAdmin
+}
\ No newline at end of file
diff --git a/app/controllers/agent.controller.js b/app/controllers/agent.controller.js
new file mode 100644
index 0000000..5ad9dd6
--- /dev/null
+++ b/app/controllers/agent.controller.js
@@ -0,0 +1,115 @@
+const db = require("../models");
+const Agent = db.agent;
+const bcrypt = require('bcryptjs')
+// La creation d'un locataire (lors de l'inscription)
+const createAgent = async (req, res) => {
+ // Validate request
+ if (!req.body.nom || !req.body.prenom || !req.body.email || !req.body.motdepasse || !req.body.salaire) {
+ res.status(400).send({
+ message: "Content can not be empty!"
+ });
+ return;
+ }
+ const salt = await bcrypt.genSalt(10);
+ const mdp = await bcrypt.hash(req.body.motdepasse, salt);
+
+ const agent = {
+ nom: req.body.nom,
+ prenom: req.body.prenom,
+ email: req.body.email,
+ motDePasse: mdp,
+ salaire: req.body.salaire
+
+ };
+
+
+ // Enregistrer le locataire dans la BDD
+ try {
+ const data = await Agent.create(agent)
+ res.status(200).send({ success: true, message: `Agent ${agent.nom} ${agent.prenom} created successfully` });
+
+ } catch (err) {
+ res.status(500).send({
+ error: err.message || "Some error occurred while creating the agent."
+ });
+ }
+
+};
+
+//Retourner tout les locataires
+const findAll = (req, res) => {
+ var condition = 1 === 1
+
+ Agent.findAll({ where: condition })
+ .then(data => {
+ if (data.length == 0) {
+ return res.status(400).send({
+ success: false,
+ message: "No agents were found"
+ });
+ }
+ res.status(200).send(data);
+ })
+ .catch(err => {
+ res.status(500).send({
+ message: err.message || "Some error occurred while retrieving agents."
+ });
+ });
+};
+
+const findOne = async (req, res) => {
+
+ Agent.findOne({ where: { idAgentMaintenance: req.params.id } })
+ .then(data => {
+ if (!data) {
+ return res.status(400).send({
+ success: false,
+ message: "Agent not found"
+ });
+ }
+ res.status(200).send(data);
+ })
+ .catch(err => {
+ res.status(500).send({
+ message: err.message || "Some error occurred while retrieving agent."
+ });
+ });
+};
+const updateAgent = async (req, res) => {
+ if (req.body.motdepasse) {
+ const salt = await bcrypt.genSalt(10);
+ req.body.motDePasse = await bcrypt.hash(req.body.motdepasse, salt);
+ }
+ Agent.update(req.body, { where: { idAgentMaintenance: req.params.id } })
+ .then(result => {
+ res.status(200).send({
+ success: true,
+ message: `Agent ${req.body.nom} ${req.body.prenom} updated successfully`
+ })
+ }).catch(err => {
+ res.status(400).send({
+ success: false,
+ message: err.message
+ })
+ })
+}
+const deleteAgent = async (req, res) => {
+ Agent.destroy({ where: { idAgentMaintenance: req.params.id } }).then(result => {
+ res.status(200).send({
+ success: true,
+ message: `Agent deleted successfully`
+ })
+ }).catch(err => {
+ res.status(400).send({
+ success: false,
+ message: err.message
+ })
+ })
+}
+export default {
+ createAgent,
+ findAll,
+ findOne,
+ updateAgent,
+ deleteAgent
+}
\ No newline at end of file
diff --git a/app/controllers/locataire.controller.js b/app/controllers/locataire.controller.js
index 0c0c939..a36045c 100644
--- a/app/controllers/locataire.controller.js
+++ b/app/controllers/locataire.controller.js
@@ -1,30 +1,35 @@
const db = require("../models");
+const bcrypt = require("bcryptjs");
const Locataire = db.locataire;
// La creation d'un locataire (lors de l'inscription)
-const createLocataire = async(req, res) => {
+const createLocataire = async (req, res) => {
// Validate request
if (!req.body.nom || !req.body.prenom || !req.body.email || !req.body.motdepasse) {
res.status(400).send({
+ success: false,
message: "Content can not be empty!"
});
return;
}
+ const salt = await bcrypt.genSalt(10);
+ const mdp = await bcrypt.hash(req.body.motdepasse, salt);
const locataire = {
nom: req.body.nom,
prenom: req.body.prenom,
email: req.body.email,
- motdepasse: req.body.motdepasse
+ motDePasse: mdp
};
+
// Enregistrer le locataire dans la BDD
try {
- data = await Locataire.create(locataire)
- res.send(data);
+ const data = await Locataire.create(locataire)
+ res.send({ success: true });
} catch (err) {
res.status(500).send({
@@ -40,16 +45,75 @@ const findAll = (req, res) => {
Locataire.findAll({ where: condition })
.then(data => {
- res.send(data);
+ if (data.length == 0) {
+ return res.status(400).send({
+ success: false,
+ message: "No locataires were found"
+ });
+ }
+ res.status(200).send(data);
+ })
+ .catch(err => {
+ res.status(500).send({
+ message: err.message || "Some error occurred while retrieving locataire."
+ });
+ });
+};
+
+const findOne = async (req, res) => {
+
+ Locataire.findOne({ where: { idLocataire: req.params.id } })
+ .then(data => {
+ if (!data) {
+ return res.status(400).send({
+ message: "Locataire not found"
+ });
+ }
+ res.status(200).send(data);
})
.catch(err => {
res.status(500).send({
+ success: false,
message: err.message || "Some error occurred while retrieving locataire."
});
});
};
+const updateLocataire = async (req, res) => {
+ if (req.body.motdepasse) {
+ const salt = await bcrypt.genSalt(10);
+ req.body.motDePasse = await bcrypt.hash(req.body.motdepasse, salt);
+ }
+ Locataire.update(req.body, { where: { idLocataire: req.params.id } })
+ .then(result => {
+ res.status(200).send({
+ success: true,
+ message: `Locataire updated successfully`
+ })
+ }).catch(err => {
+ res.status(400).send({
+ success: false,
+ message: err.message
+ })
+ })
+}
+const deleteLocataire = async (req, res) => {
+ Locataire.destroy({ where: { idLocataire: req.params.id } }).then(result => {
+ res.status(200).send({
+ success: true,
+ message: `Locataire deleted successfully`
+ })
+ }).catch(err => {
+ res.status(400).send({
+ success: false,
+ message: err.message
+ })
+ })
+}
export default {
createLocataire,
- findAll
+ findAll,
+ findOne,
+ updateLocataire,
+ deleteLocataire
}
\ No newline at end of file
diff --git a/app/models/abonnement.model.js b/app/models/abonnement.model.js
index 479115f..d9bf9cc 100644
--- a/app/models/abonnement.model.js
+++ b/app/models/abonnement.model.js
@@ -1,6 +1,6 @@
import { Locataire } from './locataire.model'
-module.exports = function(sequelize, Sequelize) {
+module.exports = function (sequelize, Sequelize) {
const Abonnement = sequelize.define("abonnement", {
//added this
idAbonnement: {
diff --git a/app/models/administrateur.model.js b/app/models/administrateur.model.js
index 4df9295..4e20dcf 100644
--- a/app/models/administrateur.model.js
+++ b/app/models/administrateur.model.js
@@ -1,8 +1,10 @@
-module.exports = function(sequelize, Sequelize) {
+module.exports = function (sequelize, Sequelize) {
const Administrateur = sequelize.define("administrateur", {
idAdministrateur: {
type: Sequelize.INTEGER,
primaryKey: true,
+ autoIncrement: true,
+
},
nom: {
type: Sequelize.STRING
diff --git a/app/models/agent.model.js b/app/models/agent.model.js
index 2162bca..f83d1d5 100644
--- a/app/models/agent.model.js
+++ b/app/models/agent.model.js
@@ -1,8 +1,13 @@
-module.exports = function(sequelize, Sequelize) {
+var bcrypt = require("bcryptjs");
+var jwt = require("jsonwebtoken");
+
+module.exports = function (sequelize, Sequelize) {
const AgentMaintenance = sequelize.define("agentMaintenance", {
idAgentMaintenance: {
type: Sequelize.INTEGER,
primaryKey: true,
+ autoIncrement: true,
+
},
nom: {
type: Sequelize.STRING
@@ -14,16 +19,17 @@ module.exports = function(sequelize, Sequelize) {
type: Sequelize.STRING
},
motDePasse: {
- type: Sequelize.STRING(255)
+ type: Sequelize.STRING
},
salaire: {
type: Sequelize.DOUBLE
}
- }, {
- freezeTableName: true,
- tableName: 'agent_maintenance',
- createdAt: false,
- updatedAt: false
- });
+ },
+ {
+ freezeTableName: true,
+ tableName: 'agent_maintenance',
+ createdAt: false,
+ updatedAt: false
+ });
return AgentMaintenance;
};
\ No newline at end of file
diff --git a/app/models/locataire.model.js b/app/models/locataire.model.js
index e02ceae..d468cc3 100644
--- a/app/models/locataire.model.js
+++ b/app/models/locataire.model.js
@@ -1,8 +1,9 @@
-module.exports = function(sequelize, Sequelize) {
+module.exports = function (sequelize, Sequelize) {
const Locataire = sequelize.define("locataire", {
idLocataire: {
type: Sequelize.INTEGER,
primaryKey: true,
+ autoIncrement: true,
},
nom: {
type: Sequelize.STRING(50)
diff --git a/app/routes/admin.route.js b/app/routes/admin.route.js
new file mode 100644
index 0000000..c0f5b3c
--- /dev/null
+++ b/app/routes/admin.route.js
@@ -0,0 +1,12 @@
+import adminController from "../controllers/admin.controller";
+
+var adminRouter = require("express").Router();
+
+
+adminRouter.post("/", adminController.createAdmin);
+adminRouter.get("/", adminController.findAll);
+adminRouter.get("/:id", adminController.findOne);
+adminRouter.put("/:id", adminController.updateAdmin)
+adminRouter.delete("/:id", adminController.deleteAdmin)
+
+export default adminRouter;
\ No newline at end of file
diff --git a/app/routes/agent.route.js b/app/routes/agent.route.js
new file mode 100644
index 0000000..abe5207
--- /dev/null
+++ b/app/routes/agent.route.js
@@ -0,0 +1,12 @@
+import agentController from "../controllers/agent.controller";
+
+var agentRouter = require("express").Router();
+
+
+agentRouter.post("/", agentController.createAgent);
+agentRouter.get("/", agentController.findAll);
+agentRouter.get("/:id", agentController.findOne);
+agentRouter.put("/:id", agentController.updateAgent)
+agentRouter.delete("/:id", agentController.deleteAgent)
+
+export default agentRouter;
\ No newline at end of file
diff --git a/app/routes/locataire.route.js b/app/routes/locataire.route.js
index f93e795..a2eebdd 100644
--- a/app/routes/locataire.route.js
+++ b/app/routes/locataire.route.js
@@ -5,5 +5,8 @@ var router = require("express").Router();
router.post("/", locataireController.createLocataire);
router.get("/", locataireController.findAll);
+router.get("/:id", locataireController.findOne);
+router.put("/:id", locataireController.updateLocataire)
+router.delete("/:id", locataireController.deleteLocataire)
export default router;
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index dc3655b..5563962 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -184,6 +184,11 @@
"integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==",
"optional": true
},
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
+ },
"atob": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
@@ -788,6 +793,11 @@
}
}
},
+ "bcryptjs": {
+ "version": "2.4.3",
+ "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz",
+ "integrity": "sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms="
+ },
"binary-extensions": {
"version": "1.13.1",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
@@ -969,6 +979,15 @@
}
}
},
+ "call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ },
"camelcase": {
"version": "5.3.1",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
@@ -1105,6 +1124,14 @@
"text-hex": "1.0.x"
}
},
+ "combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ }
+ },
"commander": {
"version": "2.20.3",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
@@ -1113,8 +1140,7 @@
"component-emitter": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
- "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
- "optional": true
+ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
},
"concat-map": {
"version": "0.0.1",
@@ -1165,6 +1191,11 @@
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
},
+ "cookiejar": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz",
+ "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA=="
+ },
"copy-descriptor": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
@@ -1280,6 +1311,11 @@
}
}
},
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
+ },
"depd": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
@@ -1536,6 +1572,21 @@
"for-in": "^1.0.1"
}
},
+ "form-data": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
+ "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "formidable": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.2.tgz",
+ "integrity": "sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q=="
+ },
"forwarded": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
@@ -1575,6 +1626,21 @@
"nan": "^2.12.1"
}
},
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "get-intrinsic": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
+ "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1"
+ }
+ },
"get-stream": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
@@ -1657,6 +1723,14 @@
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz",
"integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ=="
},
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
"has-ansi": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
@@ -1670,6 +1744,11 @@
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
},
+ "has-symbols": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz",
+ "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw=="
+ },
"has-value": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
@@ -2614,6 +2693,11 @@
}
}
},
+ "object-inspect": {
+ "version": "1.10.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz",
+ "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw=="
+ },
"object-visit": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
@@ -3570,6 +3654,16 @@
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
"integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
},
+ "side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "requires": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ }
+ },
"signal-exit": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
@@ -3844,6 +3938,79 @@
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
"integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo="
},
+ "superagent": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/superagent/-/superagent-6.1.0.tgz",
+ "integrity": "sha512-OUDHEssirmplo3F+1HWKUrUjvnQuA+nZI6i/JJBdXb5eq9IyEQwPyPpqND+SSsxf6TygpBEkUjISVRN4/VOpeg==",
+ "requires": {
+ "component-emitter": "^1.3.0",
+ "cookiejar": "^2.1.2",
+ "debug": "^4.1.1",
+ "fast-safe-stringify": "^2.0.7",
+ "form-data": "^3.0.0",
+ "formidable": "^1.2.2",
+ "methods": "^1.1.2",
+ "mime": "^2.4.6",
+ "qs": "^6.9.4",
+ "readable-stream": "^3.6.0",
+ "semver": "^7.3.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
+ "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "mime": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz",
+ "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg=="
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "qs": {
+ "version": "6.10.1",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz",
+ "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==",
+ "requires": {
+ "side-channel": "^1.0.4"
+ }
+ },
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ },
+ "semver": {
+ "version": "7.3.5",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
+ "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ }
+ }
+ },
+ "supertest": {
+ "version": "6.1.3",
+ "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.1.3.tgz",
+ "integrity": "sha512-v2NVRyP73XDewKb65adz+yug1XMtmvij63qIWHZzSX8tp6wiq6xBLUy4SUAd2NII6wIipOmHT/FD9eicpJwdgQ==",
+ "requires": {
+ "methods": "^1.1.2",
+ "superagent": "^6.1.0"
+ }
+ },
"supports-color": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
diff --git a/package.json b/package.json
index aa9fba7..c540561 100644
--- a/package.json
+++ b/package.json
@@ -12,6 +12,7 @@
"dependencies": {
"babel-cli": "^6.26.0",
"babel-preset-es2015": "^6.24.1",
+ "bcryptjs": "^2.4.3",
"body-parser": "^1.19.0",
"cors": "^2.8.5",
"dotenv": "^8.2.0",
@@ -22,6 +23,7 @@
"pg": "^8.6.0",
"pg-hstore": "^2.3.3",
"sequelize": "^6.6.2",
+ "supertest": "^6.1.3",
"winston": "^3.3.3"
},
"devDependencies": {
diff --git a/spec/admin.spec.js b/spec/admin.spec.js
new file mode 100644
index 0000000..a7492c4
--- /dev/null
+++ b/spec/admin.spec.js
@@ -0,0 +1,52 @@
+const Request = require('supertest');
+const request = Request('http://localhost:4000/api/admin');
+describe('Test CRUD admin route', () => {
+ it('It gets the admin with id 6', (done) => {
+ request.get("/6")
+ .expect(200)
+ .end((err, res) => {
+ if (err) done(err)
+ expect(res.body.data).not.toBe(undefined)
+ done();
+ })
+
+ })
+ it('It gets all the admins', (done) => {
+ request.get("/")
+ .expect(200)
+ .end((err, res) => {
+ if (err) done(err)
+ expect(res.body.data.length).not.toBe(0)
+ done();
+ })
+
+ })
+ const options = {
+ 'Content-Type': 'application/json'
+ }
+ let updatedAdmin = {
+ nom: "newNom",
+ prenom: "newPrenom",
+ }
+ it("It updates the admin with the id of 6", (done) => {
+ request.put("/6",)
+ .set(options)
+ .send(JSON.stringify(updatedAdmin))
+ .expect(200)
+ .expect('Content-Type', 'application/json; charset=utf-8')
+ .end((err, res) => {
+ if (err) end(err)
+ expect(res.body.success).toBe(true)
+ done()
+ })
+ })
+ it("It Delets the admin with the id 6 ", (done) => {
+ request.delete("/6").expect(200)
+ .end((err, res) => {
+ if (err) end(err)
+ expect(res.body.success).toBe(true)
+ done()
+ })
+ })
+
+})
\ No newline at end of file
diff --git a/spec/agent.spec.js b/spec/agent.spec.js
new file mode 100644
index 0000000..44d6774
--- /dev/null
+++ b/spec/agent.spec.js
@@ -0,0 +1,52 @@
+const Request = require('supertest');
+const request = Request('http://localhost:4000/api/agent');
+describe('Test CRUD agent route', () => {
+ it('It gets the agent with id 4', (done) => {
+ request.get("/4")
+ .expect(200)
+ .end((err, res) => {
+ if (err) done(err)
+ expect(res.body.data).not.toBe(undefined)
+ done();
+ })
+
+ })
+ it('It gets all the agents', (done) => {
+ request.get("/")
+ .expect(200)
+ .end((err, res) => {
+ if (err) done(err)
+ expect(res.body.data.length).not.toBe(0)
+ done();
+ })
+
+ })
+ const options = {
+ 'Content-Type': 'application/json'
+ }
+ let updatedAdmin = {
+ nom: "newNom",
+ prenom: "newPrenom",
+ }
+ it("It updates the agent with the id of 6", (done) => {
+ request.put("/4",)
+ .set(options)
+ .send(JSON.stringify(updatedAdmin))
+ .expect(200)
+ .expect('Content-Type', 'application/json; charset=utf-8')
+ .end((err, res) => {
+ if (err) end(err)
+ expect(res.body.success).toBe(true)
+ done()
+ })
+ })
+ it("It Delets the agent with the id 6 ", (done) => {
+ request.delete("/5").expect(200)
+ .end((err, res) => {
+ if (err) end(err)
+ expect(res.body.success).toBe(true)
+ done()
+ })
+ })
+
+})
\ No newline at end of file
diff --git a/spec/locataire.spec.js b/spec/locataire.spec.js
new file mode 100644
index 0000000..8e8b269
--- /dev/null
+++ b/spec/locataire.spec.js
@@ -0,0 +1,52 @@
+const Request = require('supertest');
+const request = Request('http://localhost:4000/api/locataire');
+describe('Test CRUD locataire route', () => {
+ it('It gets the locataire with id 4', (done) => {
+ request.get("/4")
+ .expect(200)
+ .end((err, res) => {
+ if (err) done(err)
+ expect(res.body.data).not.toBe(undefined)
+ done();
+ })
+
+ })
+ it('It gets all the locataires', (done) => {
+ request.get("/")
+ .expect(200)
+ .end((err, res) => {
+ if (err) done(err)
+ expect(res.body.data.length).not.toBe(0)
+ done();
+ })
+
+ })
+ const options = {
+ 'Content-Type': 'application/json'
+ }
+ let updatedlocataire = {
+ nom: "newNom",
+ prenom: "newPrenom",
+ }
+ it("It updates the agent with the id of 6", (done) => {
+ request.put("/4",)
+ .set(options)
+ .send(JSON.stringify(updatedlocataire))
+ .expect(200)
+ .expect('Content-Type', 'application/json; charset=utf-8')
+ .end((err, res) => {
+ if (err) end(err)
+ expect(res.body.success).toBe(true)
+ done()
+ })
+ })
+ it("It Delets the locataire with the id 6 ", (done) => {
+ request.delete("/5").expect(200)
+ .end((err, res) => {
+ if (err) end(err)
+ expect(res.body.success).toBe(true)
+ done()
+ })
+ })
+
+})
\ No newline at end of file