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,
 
}