Select Git revision
activityControllers.js 5.06 KiB
const { crudControllers } = require('../../utils/crud')
const { Activity } = require('./activityModel')
const { User } = require('../user/userModel')
const { Attendance } = require('../attendance/attendanceModel')
const { Comment } = require('../comment/commentModel')
const { omit, pick } = require('lodash')
const pickedKeys = [
'_id',
'title',
'description',
'date',
'type',
'createdAt',
'attendance',
'comment',
]
exports.default = crudControllers(Activity, pickedKeys)
exports.default.createOne = async (req, res) => {
try {
// Invalid Date provided
if (!req.body.date || Date.parse(req.body.date) < new Date().getTime())
return res.status(403).json({ messages: ['Invalid date'] })
let activity = await Activity.create({ ...req.body })
// Create Initial participants
if (
!(
req.body.initialParticipants != null &&
req.body.initialParticipants == false
)
) {
let acceptedUsers = await User.find({ role: 'accepted' }).lean().exec()
acceptedUsers = acceptedUsers.map(function getUserSchaccs(user) {
return { schacc: user.schacc }
})
let attendances = activity.attendance
for await (let user of acceptedUsers) {
const newAttendance = await Attendance.create({
activity: activity._id,
user: user.schacc,
})
attendances.push(newAttendance._id)
}
await Activity.findOneAndUpdate(
{ _id: activity._id },
{ attendance: attendances },
{ new: true }
)
.lean()
.exec()
}
await activity
.populate({
path: 'comment',
select: '_id creator text createdAt',
})
.populate({
path: 'attendance',
select: '_id user state',
})
.execPopulate()
// conver to JS Object to overwrite .creator