This repository has been archived on 2024-10-29. You can view files and clone it, but cannot push or open issues or pull requests.
FunctionProject/api/routes/admin.js

224 lines
6.3 KiB
JavaScript
Raw Normal View History

2020-08-03 12:04:07 +02:00
const { Router } = require('express')
const fileUpload = require('express-fileupload')
const { body } = require('express-validator')
const adminController = require('../controllers/admin')
const Functions = require('../models/functions')
const Categories = require('../models/categories')
2020-03-25 16:23:43 +01:00
2020-08-03 12:04:07 +02:00
const AdminRouter = Router()
2020-03-25 16:23:43 +01:00
AdminRouter.route('/functions')
2020-08-03 14:14:45 +02:00
// Récupère les fonctions
2020-08-03 12:04:07 +02:00
.get(adminController.getFunctions)
2020-08-03 14:14:45 +02:00
// Permet de créé une fonction
.post(
fileUpload({
useTempFiles: true,
safeFileNames: true,
preserveExtension: Number,
limits: { fileSize: 5 * 1024 * 1024 }, // 5mb,
parseNested: true
}),
[
body('title')
.not()
.isEmpty()
.withMessage('La fonction doit avoir un titre.')
.isLength({ max: 100 })
.withMessage('Le titre est trop long.')
.custom(title => {
if (title === 'undefined') {
return Promise.reject(new Error('La fonction doit avoir un titre.'))
2020-08-03 12:04:07 +02:00
}
2020-08-03 14:14:45 +02:00
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(new Error('La fonction doit avoir un slug.'))
2020-08-03 12:04:07 +02:00
}
2020-08-03 14:14:45 +02:00
return true
})
.custom(async slug => {
try {
const FunctionSlug = await Functions.findOne({ where: { slug } })
if (FunctionSlug) {
return Promise.reject(new Error('Le slug existe déjà...'))
}
} catch (error) {
console.log(error)
}
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(
new Error('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(new Error("La catégorie n'existe pas!"))
}
} catch (error) {
console.log(error)
}
return true
}),
body('type').custom(type => {
2020-08-03 12:04:07 +02:00
if (!(type === 'article' || type === 'form' || type === 'page')) {
2020-08-03 14:14:45 +02:00
return Promise.reject(
new Error(
'Le type de la fonction peut être : article, form ou page.'
)
)
2020-08-03 12:04:07 +02:00
}
return true
})
2020-08-03 14:14:45 +02:00
],
adminController.postFunction
)
AdminRouter.route('/functions/:slug')
2020-03-25 16:23:43 +01:00
2020-08-03 14:14:45 +02:00
// Récupère les informations d'une fonction
2020-08-03 12:04:07 +02:00
.get(adminController.getFunctionBySlug)
AdminRouter.route('/functions/:id')
2020-08-03 14:14:45 +02:00
// Modifie information basique d'une fonction
.put(
fileUpload({
useTempFiles: true,
safeFileNames: true,
preserveExtension: Number,
limits: { fileSize: 5 * 1024 * 1024 }, // 5mb,
parseNested: true
}),
[
body('title')
.not()
.isEmpty()
.withMessage('La fonction doit avoir un titre.')
.isLength({ max: 100 })
.withMessage('Le titre est trop long.')
.custom(title => {
if (title === 'undefined') {
return Promise.reject(new Error('La fonction doit avoir un titre.'))
2020-08-03 12:04:07 +02:00
}
2020-08-03 14:14:45 +02:00
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(new Error('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(
new Error('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(new Error("La catégorie n'existe pas!"))
}
} catch (error) {
console.log(error)
}
return true
}),
body('type').custom(type => {
2020-08-03 12:04:07 +02:00
if (!(type === 'article' || type === 'form' || type === 'page')) {
2020-08-03 14:14:45 +02:00
return Promise.reject(
new Error(
'Le type de la fonction peut être : article, form ou page.'
)
)
2020-08-03 12:04:07 +02:00
}
return true
})
2020-08-03 14:14:45 +02:00
],
adminController.putFunction
)
2020-08-03 12:04:07 +02:00
2020-08-03 14:14:45 +02:00
// Supprime une fonction avec son id
2020-08-03 12:04:07 +02:00
.delete(adminController.deleteFunction)
2020-03-25 23:30:33 +01:00
AdminRouter.route('/functions/article/:id')
2020-08-03 12:04:07 +02:00
.put(adminController.putFunctionArticle)
AdminRouter.route('/functions/form/:id')
2020-08-03 12:04:07 +02:00
.put(adminController.putFunctionForm)
2020-04-12 22:38:13 +02:00
AdminRouter.route('/categories')
2020-08-03 14:14:45 +02:00
// Crée une catégorie
2020-08-03 12:04:07 +02:00
.post(adminController.postCategory)
2020-04-12 22:38:13 +02:00
AdminRouter.route('/categories/:id')
2020-08-03 14:14:45 +02:00
// Modifier une catégorie avec son id
2020-08-03 12:04:07 +02:00
.put(adminController.putCategory)
2020-04-12 22:38:13 +02:00
2020-08-03 14:14:45 +02:00
// Supprime une catégorie avec son id
2020-08-03 12:04:07 +02:00
.delete(adminController.deleteCategory)
2020-04-12 22:38:13 +02:00
AdminRouter.route('/quotes')
2020-08-03 14:14:45 +02:00
// Récupère les citations pas encore validées
2020-08-03 12:04:07 +02:00
.get(adminController.getQuotes)
AdminRouter.route('/quotes/:id')
2020-08-03 14:14:45 +02:00
// Valide ou supprime une citation
2020-08-03 12:04:07 +02:00
.put(adminController.putQuote)
2020-08-03 12:04:07 +02:00
module.exports = AdminRouter