Skip to content
Snippets Groups Projects

Sprint #10

Merged Bogdan Cochior requested to merge develop into master
108 files
+ 5169
882
Compare changes
  • Side-by-side
  • Inline
Files
108
const omit = require('lodash/omit')
const config = require('config')
const get = require('lodash/get')
const statuses = config.get('statuses')
const publicStatusesPermissions = ['author', 'reviewer']
const parseAuthorsData = (coll, matchingCollPerm) => {
if (['reviewer'].includes(matchingCollPerm.permission)) {
coll.authors = coll.authors.map(a => omit(a, ['email']))
}
}
const setPublicStatuses = (coll, matchingCollPerm) => {
const status = get(coll, 'status') || 'draft'
coll.visibleStatus = statuses[status].public
if (!publicStatusesPermissions.includes(matchingCollPerm.permission)) {
coll.visibleStatus = statuses[coll.status].private
}
}
const filterRefusedInvitations = (coll, user) => {
const matchingInv = coll.invitations.find(inv => inv.userId === user.id)
if (matchingInv === undefined) return null
if (matchingInv.hasAnswer === true && !matchingInv.isAccepted) return null
return coll
}
const filterObjectData = (
collectionsPermissions = [],
object = {},
user = {},
) => {
if (object.type === 'fragment') {
const matchingCollPerm = collectionsPermissions.find(
collPerm => object.id === collPerm.fragmentId,
)
if (matchingCollPerm === undefined) return null
if (['reviewer'].includes(matchingCollPerm.permission)) {
object.files = omit(object.files, ['coverLetter'])
if (object.recommendations)
object.recommendations = object.recommendations.filter(
rec => rec.userId === user.id,
)
}
return object
}
const matchingCollPerm = collectionsPermissions.find(
collPerm => object.id === collPerm.id,
)
if (matchingCollPerm === undefined) return null
setPublicStatuses(object, matchingCollPerm)
parseAuthorsData(object, matchingCollPerm)
if (['reviewer', 'handlingEditor'].includes(matchingCollPerm.permission)) {
return filterRefusedInvitations(object, user)
}
return object
}
const getTeamsByPermissions = async (teamIds, permissions, TeamModel) => {
const teams = await Promise.all(
teamIds.map(async teamId => {
const team = await TeamModel.find(teamId)
if (permissions.includes(team.teamType.permissions)) {
return team
}
return null
}),
)
return teams.filter(Boolean)
}
module.exports = {
parseAuthorsData,
setPublicStatuses,
filterRefusedInvitations,
filterObjectData,
getTeamsByPermissions,
}