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)
Sebastian Mihalache
committed
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.',
})
Sebastian Mihalache
committed
collection.invitations = collection.invitations || []
const invitation = collection.invitations.find(
invitation => invitation.id === invitationId,
)
Sebastian Mihalache
committed
if (!invitation)
return res.status(404).json({
error: `Invitation ${invitationId} not found`,
})
Sebastian Mihalache
committed
const team = await teamHelper.getTeam({
role: invitation.role,
Sebastian Mihalache
committed
objectType: 'collection',
collection.invitations = collection.invitations.filter(
inv => inv.id !== invitation.id,
)
Sebastian Mihalache
committed
collection.status = 'submitted'
delete collection.handlingEditor
Sebastian Mihalache
committed
await teamHelper.removeTeamMember({
teamId: team.id,
userId: invitation.userId,
})
Sebastian Mihalache
committed
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',
// })
Sebastian Mihalache
committed
return res.status(200).json({})
Sebastian Mihalache
committed
const notFoundError = await services.handleNotFoundError(e, 'Collection')