-
Notifications
You must be signed in to change notification settings - Fork 1
/
admin.router.js
84 lines (76 loc) · 2.94 KB
/
admin.router.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
const express = require('express')
const Author = require('./models/Author.model')
const Category = require('./models/Category.model')
const Article = require('./models/Article.model')
// Création d'un nouvel objet "Router"
let adminRouter = express.Router();
/**
* GET /admin/
* Affiche la page d'accueil de l'espace d'administration (et la liste des articles)
*/
adminRouter.get('/', (req, res) => {
Article.find().populate('author category').exec().then(articles => {
res.render('admin/admin', { articles })
}).catch(error => res.send(error.message))
})
/**
* GET /admin/write
* Affiche le formulaire permettant de créer un nouvel article
*/
adminRouter.get('/write', (req, res) => {
// Va récupérer la liste des auteurs et des categories en base, et les passent à la vue
Promise.all([
Author.find().sort('name'),
Category.find().sort('title')
])
.then(([authors, categories]) => res.render('admin/write', { authors, categories }))
.catch(error => res.send(error.message))
})
/**
* POST /admin/write
* Récupère les données du formulaire et crée l'article dans la base.
*/
adminRouter.post('/write', (req, res) => {
Article.createArticle(req.body.titre, req.body.contenu, req.body.categorie, req.body.auteur).then(() => {
res.redirect('/')
}).catch(error => res.send(error.message))
})
/**
* GET /admin/edit/:id
* Affiche le formulaire permettant de supprimer un article via son ID
*/
adminRouter.get('/edit/:id', (req, res) => {
// Va récupérer la liste des auteurs et des categories en base, et les passent à la vue
Article.findById(req.params.id)
.populate('author category')
.then(article => {
if (!article) return Promise.reject(new Error('Article introuvable!'))
return article
})
.then(article => {
return Promise.all([
Author.find().sort('name'),
Category.find().sort('title'),
article
])
})
.then(([authors, categories, article]) => res.render('admin/edit', { authors, categories, article }))
.catch(error => res.send(error.message))
})
adminRouter.post('/edit/:id', (req, res) => {
Article.updateArticle(req.params.id, req.body.titre, req.body.contenu, req.body.categorie, req.body.auteur).then(() => {
res.redirect('/admin')
}).catch(error => res.send(error.message))
})
/**
* DELETE /admin/delete/:id
* Supprime l'article via son ID, et redirige vers l'accueil de l'espace d'administration
*/
adminRouter.get('/delete/:id', (req, res) => {
Article.findByIdAndDelete(req.params.id).then(articleDeleted => {
if (!articleDeleted) return Promise.reject(new Error('Article introuvable!'))
res.redirect('/admin')
}).catch(error => res.send(error.message))
})
// Exporte l'objet Router créé
module.exports = adminRouter