Skip to content
Snippets Groups Projects
delete.js 1.93 KiB
Newer Older
// const mailService = require('pubsweet-component-mail-service')

const {
  services,
  Team,
  authsome: authsomeHelper,
} = require('pubsweet-component-helper-service')

module.exports = models => async (req, res) => {
  const { collectionId, invitationId } = req.params
  const teamHelper = new Team({ TeamModel: models.Team, collectionId })

  try {
    const collection = await models.Collection.find(collectionId)
    const authsome = authsomeHelper.getAuthsome(models)
    const target = {
      collection,
      path: req.route.path,
    }
    const canDelete = await authsome.can(req.user, 'DELETE', target)
    if (!canDelete)
      return res.status(403).json({
        error: 'Unauthorized.',
      })

    collection.invitations = collection.invitations || []
    const invitation = collection.invitations.find(
      invitation => invitation.id === invitationId,
    )
    if (!invitation)
      return res.status(404).json({
        error: `Invitation ${invitationId} not found`,
      })
    const team = await teamHelper.getTeam({

    collection.invitations = collection.invitations.filter(
      inv => inv.id !== invitation.id,
    )

    collection.status = 'submitted'
    delete collection.handlingEditor
    await collection.save()
    await teamHelper.removeTeamMember({
      teamId: team.id,
      userId: invitation.userId,
    })
    const UserModel = models.User
    const user = await UserModel.find(invitation.userId)
    user.teams = user.teams.filter(userTeamId => team.id !== userTeamId)
    await user.save()

    // mailService.sendSimpleEmail({
    //   toEmail: user.email,
    //   emailType: 'revoke-handling-editor',
    // })
  } catch (e) {
    const notFoundError = await services.handleNotFoundError(e, 'Collection')
    return res.status(notFoundError.status).json({
      error: notFoundError.message,
    })
  }
}