Browse Source

ajout tp3

Clément Krebs 5 years ago
parent
commit
8ae7b6697b
10 changed files with 162 additions and 63 deletions
  1. 1 1
      controllers/mail_address_ctrl.js
  2. 5 5
      controllers/person_ctrl.js
  3. 0 31
      db.js
  4. 36 0
      models/index.js
  5. 24 0
      models/mail_adress.js
  6. 19 0
      models/person.js
  7. 16 0
      routes/index.js
  8. 30 0
      routes/mail_routes.js
  9. 30 0
      routes/person_routes.js
  10. 1 26
      server.js

+ 1 - 1
mail_address_ctrl.js → controllers/mail_address_ctrl.js

@@ -1,4 +1,4 @@
-const db = require('./db');
+const db = require('../models');
 
 module.exports = {
     get_all(req, res, next) {

+ 5 - 5
person_ctrl.js → controllers/person_ctrl.js

@@ -1,4 +1,4 @@
-const db = require('./db');
+const db = require('../models');
 
 module.exports = {
     get_all(req, res, next) {
@@ -10,12 +10,12 @@ module.exports = {
     },
 
     create(req, res, next) {
-        if (req.query.firstname == undefined || req.query.lastname == undefined) {
+        if (req.body.firstname == undefined || req.body.lastname == undefined) {
             throw "Un des éléments est vide";
         }
-        db.Person.create({lastname: req.query.firstname, firstname: req.query.lastname}).then(p => {
-            res.json(p);
-        }) .catch(function (error) {
+        return db.Person.create({lastname: req.body.lastname, firstname: req.body.firstname}).then(p => 
+            res.json(p)
+        ) .catch(function (error) {
             next(error);
         })  
     },

+ 0 - 31
db.js

@@ -1,31 +0,0 @@
-const Sequelize = require('sequelize');
-const Model = Sequelize.Model;
-
-const sequelize = new Sequelize('w4aclem', 'clement.krebs', 'n4or2bgm', {
-    host: 'mysql.iutrs.unistra.fr',
-    dialect: 'mysql'
-});
-
-class Person extends Model {}
-Person.init({
-    lastname: Sequelize.STRING,
-    firstname: Sequelize.STRING
-}, {sequelize, modelName: 'Person'});
-
-class MailAddress extends Model {}
-MailAddress.init({
-    address: {
-        type: Sequelize.STRING,
-        validate: {
-            isEmail: true
-        }
-    },
-    type: Sequelize.ENUM('home', 'work')
-}, {sequelize, modelName: 'MailAddress'});
-
-MailAddress.belongsTo(Person, {onDelete: 'cascade'});
-Person.hasMany(MailAddress, {onDelete: 'cascade'});
-
-sequelize.sync();
-
-module.exports = {Person, MailAddress};

+ 36 - 0
models/index.js

@@ -0,0 +1,36 @@
+const
+fs = require('fs'),
+Sequelize = require('sequelize');
+
+// create Sequelize instance
+const sequelize = new Sequelize('w4aclem', 'clement.krebs', 'n4or2bgm', {
+	host: 'mysql.iutrs.unistra.fr',
+	port: 3306,
+	dialect: 'mysql',
+	dialectOptions: { decimalNumbers: true }
+});
+
+// this object will contain the model objects
+// each key being the model's name
+const db = {};
+
+// read the files of the current directory
+fs.readdirSync(__dirname)
+.filter((filename) => filename !== 'index.js') // avoid this file
+.forEach((filename) => {
+	const model = require('./' + filename)(sequelize); // get the model definition
+	db[model.name] = model; // add the entry in the db object
+});
+
+// go through each entry of the db object
+Object.keys(db).forEach((modelName) => {
+	// call the "associate" function on the model object
+	// and pass it the db object (so that it can have access to other models)
+	db[modelName].associate(db);
+});
+
+// sync the DB
+sequelize.sync();
+
+// expose the db object
+module.exports = db;

+ 24 - 0
models/mail_adress.js

@@ -0,0 +1,24 @@
+const Sequelize = require('sequelize');
+const Model = Sequelize.Model;
+
+module.exports = (sequelize) => {
+
+    class MailAddress extends Model {
+        static associate(db) {
+            MailAddress.belongsTo(db.Person, {onDelete: 'cascade'});
+        }
+    }
+
+    MailAddress.init({
+        address: {
+            type: Sequelize.STRING,
+            validate: {
+            isEmail: true
+        }
+    },
+        type: Sequelize.ENUM('home', 'work')
+    }, {sequelize, modelName: 'MailAddress'});
+
+
+    return MailAddress
+};

+ 19 - 0
models/person.js

@@ -0,0 +1,19 @@
+const Sequelize = require('sequelize');
+const Model = Sequelize.Model;
+
+module.exports = (sequelize) => {
+
+    class Person extends Model {
+        static associate(db) {
+            Person.hasMany(db.MailAddress, {onDelete: 'cascade'});
+        };
+    }
+
+
+    Person.init({
+        lastname: Sequelize.STRING,
+        firstname: Sequelize.STRING
+    }, {sequelize, modelName: 'Person'});
+
+    return Person;
+};

+ 16 - 0
routes/index.js

@@ -0,0 +1,16 @@
+const
+fs = require('fs');
+
+module.exports = (app) => {
+	
+	// read the files of the current directory
+	fs.readdirSync(__dirname)
+	.filter((filename) => filename !== 'index.js') // avoid this file
+	.forEach((filename) => {
+		// load routes array and register them
+		require('./' + filename).forEach((r) => {
+			app[r.method](r.url, r.func);
+		});
+	});
+
+};

+ 30 - 0
routes/mail_routes.js

@@ -0,0 +1,30 @@
+const mail_ctrl = require('../controllers/mail_address_ctrl');
+const person_ctrl = require('../controllers/person_ctrl');
+
+module.exports = [
+    {
+        url: '/person/:person_id/mailAddress',
+        method: 'get',
+        func: [person_ctrl.load_by_id, mail_ctrl.get_all]
+    },
+    {
+        url: '/person/:person_id/mailAddress',
+        method: 'post',
+        func: [person_ctrl.load_by_id, mail_ctrl.create]
+    },
+    {
+        url: '/person/:person_id/mailAddress/:mail_address_id',
+        method: 'get',
+        func: [person_ctrl.load_by_id, mail_ctrl.get_by_id]
+    },
+    {
+        url: '/person/:person_id/mailAddress/:mail_address_id',
+        method: 'put',
+        func: [person_ctrl.load_by_id, mail_ctrl.update_by_id]
+    },
+    {
+        url: '/person/:person_id/mailAddress/:mail_address_id',
+        method: 'delete',
+        func: [person_ctrl.load_by_id, mail_ctrl.delete_by_id]
+    }
+]

+ 30 - 0
routes/person_routes.js

@@ -0,0 +1,30 @@
+const person_ctrl = require('../controllers/person_ctrl');
+
+module.exports = [
+
+    {
+        url:'/person',
+        method: 'get',
+        func: person_ctrl.get_all
+    },
+    {
+        url:'/person',
+        method: 'post',
+        func: person_ctrl.create
+    },
+    {
+        url:'/person/:person_id',
+        method: 'get',
+        func: person_ctrl.get_by_id
+    },
+    {
+        url:'/person/:person_id',
+        method: 'put',
+        func: person_ctrl.update_by_id
+    },
+    {
+        url:'/person/:person_id',
+        method: 'delete',
+        func: person_ctrl.delete_by_id
+    }
+]

+ 1 - 26
server.js

@@ -1,34 +1,9 @@
 const express = require('express');
 const server= express();
-
 const bd = require('body-parser');
 
 server.use(bd.json());
-
-const personCtrl = require('./person_ctrl');
-const mailCtrl = require('./mail_address_ctrl');
-
-
-server.get('/person', personCtrl.get_all);
-
-server.post('/person', personCtrl.create);
-
-server.get('/person/:person_id', personCtrl.get_by_id);
-
-server.put('/person/:person_id', personCtrl.update_by_id);
-
-server.delete('/person/:person_id', personCtrl.delete_by_id);
-
-server.get('/person/:person_id/mailAddress', personCtrl.load_by_id, mailCtrl.get_all);
-
-
-server.post('/person/:person_id/mailAddress', personCtrl.load_by_id, mailCtrl.create);
-
-server.get('/person/:person_id/mailAddress/:mail_address_id', personCtrl.load_by_id, mailCtrl.get_by_id);
-
-server.put('/person/:person_id/mailAddress/:mail_address_id', personCtrl.load_by_id, mailCtrl.update_by_id);
-
-server.delete('/person/:person_id/mailAddress/:mail_address_id', personCtrl.load_by_id, mailCtrl.delete_by_id);
+const routes = require('./routes')(server);
 
 server.use(function (err, req, res, next) {
     if (err.status) {