📦 NEW: backend PUT /comments

This commit is contained in:
Divlo 2020-05-04 17:19:51 +02:00
parent 6848c790ed
commit ea5ee96845
5 changed files with 86 additions and 66 deletions

View File

@ -37,7 +37,7 @@ exports.postCommentsByFunctionId = async (req, res, next) => {
} }
exports.deleteCommentById = async (req, res, next) => { exports.deleteCommentById = async (req, res, next) => {
const { commentId } = req.query; const { commentId } = req.params;
try { try {
const comment = await Comments.findOne({ where: { userId: req.userId, id: parseInt(commentId) } }); const comment = await Comments.findOne({ where: { userId: req.userId, id: parseInt(commentId) } });
if (!comment) { if (!comment) {
@ -49,4 +49,24 @@ exports.deleteCommentById = async (req, res, next) => {
console.log(error); console.log(error);
return errorHandling(next, serverError); return errorHandling(next, serverError);
} }
}
exports.putCommentsById = async (req, res, next) => {
const { commentId } = req.params;
const { message } = req.body;
if (!message) {
return errorHandling(next, { message: "Vous ne pouvez pas poster de commentaire vide.", statusCode: 400 });
}
try {
const comment = await Comments.findOne({ where: { userId: req.userId, id: parseInt(commentId) } });
if (!comment) {
return errorHandling(next, { message: "Le commentaire n'existe pas.", statusCode: 404 });
}
comment.message = message;
await comment.save();
return res.status(200).json({ message: "Le commentaire a bien été modifié." });
} catch (error) {
console.log(error);
return errorHandling(next, serverError);
}
} }

View File

@ -106,67 +106,67 @@ AdminRouter.route('/functions/:id')
preserveExtension: Number, preserveExtension: Number,
limits: { fileSize: 5 * 1024 * 1024 }, // 5mb, limits: { fileSize: 5 * 1024 * 1024 }, // 5mb,
parseNested: true parseNested: true
}), }),
[ [
body('title') body('title')
.not() .not()
.isEmpty() .isEmpty()
.withMessage("La fonction doit avoir un titre.") .withMessage("La fonction doit avoir un titre.")
.isLength({ max: 100 }) .isLength({ max: 100 })
.withMessage("Le titre est trop long.") .withMessage("Le titre est trop long.")
.custom(((title) => { .custom(((title) => {
if (title === 'undefined') { if (title === 'undefined') {
return Promise.reject("La fonction doit avoir un titre."); return Promise.reject("La fonction doit avoir un titre.");
}
return true;
})),
body('slug')
.not()
.isEmpty()
.withMessage("La fonction doit avoir un slug.")
.isLength({ max: 100 })
.withMessage("Le slug est trop long.")
.custom(((slug) => {
if (slug === 'undefined') {
return Promise.reject("La fonction doit avoir un slug.");
}
return true;
})),
body('description')
.not()
.isEmpty()
.withMessage("La fonction doit avoir une description.")
.isLength({ max: 255, min: 1 })
.withMessage("La description est trop longue.")
.custom(((description) => {
if (description === 'undefined') {
return Promise.reject("La fonction doit avoir une description.");
}
return true;
})),
body('categorieId')
.not()
.isEmpty()
.withMessage("La fonction doit avoir une catégorie.")
.custom(async (categorieId) => {
try {
const categorieFound = await Categories.findOne({ where: { id: parseInt(categorieId) } });
if (!categorieFound) {
return Promise.reject("La catégorie n'existe pas!");
} }
return true; } catch (error) {
})), console.log(error);
body('slug') }
.not() return true;
.isEmpty() }),
.withMessage("La fonction doit avoir un slug.") body('type')
.isLength({ max: 100 }) .custom((type) => {
.withMessage("Le slug est trop long.") if (!(type === 'article' || type === 'form' || type === 'page')) {
.custom(((slug) => { return Promise.reject('Le type de la fonction peut être : article, form ou page.');
if (slug === 'undefined') { }
return Promise.reject("La fonction doit avoir un slug."); return true;
} })
return true; ], adminController.putFunction)
})),
body('description')
.not()
.isEmpty()
.withMessage("La fonction doit avoir une description.")
.isLength({ max: 255, min: 1 })
.withMessage("La description est trop longue.")
.custom(((description) => {
if (description === 'undefined') {
return Promise.reject("La fonction doit avoir une description.");
}
return true;
})),
body('categorieId')
.not()
.isEmpty()
.withMessage("La fonction doit avoir une catégorie.")
.custom(async (categorieId) => {
try {
const categorieFound = await Categories.findOne({ where: { id: parseInt(categorieId) } });
if (!categorieFound) {
return Promise.reject("La catégorie n'existe pas!");
}
} catch (error) {
console.log(error);
}
return true;
}),
body('type')
.custom((type) => {
if (!(type === 'article' || type === 'form' || type === 'page')) {
return Promise.reject('Le type de la fonction peut être : article, form ou page.');
}
return true;
})
], adminController.putFunction)
// Supprime une fonction avec son id // Supprime une fonction avec son id
.delete(adminController.deleteFunction); .delete(adminController.deleteFunction);

View File

@ -4,7 +4,10 @@ const isAuth = require('../middlewares/isAuth');
const CommentsRouter = Router(); const CommentsRouter = Router();
CommentsRouter.route('/') CommentsRouter.route('/:commentId')
// Modifier un commentaire
.put(isAuth, commentsController.putCommentsById)
// Supprime un commentaire // Supprime un commentaire
.delete(isAuth, commentsController.deleteCommentById); .delete(isAuth, commentsController.deleteCommentById);

View File

@ -14,7 +14,7 @@ const CommentCard = forwardRef((props, ref) => {
props.manageComment.setLoadingComments(true); props.manageComment.setLoadingComments(true);
if (isAuth && user.token != undefined) { if (isAuth && user.token != undefined) {
try { try {
await api.delete(`/comments?commentId=${props.id}`, { headers: { 'Authorization': user.token } }); await api.delete(`/comments/${props.id}`, { headers: { 'Authorization': user.token } });
const newCommentsData = { ...props.manageComment.commentsData }; const newCommentsData = { ...props.manageComment.commentsData };
const commentIndex = newCommentsData.rows.findIndex((value) => value.id === props.id); const commentIndex = newCommentsData.rows.findIndex((value) => value.id === props.id);
newCommentsData.rows.splice(commentIndex, 1); newCommentsData.rows.splice(commentIndex, 1);

View File

@ -4,9 +4,6 @@ import ReactMarkdown from 'react-markdown/with-html';
import HeadTag from '../components/HeadTag'; import HeadTag from '../components/HeadTag';
const About = (props) => { const About = (props) => {
console.log(props);
return ( return (
<Fragment> <Fragment>
<HeadTag <HeadTag