Skip to content
Snippets Groups Projects
Commit e3cf29a9 authored by Sebastian's avatar Sebastian
Browse files

feat(component-invite): delete invitation

parent 5847ad3c
No related branches found
No related tags found
1 merge request!3Cancel he invite
......@@ -15,6 +15,11 @@ const HandleInvitation = app => {
authBearer,
require('./routes/getCollectionUsers')(app.locals.models),
)
app.delete(
'/api/collections/:collectionId/users/:userId',
authBearer,
require('./routes/deleteInvitation')(app.locals.models),
)
}
module.exports = HandleInvitation
......@@ -3,6 +3,7 @@ const config = require('config')
const helpers = require('../helpers/helpers')
const teamHelper = require('../helpers/Team')
const mailService = require('pubsweet-component-mail-service')
const inviteHelper = require('../helpers/Invitation')
const configRoles = config.get('roles')
......@@ -72,7 +73,7 @@ module.exports = async (
// getting the updated user from the DB - creating a team also updates the user
user = await models.User.findByEmail(email)
user = await teamHelper.setupInvitation(user, role, collectionId, team.id)
user = await inviteHelper.setupInvitation(user, role, collectionId, team.id)
try {
await mailService.setupAssignEmail(
......
......@@ -113,26 +113,12 @@ const getMatchingTeams = (teams, TeamModel, collectionId, role) =>
})
.filter(Boolean)
const setupInvitation = async (user, role, collectionId, teamId) => {
const invitation = {
type: role,
hasAnswer: false,
isAccepted: false,
collectionId,
timestamp: Date.now(),
teamId,
}
user.invitations = user.invitations || []
user.invitations.push(invitation)
user = await user.save()
return user
}
const removeTeamMember = async (teamId, userId, TeamModel) => {
const team = await TeamModel.find(teamId)
const members = team.members.filter(member => member !== userId)
team.members = members
await TeamModel.updateProperties(team)
await team.save()
}
......@@ -151,19 +137,14 @@ const getTeamMembersByCollection = async (collectionId, role, TeamModel) => {
return members
}
const getInviteData = (invitations, collectionId, role) => {
const matchingInvitation = invitations.find(
invite => invite.type === role && invite.collectionId === collectionId,
const getTeamByGroupAndCollection = async (collectionId, role, TeamModel) => {
const teams = await TeamModel.all()
return teams.find(
team =>
team.group === role &&
team.object.type === 'collection' &&
team.object.id === collectionId,
)
let status = 'pending'
if (matchingInvitation.isAccepted) {
status = 'accepted'
} else if (matchingInvitation.hasAnswer) {
status = 'refused'
}
const { timestamp } = matchingInvitation
return { timestamp, status }
}
module.exports = {
......@@ -171,8 +152,7 @@ module.exports = {
setupEiCTeams,
setupManuscriptTeam,
getMatchingTeams,
setupInvitation,
removeTeamMember,
getTeamMembersByCollection,
getInviteData,
getTeamByGroupAndCollection,
}
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) => {
......@@ -39,7 +40,7 @@ module.exports = models => async (req, res) => {
const membersData = members.map(async member => {
const user = await models.User.find(member)
const { timestamp, status } = teamHelper.getInviteData(
const { timestamp, status } = inviteHelper.getInviteData(
user.invitations,
collectionId,
role,
......
const Chance = require('chance')
const chance = new Chance()
const heID = chance.guid()
const revID = chance.guid()
const teamIDs = {
heTeam: chance.guid(),
reviewerTeam: chance.guid(),
module.exports = {
heTeamID: heID,
reviewerTeamID: revID,
}
module.exports = { teamIDs }
const users = require('./users')
const collections = require('./collections')
const { heTeam, reviewerTeam } = require('./teamIDs')
const { heTeamID, reviewerTeamID } = require('./teamIDs')
const { standardCollection } = collections
const { editorInChief, handlingEditor, reviewer, invitedHandlingEditor } = users
const teams = {
......@@ -34,7 +33,7 @@ const teams = {
members: [handlingEditor.id, invitedHandlingEditor.id],
save: jest.fn(() => teams.heTeam),
updateProperties: jest.fn(() => teams.heTeam),
id: heTeam,
id: heTeamID,
},
reviewerTeam: {
teamType: {
......@@ -50,7 +49,7 @@ const teams = {
members: [reviewer.id],
save: jest.fn(() => teams.reviewerTeam),
updateProperties: jest.fn(() => teams.reviewerTeam),
id: reviewerTeam,
id: reviewerTeamID,
},
}
module.exports = teams
const { standardCollection } = require('./collections')
const { heTeam, reviewerTeam } = require('./teamIDs')
const { heTeamID, reviewerTeamID } = require('./teamIDs')
const users = {
admin: {
......@@ -42,10 +42,10 @@ const users = {
isAccepted: false,
collectionId: standardCollection.id,
timestamp: Date.now(),
teamId: heTeam,
teamId: heTeamID,
},
],
teams: [heTeam],
teams: [heTeamID],
save: jest.fn(() => users.handlingEditor),
editorInChief: false,
},
......@@ -78,7 +78,7 @@ const users = {
title: 'Ms',
save: jest.fn(() => users.reviewer),
isConfirmed: false,
teams: [reviewerTeam],
teams: [reviewerTeamID],
invitations: [
{
type: 'reviewer',
......@@ -86,7 +86,7 @@ const users = {
isAccepted: false,
collectionId: '123',
timestamp: Date.now(),
teamId: reviewerTeam,
teamId: reviewerTeamID,
},
],
},
......@@ -106,10 +106,10 @@ const users = {
isAccepted: false,
collectionId: standardCollection.id,
timestamp: Date.now(),
teamId: heTeam,
teamId: heTeamID,
},
],
teams: [heTeam],
teams: [heTeamID],
save: jest.fn(() => users.handlingEditor),
editorInChief: false,
},
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment