Skip to content
Snippets Groups Projects
Select Git revision
  • ba9121329e19f9a3a96407e7e7b9ba6e614925c2
  • master default
2 results

Tower.java

Blame
  • 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