Select Git revision
utils.cpython-38.pyc
-
Timothé Boulet authoredTimothé Boulet authored
routesToucan.js 6.92 KiB
var express = require("express");
var fs = require("fs");
var path = require("path");
var { celebrate } = require("celebrate");
var mongoose = require("mongoose");
var { newToucan, validId, validGet, validTitle, validURL} = require("../utils/schema");
var env = require("../.env");
var isLogged = require("../utils/authentification");
var upload = require("../utils/fileSaver");
var Toucan = require("../models/modelToucan");
var router = express.Router();
const urltoucans = Toucan.aggregate([
{$addFields: {titlelc: {$split: [{$toLower:"$title"}, " "]}}},
{$addFields:{year:{$dateToString: {format: "%Y", date: "$date"}}}},
{$addFields:
{titlelcnospace:
{$reduce:
{input: "$titlelc",initialValue: "",
in: { $concat : ["$$value", "$$this"]}}} }},
{$addFields:
{urlId:
{$concat:["$titlelcnospace","-","$year"]}}},
{$unset:["titlelc","year","titlelcnospace","title","date"]},
]);
router.route("/toucans")
/**
* Une route qui renvoie un json avec tous les toucans, si limit est défini et vaut n, on renvoie les n derniers toucans
* Si before et after sont définis (dates) on ne renvoie qu'entre ces dates
*/
.get(celebrate({query: validGet}),function(req,res) {
let optionsDate = {};
if (req.query.before){
optionsDate.$lt=req.query.before;
}
if(req.query.after){
optionsDate.$gt=req.query.after;
}
Toucan.find((req.query.before || req.query.after) ? {"date": optionsDate} : null)
.sort({date:-1})
.limit(req.query.limit)
.exec(function (err, toucans) {
if (err) {
res.send(err);
} else {
res.json(toucans);
}
});
})
// Une route pour créer un toucan
.post(
isLogged,
upload.fields([{name:"toucan", maxCount:1 }, {name:"cover", maxCount:1 }]),
celebrate({body:newToucan}),
function(req,res) {
if(Object.keys(req.files).length!==2){ // Vérifie qu'il y a 2 fichiers envoyés
res.status(400).send("Il manque un fichier");
} else {
var toucan = new Toucan(req.body);
var id = (toucan._id).toString();
var index;
// On renome les fichier avec la clé de l'entrée dans la database
for (index in req.files) {
var file = req.files[index][0];
var extension = path.extname(file.path);
var newPath = file.destination+"/"+id+extension;
fs.rename(file.path,newPath, err => {
if (err) {
res.status(400).send(err);
}
});
}
toucan.save(function(err) {
if (err) {
res.status(400).send(err);
} else {
res.send({message: "Toucan ajouté !", id: id});
}
});
}});
// Supprime le toucan avec l'id donné
router.route("/delete/:id")
.post(
isLogged,
celebrate({params: validId}),
function(req,res) {
Toucan.deleteOne({_id:req.params.id},
function(err) {
if (err) {
res.send(500).send(err);
} else { // Si on a supprimée l'entrée, on supprime le pdf
var pdfPath = path.format({
dir: env.savedExtensions[1].path,
name: req.params.id,
ext: ".pdf"
});
fs.unlink(pdfPath, (err) => {
if (err) {
res.status(500).send(err);
} else { // Si on a supprimé le pdf on supprime l'image
var imgPath = path.join(env.savedExtensions[0].path,"/",req.params.id);
env.savedExtensions[0].extensions.forEach(ext => {
if (fs.existsSync(imgPath+ext)){
imgPath = imgPath+ext;
fs.unlink(imgPath, (err) => {
if (err) {
res.status(500).send(err);
} else {
res.send("Toucan supprimé");
}
});
}
});
}
});
}
});
});
// Renvoie la cover du toucan avec l'id donné
router.route("/img/:id")
.get(celebrate({params: validId}),function(req,res) {
var imgPath = path.resolve(env.savedExtensions[0].path,req.params.id);
var fileKnown = false;
env.savedExtensions[0].extensions.forEach(ext => {
if (fs.existsSync(imgPath+ext)){
imgPath = imgPath+ext;
fileKnown = true;
}
});
if (fileKnown) {
res.sendFile(imgPath);
} else {
res.send(404,"Image non trouvée");
}
});
/* router.route("/pdf/:urlID")
.get(celebrate({params: validURL}), function(req,res) {
urltoucans.match({urlID: req.params.urlID}, (err,data) => {
if (err) {
res.end(500);
return;
}
else if (!data) {
res.status(404).send("Toucan non trouvé");
return;
}
//const id = data._id;
//res.sendFile(path.resolve(env.savedExtensions[1].path,id+".pdf"));
}
);}); */
router.get('/pdf/:urlId', (req, res) => {
try {
urltoucans.
match({urlId: req.params.urlId}).
exec((err,data) => {
if (err) {
console.log(err);
} else {
const id = data[0]._id;
res.sendFile(path.resolve(env.savedExtensions[1].path,id+".pdf"));
}});
} catch (err) {
console.log(err);
res.sendStatus(401);
}
});
router.get('/pdf/urlID', (req, res) => {
try {
urltoucans.exec((err,data) => {
if (err) {
console.log(err);
} else {
res.send(data);
}});
} catch (err) {
console.log(err);
res.sendStatus(401);
}
});
module.exports = router;