Upload files to 'controllers'

This commit is contained in:
Muhammad Iqbal Rifai 2018-07-04 11:10:13 +02:00
parent a2422d3da8
commit 260b71c90e
2 changed files with 266 additions and 0 deletions

107
controllers/episodes.js Normal file
View File

@ -0,0 +1,107 @@
const Episode = require("../models/episodes");
const Serie = require("../models/series");
module.exports = {
index: async (req, res, next) => {
try {
// Get all the episodes
const episode = await Episode.find({})
.lean()
.sort({ createdAt: -1 })
.limit(9); // the correct order is -1
//res.render("index", { episode: episode });
//res.render('index', { name: 'John' });
res.json(episode);
} catch (err) {
next(err);
}
},
newEpisode: async (req, res, next) => {
try {
// 1. Find the actual anime
const anime = await Serie.findById(req.body.anime);
// 2. Create a new episode
const newEpisode = req.body;
delete newEpisode.anime;
const episode = new Episode(newEpisode);
episode.anime = anime;
//anime.markModified('episode.anime');
await episode.save();
// 3. Add newly created episode to the actual anime
anime.episodes.push(episode);
//episode.markModified('anime.episodes');
//anime.markModified('anime.serie');
await anime.save();
// We're done!
res.json(episode);
// res.redirect("/");
} catch (err) {
next(err);
}
},
getEpisode: async (req, res, next) => {
try {
const episode = await Episode.findOne({ slug: req.params.slug });
if (!episode) return next();
res.json(episode)
//res.render("show", { episode: episode });
} catch (err) {
next(err);
}
},
/* getEpisode: async (req, res, next) => {
const episode = await Episode.findById(req.params.episodeId);
res.render('show', { episode: episode });
//res.json(episode);
}, */
replaceEpisode: async (req, res, next) => {
try {
const { episodeId } = req.params;
const newEpisode = req.body;
const result = await Episode.findByIdAndUpdate(episodeId, newEpisode);
res.json({ success: true });
} catch (err) {
next(err);
}
},
updateEpisode: async (req, res, next) => {
try {
const { episodeId } = req.params;
const newEpisode = req.body;
const result = await Episode.findByIdAndUpdate(episodeId, newEpisode);
//res.json({ success: true });
res.redirect("/");
} catch (err) {
next(err);
}
},
deleteEpisode: async (req, res, next) => {
try {
const { episodeId } = req.params;
// Get a episode
const episode = await Episode.findById(episodeId);
if (!episode) {
return res.status(404).json({ error: "Episode no existe" });
}
const animeId = episode.anime;
// Get a anime
const anime = await Serie.findById(animeId);
// Remove the episode
await episode.remove();
// Remove episode from the anime's selling list
console.log("anime", anime);
anime.episodes.pull(episode);
console.log("anime", anime);
await anime.save();
res.json({ success: true });
} catch (err) {
next(err);
}
}
};

159
controllers/series.js Normal file
View File

@ -0,0 +1,159 @@
const Serie = require("../models/series");
const Episode = require("../models/episodes");
module.exports = {
/* original code without page (you have to modify the routes leave it alone in /)
index: async (req, res, next) => {
const serie = await Serie.find({})
.sort({ createdAt: -1 })
.limit(9);
res.render("series", {serie: serie});
}, */
index: async (req, res, next) => {
const serie = await Serie.find({})
.sort({ createdAt: -1 })
res.json(serie);
},
/*
Uncomment this code to use the page with ejs
index: async (req, res, next) => {
var perPage = 4;
var page = req.params.page || 1;
try {
const serie = await Serie.find({})
.sort({ createdAt: -1 })
.skip(perPage * page - perPage)
.limit(perPage)
.lean()
.exec(function(err, serie) {
Serie.count().exec(function(err, count) {
if (err) return next(err);
res.render("series", {
serie: serie,
current: page,
pages: Math.ceil(count / perPage)
});
});
});
} catch (err) {
next(err);
}
}, */
newSerie: async (req, res, next) => {
try {
const newSerie = new Serie(req.body);
const serie = await newSerie.save();
//res.render("addserie",{serie: serie})
res.json(serie);
//res.redirect("/users/dashboard");
} catch (err) {
next(err);
}
},
//.lean(true) high performance .populate('episodes', 'slug -_id', null, {sort: { createdAt: -1 } });
getSerie: async (req, res, next) => {
try {
const serie = await Serie.findOne({ slug: req.params.slug }).populate({
path: "episodes",
select: "slug -_id",
//, match: { x: 1 },
options: { sort: { createdAt: -1 }, limit: 9 }
});
if (!serie) return next();
//res.render("anime", { serie: serie });
res.json(serie);
} catch (err) {
next(err);
}
},
/* getSerie: async (req, res, next) => {
const { serieId } = req.params;
const serie = await Serie.findById(serieId);
res.render('anime', { serie: serie });
//res.json(serie);
}, */
replaceSerie: async (req, res, next) => {
// enforce that req.body must contain all the fields
try {
const { serieId } = req.params;
const newSerie = req.body;
const result = await Serie.findByIdAndUpdate(serieId, newSerie);
res.json({ success: true });
} catch (err) {
next(err);
}
},
updateSerie: async (req, res, next) => {
try {
// req.body may contain any number of fields
const { serieId } = req.params;
const newSerie = req.body;
const result = await Serie.findByIdAndUpdate(serieId, newSerie);
//res.json({ success: true });
res.redirect("/");
} catch (err) {
next(err);
}
},
//the same as getseries
getSerieEpisodes: async (req, res, next) => {
try {
const { serieId } = req.params;
const serie = await Serie.findById(serieId).populate("episodes");
//res.render('episodes', { serie : serie });
res.json(serie.episodes);
} catch (err) {
next(err);
}
},
newSerieEpisode: async (req, res, next) => {
try {
const { serieId } = req.params;
// Create a new episode
const newEpisode = new Episode(req.body);
// Get series
const serie = await Serie.findById(serieId);
// Assing serie as episode's anime
newEpisode.anime = serie;
// Save the episode
await newEpisode.save();
// Add episode to the serie's selling array 'episodes'
serie.episodes.push(newEpisode);
// Save the series
await serie.save();
res.json(newEpisode);
} catch (err) {
next(err);
}
}
};
/*
We can interact with mongoose in 3 different ways:
1) Callbacks
2) Promises
3) [X] Async/Await (Promises) - this use for the code
*/
//let is used to isolate a code even if they have the same name are two different variables
//const their values after declaring they can be changed as long as the parent object is called
/* Example promises:
index: (req, res, next) => {
Serie.find({})
.then(series => {
res.status(200).json // res.render(series)
})
.catch(err => {
next(err);
});
},
*/