-
Andrei Cioromila authoreddb28c72f
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
const {
Team,
services,
Collection,
Invitation,
} = require('pubsweet-component-helper-service')
const notifications = require('./emails/notifications')
module.exports = models => async (req, res) => {
const { collectionId, invitationId } = req.params
const { isAccepted, reason } = req.body
const user = await models.User.find(req.user)
try {
const collection = await models.Collection.find(collectionId)
collection.invitations = collection.invitations || []
const invitation = collection.invitations.find(
invitation => invitation.id === invitationId,
)
const invitationHelper = new Invitation({
userId: user.id,
role: 'handlingEditor',
invitation,
})
const invitationValidation = invitationHelper.validateInvitation()
if (invitationValidation.error)
return res.status(invitationValidation.status).json({
error: invitationValidation.error,
})
const collectionHelper = new Collection({ collection })
const teamHelper = new Team({ TeamModel: models.Team, collectionId })
await collectionHelper.updateHandlingEditor({ isAccepted })
invitation.respondedOn = Date.now()
invitation.hasAnswer = true
invitation.isAccepted = isAccepted
if (!isAccepted) {
await teamHelper.deleteHandlingEditor({
collection,
role: invitation.role,
user,
})
if (reason) invitation.reason = reason
}
await collection.save()
notifications.sendEiCEmail({
models,
reason,
collection,
isAccepted,
invitedHE: user,
baseUrl: services.getBaseUrl(req),
})
return res.status(200).json(invitation)
} catch (e) {
const notFoundError = await services.handleNotFoundError(e, 'collection')
return res.status(notFoundError.status).json({
error: notFoundError.message,
})
}
}