Browse Source

ajout correction tp3

Pierre Kraemer 5 years ago
parent
commit
1094afe013

+ 71 - 0
correction_tp3/controllers/mail_address.js

@@ -0,0 +1,71 @@
+const db = require('../models');
+
+module.exports = {
+	
+	get_all: (req, res, next) => {
+		return req.person.getMailAddresses({
+			order: [ 'type' ]
+		})
+		.then((mailAddresses) => res.json(mailAddresses))
+		.catch((err) => next(err));
+	},
+	
+	get_by_id: (req, res, next) => {
+		return req.person.getMailAddresses({
+			where: {
+				id: req.params.mail_address_id
+			}
+		})
+		.then((mailAddresses) => {
+			if (mailAddresses.length === 0) {
+				throw { status: 404, message: 'Requested MailAddress not found' };
+			}
+			return res.json(mailAddresses[0]);
+		})
+		.catch((err) => next(err));
+	},
+
+	create: (req, res, next) => {
+		const data = {
+			address: req.body.address || '',
+			type: req.body.type || 'home'
+		};
+		return req.person.createMailAddress(data)
+		.then((mailAddress) => res.json(mailAddress))
+		.catch((err) => next(err));
+	},
+
+	update_by_id: (req, res, next) => {
+		return req.person.getMailAddresses({
+			where: {
+				id: req.params.mail_address_id
+			}
+		})
+		.then((mailAddresses) => {
+			if (mailAddresses.length === 0) {
+				throw { status: 404, message: 'Requested MailAddress not found' };
+			}
+			Object.assign(mailAddresses[0], req.body);
+			return mailAddresses[0].save();
+		})
+		.then((mailAddress) => res.json(mailAddress))
+		.catch((err) => next(err));
+	},
+
+	delete_by_id: (req, res, next) => {
+		return req.person.getMailAddresses({
+			where: {
+				id: req.params.mail_address_id
+			}
+		})
+		.then((mailAddresses) => {
+			if (mailAddresses.length === 0) {
+				throw { status: 404, message: 'Requested MailAddress not found' };
+			}
+			return mailAddresses[0].destroy();
+		})
+		.then(() => res.status(200).end())
+		.catch((err) => next(err));
+	}
+
+};

+ 71 - 0
correction_tp3/controllers/person.js

@@ -0,0 +1,71 @@
+const db = require('../models');
+
+module.exports = {
+	
+	get_all: (req, res, next) => {
+		return db.Person.findAll({
+			order: [ 'lastname' ]
+		})
+		.then((people) => res.json(people))
+		.catch((err) => next(err));
+	},
+	
+	load_by_id: (req, res, next) => {
+		return db.Person.findByPk(req.params.person_id)
+		.then((person) => {
+			if (!person) {
+				throw { status: 404, message: 'Requested Person not found' };
+			}
+			req.person = person;
+			return next();
+		})
+		.catch((err) => next(err));
+	},
+	
+	get_by_id: (req, res, next) => {
+		return db.Person.findByPk(req.params.person_id)
+		.then((person) => {
+			if (!person) {
+				throw { status: 404, message: 'Requested Person not found' };
+			}
+			return res.json(person);
+		})
+		.catch((err) => next(err));
+	},
+
+	create: (req, res, next) => {
+		const data = {
+			firstname: req.body.firstname || '',
+			lastname: req.body.lastname || ''
+		};
+		return db.Person.create(data)
+		.then((person) => res.json(person))
+		.catch((err) => next(err));
+	},
+
+	update_by_id: (req, res, next) => {
+		return db.Person.findByPk(req.params.person_id)
+		.then((person) => {
+			if (!person) {
+				throw { status: 404, message: 'Requested Person not found' };
+			}
+			Object.assign(person, req.body);
+			return person.save();
+		})
+		.then((person) => res.json(person))
+		.catch((err) => next(err));
+	},
+
+	delete_by_id: (req, res, next) => {
+		return db.Person.findByPk(req.params.person_id)
+		.then((person) => {
+			if (!person) {
+				throw { status: 404, message: 'Requested Person not found' };
+			}
+			return person.destroy();
+		})
+		.then(() => res.status(200).end())
+		.catch((err) => next(err));
+	}
+
+};

+ 29 - 0
correction_tp3/models/index.js

@@ -0,0 +1,29 @@
+const
+fs = require('fs'),
+Sequelize = require('sequelize');
+
+// create Sequelize instance
+const sequelize = new Sequelize('w4a', 'w4a', 'w4aw4aw4a', {
+	host: 'localhost',
+	port: 3306,
+	dialect: 'mysql',
+	dialectOptions: { decimalNumbers: true }
+	// logging: false
+});
+
+const db = {};
+
+fs.readdirSync(__dirname)
+.filter((filename) => filename !== 'index.js')
+.forEach((filename) => {
+	const model = require('./' + filename)(sequelize);
+	db[model.name] = model;
+});
+
+Object.keys(db).forEach((modelName) => {
+	db[modelName].associate(db);
+});
+
+sequelize.sync();
+
+module.exports = db;

+ 25 - 0
correction_tp3/models/mail_address.js

@@ -0,0 +1,25 @@
+const Sequelize = require('sequelize');
+
+module.exports = (sequelize) => {
+
+	class MailAddress extends Sequelize.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;
+};

+ 21 - 0
correction_tp3/models/person.js

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

+ 14 - 0
correction_tp3/routes/index.js

@@ -0,0 +1,14 @@
+const
+fs = require('fs');
+
+module.exports = (app) => {
+	
+	fs.readdirSync(__dirname)
+	.filter((filename) => filename !== 'index.js')
+	.forEach((filename) => {
+		require('./' + filename).forEach((r) => {
+			app[r.method](r.url, r.func);
+		});
+	});
+
+};

+ 32 - 0
correction_tp3/routes/mail_address.js

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

+ 31 - 0
correction_tp3/routes/person.js

@@ -0,0 +1,31 @@
+const person_ctrl = require('../controllers/person');
+
+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
+	}
+	
+];

+ 28 - 0
correction_tp3/server.js

@@ -0,0 +1,28 @@
+const
+express = require('express'),
+bodyParser = require('body-parser'),
+cors = require('cors');
+
+const app = express();
+
+app.use(cors());
+app.use(bodyParser.json());
+
+// register routes
+require('./routes')(app);
+
+// register error handling middleware
+app.use((err, req, res, next) => {
+	if (err.status === undefined) {
+		return res.status(500).send(err.message);
+	} else {
+		return res.status(err.status).send(err.message);
+	}
+});
+
+// launch server
+const server = app.listen(3000, () => {
+	const host = server.address().address;
+	const port = server.address().port;
+	console.log('App listening at http://%s:%s', host, port);
+});