CSE316/hw4/server/controllers/top5list-controller.js
2022-05-23 06:22:34 -04:00

178 lines
5.3 KiB
JavaScript

const Top5List = require('../models/top5list-model');
const auth = require('../auth');
const User = require('../models/user-model')
createTop5List = (req, res) => {
const body = req.body;
if (!body) {
return res.status(400).json({
success: false,
errorMessage: 'You must provide a Top 5 List',
})
}
const top5List = new Top5List(body);
console.log("creating top5List: " + JSON.stringify(top5List));
if (!top5List) {
return res.status(400).json({ success: false, errorMessage: err })
}
top5List
.save()
.then(() => {
return res.status(201).json({
success: true,
top5List: top5List,
message: 'Top 5 List Created!'
})
})
.catch(error => {
return res.status(400).json({
error,
errorMessage : 'Top 5 List Not Created!'
})
})
}
updateTop5List = async (req, res) => {
let _id = '';
auth.verify(req, res, async function () {
_id = req.userId;
});
let email = await getEmail(_id);
const body = req.body
console.log("updateTop5List: " + JSON.stringify(body));
if (!body) {
return res.status(400).json({
success: false,
errorMessage: 'You must provide a body to update',
})
}
Top5List.findOne({ _id: req.params.id }, (err, top5List) => {
console.log("top5List found: " + JSON.stringify(top5List));
if (err || top5List.ownerEmail !== email) {
return res.status(404).json({
err,
errorMessage: 'Top 5 List not found!',
})
}
top5List.name = body.name
top5List.items = body.items
top5List
.save()
.then(() => {
console.log("SUCCESS!!!");
return res.status(200).json({
success: true,
id: top5List._id,
message: 'Top 5 List updated!',
})
})
.catch(error => {
console.log("FAILURE: " + JSON.stringify(error));
return res.status(404).json({
error,
errorMessage: 'Top 5 List not updated!',
})
})
})
}
deleteTop5List = async (req, res) => {
let _id = '';
auth.verify(req, res, async function () {
_id = req.userId;
});
let email = await getEmail(_id);
Top5List.findById({ _id: req.params.id }, (err, top5List) => {
if (err || top5List.ownerEmail !== email) {
return res.status(404).json({
err,
errorMessage: 'Top 5 List not found!',
})
}
Top5List.findOneAndDelete({ _id: req.params.id }, () => {
return res.status(200).json({ success: true, data: top5List })
}).catch(err => console.log(err))
})
}
getTop5ListById = async (req, res) => {
let _id = '';
auth.verify(req, res, async function () {
_id = req.userId;
});
let email = await getEmail(_id);
await Top5List.findById({ _id: req.params.id }, (err, list) => {
if (err || list.ownerEmail !== email) {
return res.status(400).json({ success: false, errorMessage: err });
}
return res.status(200).json({ success: true, top5List: list })
}).catch(err => console.log(err))
}
getTop5Lists = async (req, res) => {
let _id = '';
auth.verify(req, res, async function () {
_id = req.userId;
});
let email = await getEmail(_id);
await Top5List.find({ ownerEmail: email }, (err, top5Lists) => {
if (err) {
return res.status(400).json({ success: false, errorMessage: err })
}
if (!top5Lists.length) {
return res
.status(404)
.json({ success: false, errorMessage: `Top 5 Lists not found` })
}
return res.status(200).json({ success: true, data: top5Lists })
}).catch(err => console.log(err))
}
getTop5ListPairs = async (req, res) => {
let _id = '';
auth.verify(req, res, async function () {
_id = req.userId;
});
let email = await getEmail(_id);
await Top5List.find({ ownerEmail: email }, (err, top5Lists) => {
if (err) {
return res.status(400).json({ success: false, errorMessage: err })
}
if (!top5Lists) {
console.log("!top5Lists.length");
return res
.status(404)
.json({ success: false, errorMessage: 'Top 5 Lists not found' })
}
else {
// PUT ALL THE LISTS INTO ID, NAME PAIRS
let pairs = [];
for (let key in top5Lists) {
let list = top5Lists[key];
let pair = {
_id: list._id,
name: list.name
};
pairs.push(pair);
}
return res.status(200).json({ success: true, idNamePairs: pairs })
}
}).catch(err => console.log(err))
}
getEmail = async function (_id) {
const loggedInUser = await User.findOne({ _id: _id});
return loggedInUser.email;
}
module.exports = {
createTop5List,
updateTop5List,
deleteTop5List,
getTop5Lists,
getTop5ListPairs,
getTop5ListById
}