Skip to content
Snippets Groups Projects
Commit 2cc795d4 authored by Rafael László's avatar Rafael László :speech_balloon:
Browse files

fix activity controller

parent 245edf82
No related branches found
No related tags found
2 merge requests!20working endpoints and documentation,!18Resolve "Átfaktorálás"
Pipeline #4674 passed
...@@ -17,36 +17,6 @@ const pickedKeys = [ ...@@ -17,36 +17,6 @@ const pickedKeys = [
'comment', 'comment',
] ]
const activitySelector =
'_id title description date type createdAt updatedAt attendance comment'
const commentSelector = '_id creator _creator text createdAt'
const attendanceSelector = '_id user state'
const creatorSelector = '-_id fullName nickName schacc'
// Overwrites the given field with the populated User
// field: populate on this
// byPopulate: user schacc field name
async function populateUsersOnField(fieldToPopulate, byPopulate) {
let newField = []
for (let field of fieldToPopulate) {
const populated = await User.findOne({
schacc: field[byPopulate],
})
.lean()
.exec()
field[byPopulate] = pick(populated, creatorSelector.split(' '))
newField.push(field)
}
return newField
}
async function populateCommentsandAttendances(activity) {
activity.comment = await populateUsersOnField(activity.comment, 'creator')
activity.attendance = await populateUsersOnField(activity.attendance, 'user')
return activity
}
// Controller // Controller
module.exports.createOne = async function createOne(req, res) { module.exports.createOne = async function createOne(req, res) {
...@@ -87,21 +57,6 @@ module.exports.createOne = async function createOne(req, res) { ...@@ -87,21 +57,6 @@ module.exports.createOne = async function createOne(req, res) {
.exec() .exec()
} }
await activity
.populate({
path: 'comment',
select: commentSelector,
})
.populate({
path: 'attendance',
select: attendanceSelector,
})
.execPopulate()
const populatedActivity = await populateCommentsandAttendances(
activity.toObject()
)
return res return res
.status(200) .status(200)
.json({ .json({
...@@ -125,24 +80,36 @@ module.exports.createOne = async function createOne(req, res) { ...@@ -125,24 +80,36 @@ module.exports.createOne = async function createOne(req, res) {
module.exports.getOne = async function getOne(req, res) { module.exports.getOne = async function getOne(req, res) {
try { try {
const activity = await Activity.findOne({ _id: req.params.id }) const activity = await Activity.findOne({ _id: req.params.id })
.populate({
path: 'comment',
select: commentSelector,
})
.populate({
path: 'attendance',
select: attendanceSelector,
})
.lean() .lean()
.exec() .exec()
if (!activity) if (!activity)
return res.status(404).json({ messages: ['No such activity.'] }) return res.status(404).json({ messages: ['No such activity.'] })
const populatedActivity = await populateCommentsandAttendances(activity) if (req.user.role == 'mentor')
return res.status(200).json({
return res.status(200).json({ data: pick(populatedActivity, pickedKeys) }) data: pick(activity, pickedKeys),
})
return res.status(200).json({
data: pick(activity, [
'_id',
'title',
'description',
'date',
'type',
'createdAt',
'updatedAt',
]),
})
} catch (err) { } catch (err) {
if (err.name == 'ValidationError') {
// Throwed by Mongoose
let messages = []
for (field in err.errors) {
messages.push(err.errors[field].message)
}
return res.status(422).json({ messages })
}
console.error(err) console.error(err)
return res.status(500).json({ message: err.message }) return res.status(500).json({ message: err.message })
} }
...@@ -150,31 +117,25 @@ module.exports.getOne = async function getOne(req, res) { ...@@ -150,31 +117,25 @@ module.exports.getOne = async function getOne(req, res) {
module.exports.getMany = async function getMany(req, res) { module.exports.getMany = async function getMany(req, res) {
try { try {
const activity = await Activity.find() const activity = await Activity.find().select('-__v').lean().exec()
.populate({
path: 'comment',
select: '_id creator text createdAt',
})
.populate({
path: 'attendance',
select: '_id user state',
})
.select('-__v')
.lean()
.exec()
if (!activity) if (!activity)
return res.status(404).json({ message: 'Activity not found!' }) return res.status(404).json({ message: 'Activity not found!' })
res.status(200).json({ res.status(200).json({
data: await Promise.all( data: activity.map(function pickKeys(doc) {
activity.map(async function pickKeys(doc) {
const populatedActivity = await populateCommentsandAttendances(doc)
return pick(populatedActivity, pickedKeys) return pick(populatedActivity, pickedKeys)
}) }),
),
}) })
} catch (err) { } catch (err) {
if (err.name == 'ValidationError') {
// Throwed by Mongoose
let messages = []
for (field in err.errors) {
messages.push(err.errors[field].message)
}
return res.status(422).json({ messages })
}
console.error(err) console.error(err)
res.status(500).json({ message: err.message }) res.status(500).json({ message: err.message })
} }
...@@ -185,17 +146,11 @@ module.exports.removeOne = async function removeOne(req, res) { ...@@ -185,17 +146,11 @@ module.exports.removeOne = async function removeOne(req, res) {
const activity = await Activity.findByIdAndDelete({ const activity = await Activity.findByIdAndDelete({
_id: req.params.id, _id: req.params.id,
}) })
.populate({
path: 'comment',
select: '_id creator text createdAt',
})
.select('-__v')
.lean() .lean()
.exec() .exec()
if (!activity) { if (!activity)
return res.status(404).json({ message: 'Activity not found!' }) return res.status(404).json({ message: 'Activity not found!' })
}
await Attendance.deleteMany({ await Attendance.deleteMany({
_id: activity.attendance.map(function getAttendanceIds(element) { _id: activity.attendance.map(function getAttendanceIds(element) {
...@@ -211,6 +166,14 @@ module.exports.removeOne = async function removeOne(req, res) { ...@@ -211,6 +166,14 @@ module.exports.removeOne = async function removeOne(req, res) {
return res.status(200).json({ data: pick(activity, pickedKeys) }) return res.status(200).json({ data: pick(activity, pickedKeys) })
} catch (err) { } catch (err) {
if (err.name == 'ValidationError') {
// Throwed by Mongoose
let messages = []
for (field in err.errors) {
messages.push(err.errors[field].message)
}
return res.status(422).json({ messages })
}
console.error(err) console.error(err)
return res.status(500).json({ message: err.message }) return res.status(500).json({ message: err.message })
} }
...@@ -223,11 +186,6 @@ module.exports.updateOne = async function updateOne(req, res) { ...@@ -223,11 +186,6 @@ module.exports.updateOne = async function updateOne(req, res) {
omit(req.body, ['attendance', 'comment']), omit(req.body, ['attendance', 'comment']),
{ new: true } { new: true }
) )
.populate({
path: 'comment',
select: '_id creator text createdAt',
})
.select('-__v')
.lean() .lean()
.exec() .exec()
...@@ -236,6 +194,14 @@ module.exports.updateOne = async function updateOne(req, res) { ...@@ -236,6 +194,14 @@ module.exports.updateOne = async function updateOne(req, res) {
res.status(200).json({ data: pick(activity, pickedKeys) }) res.status(200).json({ data: pick(activity, pickedKeys) })
} catch (err) { } catch (err) {
if (err.name == 'ValidationError') {
// Throwed by Mongoose
let messages = []
for (field in err.errors) {
messages.push(err.errors[field].message)
}
return res.status(422).json({ messages })
}
console.error(err) console.error(err)
res.status(500).json({ message: err.message }) res.status(500).json({ message: err.message })
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment