Skip to content

Commit

Permalink
Merge pull request #1 from anthony-mini/CRUD
Browse files Browse the repository at this point in the history
merge CRUD
  • Loading branch information
anthony-mini authored Oct 16, 2022
2 parents f68f678 + 09708d2 commit cc34572
Show file tree
Hide file tree
Showing 17 changed files with 4,105 additions and 2,554 deletions.
File renamed without changes.
57 changes: 32 additions & 25 deletions back/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,46 +9,53 @@

const express = require('express');
const mongoose = require('mongoose');

const path = require('path');

const sauceRoutes = require('./routes/sauce');
const userRoutes = require('./routes/user');
// Appel de l'application express.
const app = express();

/**
* Analyser du corps de la requête au format JSON,
* venant de l'application front-end.
*/

app.use(express.json());


/**
* ** Connexion à la base de données MongoDB via Mongoose **
*/

mongoose.connect('mongodb+srv://admin-piiquante:u5jGx1XX6dKuecag-4Tmn9jcy3UxvxB4J-LxGLfPgT3h2chIxu@database-piiquante.disfiye.mongodb.net/?retryWrites=true&w=majority',
{ useNewUrlParser: true,
useUnifiedTopology: true })
.then(() => console.log('Connexion à MongoDB réussie !'))
.catch(() => console.log('Connexion à MongoDB échouée !'));
mongoose.connect('mongodb+srv://admin-piiquante:u5jGx1XX6dKuecag-4Tmn9jcy3UxvxB4J-LxGLfPgT3h2chIxu@database-piiquante.disfiye.mongodb.net/?retryWrites=true&w=majority',
{ useNewUrlParser: true,
useUnifiedTopology: true })
.then(() => console.log('Connexion à MongoDB réussie !'))
.catch(() => console.log('Connexion à MongoDB échouée !'));

// Appel de l'application express.
const app = express();

/**
* Analyser du corps de la requête au format JSON,
* venant de l'application front-end.
*/

app.use(express.json());

/**
* ** Création d'un header : **
* #. Débloque les erreus CORS
* #. Autorise l'acces à notre API
*/

app.use((req, res, next) => {
res.setHeader('Access-Control-Allow-Origin', '*'); // Acces à l'API selon n'importe quel origine ('*')
res.setHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content, Accept, Content-Type, Authorization'); // ajout des headers mentionnés aux requêtes envoyées vers notre API
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, PATCH, OPTIONS'); // envoie des requêtes avec les méthodes mentionnées ( GET ,POST , etc.)
next();
});


/**
* ** Création d'un header : **
* #. Débloque les erreus CORS
* #. Autorise l'acces à notre API
*/

app.use((req, res, next) => {
res.setHeader('Access-Control-Allow-Origin', '*'); // Acces à l'API selon n'importe quel origine ('*')
res.setHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content, Accept, Content-Type, Authorization'); // ajout des headers mentionnés aux requêtes envoyées vers notre API
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, PATCH, OPTIONS'); // envoie des requêtes avec les méthodes mentionnées ( GET ,POST , etc.)
next();
});

// Importation du segment d'origine des routes
app.use('/api/sauces', sauceRoutes);
app.use('/api/auth', userRoutes);

app.use('/images', express.static(path.join(__dirname, 'images')));

// Exportation de cette constante pour pouvoir y accéder dans d'autres fichiers
Expand Down
161 changes: 83 additions & 78 deletions back/controllers/sauce.js
Original file line number Diff line number Diff line change
@@ -1,95 +1,100 @@
const Sauce = require('../models/sauce');
// Importer le modèle sauce
const Sauce = require('../models/Sauce');
// importer filesystem
const fs = require('fs');

/**
* Exportation des fonctions de routing.
*/
// Créer une sauce

exports.createSauce = (req, res, next) => {
const sauceObject = JSON.parse(req.body.sauce);
delete sauceObject._id;
delete sauceObject.userId;

const sauce = new Sauce({
...sauceObject,
userId: req.auth.userId,

imageUrl: `${req.protocol}://${req.get('host')}/images/${req.file.filename}`
});

sauce.save()
.then(() => res.status(201).json({
message: 'Objet enregistré !'
}))
.catch(error => res.status(400).json({
error
}));
};

// Récupérer toutes les sauces

exports.getAllSauces = (req, res, next) => {
Sauce.find().then(
Sauce.find().then(
(sauces) => {
res.status(200).json(sauces);
res.status(200).json(sauces);
}
).catch(
).catch(
(error) => {
res.status(400).json({
error: error
});
res.status(400).json({
error: error
});
}
);
};
);
};

