Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
get.js 1.69 KiB
const helpers = require('../../helpers/helpers')
const teamHelper = require('../../helpers/Team')
const config = require('config')
const inviteHelper = require('../../helpers/Invitation')

const configRoles = config.get('roles')
module.exports = models => async (req, res) => {
  const { role } = req.query
  // TO DO: authsome
  if (!helpers.checkForUndefinedParams(role)) {
    res.status(400).json({ error: 'Role is required' })
    return
  }

  if (!configRoles.collection.includes(role)) {
    res.status(400).json({ error: `Role ${role} is invalid` })
    return
  }
  const { collectionId } = req.params
  try {
    const collection = await models.Collection.find(collectionId)
    const members = await teamHelper.getTeamMembersByCollection(
      collectionId,
      role,
      models.Team,
    )

    if (members === undefined) {
      res.status(400).json({
        error: `The requested collection does not have a ${role} Team`,
      })
      return
    }

    // TO DO: handle case for when the invitationID is provided
    const membersData = members.map(async member => {
      const user = await models.User.find(member)
      const { timestamp, status, id } = inviteHelper.getInvitationData(
        collection.invitations,
        user.id,
        role,
      )
      return {
        name: `${user.firstName} ${user.lastName}`,
        timestamp,
        email: user.email,
        status,
        invitationId: id,
      }
    })

    const resBody = await Promise.all(membersData)
    res.status(200).json(resBody)
  } catch (e) {
    const notFoundError = await helpers.handleNotFoundError(e, 'collection')
    return res.status(notFoundError.status).json({
      error: notFoundError.message,
    })
  }
}