exports.getOneSauce = (req, res, next) => {
Sauce.findOne({
exports.getOneSauce = (req, res, next) => {
Sauce.findOne({
_id: req.params.id
}).then(
}).then(
(sauce) => {
res.status(200).json(sauce);
res.status(200).json(sauce);
}
).catch(
).catch(
(error) => {
res.status(404).json({
error: error
});
res.status(404).json({
error: error
});
}
);
};

exports.createSauce = (req, res, next) => {
const sauceObject = JSON.parse(req.body.sauce);
delete sauceObject._id;
delete sauceObject._userId;
const sauce = new Sauce({
...sauceObject,
userId: req.auth.userId,
imageUrl: `${req.protocol}://${req.get('host')}/images/${req.file.filename}`
});

sauce.save()
.then(() => { res.status(201).json({message: 'Sauce enregistré !'})})
.catch(error => { res.status(400).json( { error })})
};
);
};

exports.updateSauce = (req, res, next) => {
const sauceObject = req.file ? {
...JSON.parse(req.body.sauce),
imageUrl: `${req.protocol}://${req.get('host')}/images/${req.file.filename}`
} : { ...req.body };

delete sauceObject._userId;
Sauce.findOne({_id: req.params.id})
.then((sauce) => {
if (sauce.userId != req.auth.userId) {
res.status(401).json({ message : 'Not authorized'});
} else {
Sauce.updateOne({ _id: req.params.id}, { ...sauceObject, _id: req.params.id})
.then(() => res.status(200).json({message : 'Sauce modifié!'}))
.catch(error => res.status(401).json({ error }));
}
})
.catch((error) => {
res.status(400).json({ error });
});
};
//Modifier une sauce existante

exports.deleteSauce = (req, res, next) => {
Sauce.findOne({ _id: req.params.id})
.then(sauce => {
if (sauce.userId != req.auth.userId) {
res.status(401).json({message: 'Not authorized'});
} else {
const filename = sauce.imageUrl.split('/images/')[1];
fs.unlink(`images/${filename}`, () => {
Sauce.deleteOne({_id: req.params.id})
.then(() => { res.status(200).json({message: 'Sauce supprimé !'})})
.catch(error => res.status(401).json({ error }));
});
}
})
.catch( error => {
res.status(500).json({ error });
});
};
exports.updateSauce = (req, res, next) => {
const sauceObject = req.file ? {
...JSON.parse(req.body.sauce),
imageUrl: `${req.protocol}://${req.get('host')}/images/${req.file.filename}`
} : { ...req.body };

delete sauceObject._userId;
Sauce.findOne({_id: req.params.id})
.then((sauce) => {
if (sauce.userId != req.auth.userId) {
res.status(401).json({ message : 'Not authorized'});
} else {
Sauce.updateOne({ _id: req.params.id}, { ...sauceObject, _id: req.params.id})
.then(() => res.status(200).json({message : 'Sauce modifié!'}))
.catch(error => res.status(401).json({ error }));
}
})
.catch((error) => {
res.status(400).json({ error });
});
};

// exports.likeStatusSauce = (req, res, next) => {
//Supprimer un sauce

// };
exports.deleteSauce = (req, res, next) => {
Sauce
.findOne({ _id: req.params.id })
.then((sauce) => {
const filename = sauce.imageUrl.split("/images/")[1];
fs.unlink(`images/${filename}`, () => {
Sauce
.deleteOne({ _id: req.params.id })
.then(() => res.status(200).json({ message: "Sauce supprimé !" }))
.catch((error) => res.status(400).json({ error }));
});
})
.catch((error) => res.status(500).json({ error }));
};
3 changes: 2 additions & 1 deletion back/controllers/user.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
const User = require('../models/User');

const bcrypt = require('bcrypt');
const jwt = require('jsonwebtoken');
const User = require('../models/User');

/**
* Exportation des fonctions de routing.
Expand Down
10 changes: 5 additions & 5 deletions back/models/sauce.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,11 @@ const mongoose = require('mongoose');
mainPepper: { type: String, required: true },
imageUrl: { type: String, required: true },
heat: { type: Number, required: true },
likes: { type: Number, required: true },
dislikes: { type: Number, required: true },
userLiked: { type: String, required: true },
userDisliked: { type: String, required: true },
likes: { type: Number, default: 0 },
dislikes: { type: Number, default: 0},
usersLiked: { type: [String], default: [] },
usersDisliked: { type: [String], default: [] },
});

//Exportation du schéma en tant que modèle Mongoose.
module.exports = mongoose.model('sauce', sauceSchema);
module.exports = mongoose.model('Sauce', sauceSchema);
2 changes: 1 addition & 1 deletion back/models/user.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,4 @@ const uniqueValidator = require('mongoose-unique-validator');
userSchema.plugin(uniqueValidator);

//Exportation du schéma en tant que modèle Mongoose.
module.exports = mongoose.model('user', userSchema);
module.exports = mongoose.model('User', userSchema);
Loading

0 comments on commit cc34572

Please sign in to comment.