Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion config/constants/dev.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ module.exports = {
AUTH0_CLIENT_ID : process.env.AUTH0_CLIENT_ID_DEV,
domain : 'topcoder-dev.com',
DOMAIN : 'topcoder-dev.com',
CONNECT_MESSAGE_API_URL: process.env.CONNECT_MESSAGE_API_URL,
CONNECT_MESSAGE_API_URL: process.env.CONNECT_MESSAGE_API_URL,
ENV : 'DEV',

PROJECTS_API_URL : 'https://api.topcoder-dev.com',
Expand Down
290 changes: 200 additions & 90 deletions src/routes/notifications/constants/notifications.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,190 +12,300 @@ const GOTO = {
FILE_LIST: '/projects/[projectId]/specification#appDefinition-files'
}

// each notification can be displayed differently depend on WHO see them
// that's why each notification can have several rules to display which describe user roles
// NOTE for each version of notification have to repeat ALL rules, even if some rules are not changed
export const NOTIFICATIONS = [
// Outside project
{
eventType: 'notifications.connect.project.created',
type: NOTIFICATION_TYPE.NEW_PROJECT,
text: 'Your Project was created successfully',
projectRoles: [PROJECT_ROLE_OWNER],
goTo: GOTO.PROJECT_DASHBOARD
rules: [{
text: 'Your Project was created successfully',
projectRoles: [PROJECT_ROLE_OWNER],
goTo: GOTO.PROJECT_DASHBOARD
}]
},

{
eventType: 'notifications.connect.project.submittedForReview',
type: NOTIFICATION_TYPE.REVIEW_PENDING,
text: 'Your project is now in review',
projectRoles: [PROJECT_ROLE_OWNER]
},
{
eventType: 'notifications.connect.project.submittedForReview',
type: NOTIFICATION_TYPE.REVIEW_PENDING,
text: 'Project is available for review',
topcoderRoles: [ROLE_CONNECT_MANAGER, ROLE_ADMINISTRATOR],
goTo: GOTO.PROJECT_SPECIFICATION
rules: [{
text: 'Your project is now in review',
projectRoles: [PROJECT_ROLE_OWNER]
}, {
text: 'Project is available for review',
topcoderRoles: [ROLE_CONNECT_MANAGER, ROLE_ADMINISTRATOR],
goTo: GOTO.PROJECT_SPECIFICATION
}]
},

{
eventType: 'notifications.connect.project.approved',
type: NOTIFICATION_TYPE.UPDATES,
text: 'Your project was approved, work would soon start',
projectRoles: [PROJECT_ROLE_OWNER]
},
{
eventType: 'notifications.connect.project.approved',
type: NOTIFICATION_TYPE.UPDATES,
text: 'Project is available for pickup',
topcoderRoles: [ROLE_CONNECT_COPILOT, ROLE_ADMINISTRATOR],
goTo: GOTO.PROJECT_DASHBOARD
},
{
eventType: 'notifications.connect.project.approved',
type: NOTIFICATION_TYPE.UPDATES,
text: 'Project was approved',
projectRoles: [PROJECT_ROLE_COPILOT, PROJECT_ROLE_MANAGER],
goTo: GOTO.PROJECT_DASHBOARD
rules: [{
text: 'Your project was approved, work would soon start',
projectRoles: [PROJECT_ROLE_OWNER]
}, {
text: 'Project is available for pickup',
topcoderRoles: [ROLE_CONNECT_COPILOT, ROLE_ADMINISTRATOR],
goTo: GOTO.PROJECT_DASHBOARD
}, {
text: 'Project was approved',
projectRoles: [PROJECT_ROLE_COPILOT, PROJECT_ROLE_MANAGER],
goTo: GOTO.PROJECT_DASHBOARD
}]
},

{
eventType: 'notifications.connect.project.paused',
type: NOTIFICATION_TYPE.REVIEW_PENDING,
text: 'Your project was paused',
projectRoles: [PROJECT_ROLE_OWNER, PROJECT_ROLE_COPILOT, PROJECT_ROLE_MANAGER],
goTo: GOTO.PROJECT_DASHBOARD
},
{
eventType: 'notifications.connect.project.paused',
type: NOTIFICATION_TYPE.REVIEW_PENDING,
text: 'A project was paused',
topcoderRoles: [ROLE_ADMINISTRATOR],
goTo: GOTO.PROJECT_DASHBOARD
rules: [{
text: 'Your project was paused',
projectRoles: [PROJECT_ROLE_OWNER, PROJECT_ROLE_COPILOT, PROJECT_ROLE_MANAGER],
goTo: GOTO.PROJECT_DASHBOARD
}, {
text: 'A project was paused',
topcoderRoles: [ROLE_ADMINISTRATOR],
goTo: GOTO.PROJECT_DASHBOARD
}]
},

{
eventType: 'notifications.connect.project.completed',
type: NOTIFICATION_TYPE.UPDATES,
text: 'Your project completed successfully!',
projectRoles: [PROJECT_ROLE_OWNER, PROJECT_ROLE_COPILOT, PROJECT_ROLE_MANAGER, PROJECT_ROLE_MEMBER],
goTo: GOTO.PROJECT_DASHBOARD
},
{
eventType: 'notifications.connect.project.completed',
type: NOTIFICATION_TYPE.UPDATES,
text: 'A project was completed',
topcoderRoles: [ROLE_ADMINISTRATOR],
goTo: GOTO.PROJECT_DASHBOARD
rules: [{
text: 'Your project completed successfully!',
projectRoles: [PROJECT_ROLE_OWNER, PROJECT_ROLE_COPILOT, PROJECT_ROLE_MANAGER, PROJECT_ROLE_MEMBER],
goTo: GOTO.PROJECT_DASHBOARD
}, {
text: 'A project was completed',
topcoderRoles: [ROLE_ADMINISTRATOR],
goTo: GOTO.PROJECT_DASHBOARD
}]
},

{
eventType: 'notifications.connect.project.canceled',
type: NOTIFICATION_TYPE.WARNING,
text: 'Your project was canceled. If you think that was a mistake...',
projectRoles: [PROJECT_ROLE_OWNER],
goTo: GOTO.PROJECT_DASHBOARD
rules: [{
text: 'Your project was canceled. If you think that was a mistake...',
projectRoles: [PROJECT_ROLE_OWNER],
goTo: GOTO.PROJECT_DASHBOARD
}]
},

// User management
{
eventType: 'notifications.connect.project.member.joined',
type: NOTIFICATION_TYPE.MEMBER_ADDED,
text: 'A new team member joined your project',
projectRoles: [PROJECT_ROLE_OWNER, PROJECT_ROLE_COPILOT, PROJECT_ROLE_MANAGER],
goTo: GOTO.PROJECT_DASHBOARD
rules: [{
text: 'A new team member joined your project',
projectRoles: [PROJECT_ROLE_OWNER, PROJECT_ROLE_COPILOT, PROJECT_ROLE_MANAGER],
goTo: GOTO.PROJECT_DASHBOARD
}]
},

{
eventType: 'notifications.connect.project.member.left',
type: NOTIFICATION_TYPE.WARNING,
text: '<strong>[userHandle]</strong> left a project',
projectRoles: [PROJECT_ROLE_MANAGER]
rules: [{
text: '<strong>[userHandle]</strong> left a project',
projectRoles: [PROJECT_ROLE_MANAGER]
}]
}, {
version: 2,
eventType: 'notifications.connect.project.member.left',
type: NOTIFICATION_TYPE.WARNING,
rules: [{
text: '<strong>[userFullName]</strong> left a project',
projectRoles: [PROJECT_ROLE_MANAGER]
}]
},

{
eventType: 'notifications.connect.project.member.removed',
type: NOTIFICATION_TYPE.WARNING,
text: '<strong>[userHandle]</strong> was removed from project',
projectRoles: [PROJECT_ROLE_MANAGER]
rules: [{
text: '<strong>[userHandle]</strong> was removed from project',
projectRoles: [PROJECT_ROLE_MANAGER]
}, {
text: 'You were removed from a project',
toUserHandle: true
}]
}, {
version: 2,
eventType: 'notifications.connect.project.member.removed',
type: NOTIFICATION_TYPE.WARNING,
text: 'You were removed from a project',
toUserHandle: true
rules: [{
text: '<strong>[userFullName]</strong> was removed from project',
projectRoles: [PROJECT_ROLE_MANAGER]
}, {
text: 'You were removed from a project',
toUserHandle: true
}]
},

{
eventType: 'notifications.connect.project.member.assignedAsOwner',
type: NOTIFICATION_TYPE.MEMBER_ADDED,
text: 'You are now the owner of project',
toUserHandle: true,
goTo: GOTO.PROJECT_DASHBOARD
rules: [{
text: 'You are now the owner of project',
toUserHandle: true,
goTo: GOTO.PROJECT_DASHBOARD
}, {
text: 'Project owner was changed to <strong>[userHandle]</strong>',
projectRoles: [PROJECT_ROLE_COPILOT, PROJECT_ROLE_MANAGER],
goTo: GOTO.PROJECT_DASHBOARD
}]
}, {
version: 2,
eventType: 'notifications.connect.project.member.assignedAsOwner',
type: NOTIFICATION_TYPE.MEMBER_ADDED,
text: 'Project owner was changed to <strong>[userHandle]</strong>',
projectRoles: [PROJECT_ROLE_COPILOT, PROJECT_ROLE_MANAGER],
goTo: GOTO.PROJECT_DASHBOARD
rules: [{
text: 'You are now the owner of project',
toUserHandle: true,
goTo: GOTO.PROJECT_DASHBOARD
}, {
text: 'Project owner was changed to <strong>[userFullName]</strong>',
projectRoles: [PROJECT_ROLE_COPILOT, PROJECT_ROLE_MANAGER],
goTo: GOTO.PROJECT_DASHBOARD
}]
},

{
eventType: 'notifications.connect.project.member.copilotJoined',
type: NOTIFICATION_TYPE.MEMBER_ADDED,
text: 'A copilot joined your project team',
projectRoles: [PROJECT_ROLE_OWNER, PROJECT_ROLE_COPILOT, PROJECT_ROLE_MANAGER],
goTo: GOTO.PROJECT_DASHBOARD
rules: [{
text: 'A copilot joined your project team',
projectRoles: [PROJECT_ROLE_OWNER, PROJECT_ROLE_COPILOT, PROJECT_ROLE_MANAGER],
goTo: GOTO.PROJECT_DASHBOARD
}]
},

{
eventType: 'notifications.connect.project.member.managerJoined',
type: NOTIFICATION_TYPE.MEMBER_ADDED,
text: 'A manager joined your project team',
projectRoles: [PROJECT_ROLE_OWNER, PROJECT_ROLE_COPILOT, PROJECT_ROLE_MANAGER],
goTo: GOTO.PROJECT_DASHBOARD
rules: [{
text: 'A manager joined your project team',
projectRoles: [PROJECT_ROLE_OWNER, PROJECT_ROLE_COPILOT, PROJECT_ROLE_MANAGER],
goTo: GOTO.PROJECT_DASHBOARD
}]
},

{
eventType: 'notifications.connect.project.topic.created',
type: NOTIFICATION_TYPE.NEW_POSTS,
text: '<strong>[userHandle]</strong> created a new post ',
projectRoles: [PROJECT_ROLE_OWNER, PROJECT_ROLE_COPILOT, PROJECT_ROLE_MANAGER, PROJECT_ROLE_MEMBER],
goTo: GOTO.TOPIC
rules: [{
text: '<strong>[userHandle]</strong> created a new post ',
projectRoles: [PROJECT_ROLE_OWNER, PROJECT_ROLE_COPILOT, PROJECT_ROLE_MANAGER, PROJECT_ROLE_MEMBER],
goTo: GOTO.TOPIC
}]
}, {
version: 2,
eventType: 'notifications.connect.project.topic.created',
type: NOTIFICATION_TYPE.NEW_POSTS,
rules: [{
text: '<strong>[userFullName]</strong> created a new post ',
projectRoles: [PROJECT_ROLE_OWNER, PROJECT_ROLE_COPILOT, PROJECT_ROLE_MANAGER, PROJECT_ROLE_MEMBER],
goTo: GOTO.TOPIC
}]
},

{
eventType: 'notifications.connect.project.post.created',
type: NOTIFICATION_TYPE.NEW_POSTS,
text: '<strong>[userHandle]</strong> responded to your post',
toTopicStarter: true,
goTo: GOTO.POST
rules: [{
text: '<strong>[userHandle]</strong> responded to your post',
toTopicStarter: true,
goTo: GOTO.POST
}, {
text: '<strong>[userHandle]</strong> responded to a post',
projectRoles: [PROJECT_ROLE_OWNER, PROJECT_ROLE_COPILOT, PROJECT_ROLE_MANAGER, PROJECT_ROLE_MEMBER],
goTo: GOTO.POST
}]
}, {
version: 2,
eventType: 'notifications.connect.project.post.created',
type: NOTIFICATION_TYPE.NEW_POSTS,
text: '<strong>[userHandle]</strong> responded to a post',
projectRoles: [PROJECT_ROLE_OWNER, PROJECT_ROLE_COPILOT, PROJECT_ROLE_MANAGER, PROJECT_ROLE_MEMBER],
goTo: GOTO.POST
rules: [{
text: '<strong>[userFullName]</strong> responded to your post',
toTopicStarter: true,
goTo: GOTO.POST
}, {
text: '<strong>[userFullName]</strong> responded to a post',
projectRoles: [PROJECT_ROLE_OWNER, PROJECT_ROLE_COPILOT, PROJECT_ROLE_MANAGER, PROJECT_ROLE_MEMBER],
goTo: GOTO.POST
}]
},

{
eventType: 'notifications.connect.project.linkCreated',
type: NOTIFICATION_TYPE.NEW_POSTS,
text: '<strong>[userHandle]</strong> added to your project',
projectRoles: [PROJECT_ROLE_OWNER, PROJECT_ROLE_COPILOT, PROJECT_ROLE_MANAGER, PROJECT_ROLE_MEMBER],
goTo: GOTO.PROJECT_DASHBOARD
rules: [{
text: '<strong>[userHandle]</strong> added to your project',
projectRoles: [PROJECT_ROLE_OWNER, PROJECT_ROLE_COPILOT, PROJECT_ROLE_MANAGER, PROJECT_ROLE_MEMBER],
goTo: GOTO.PROJECT_DASHBOARD
}]
}, {
version: 2,
eventType: 'notifications.connect.project.linkCreated',
type: NOTIFICATION_TYPE.NEW_POSTS,
rules: [{
text: '<strong>[userFullName]</strong> added to your project',
projectRoles: [PROJECT_ROLE_OWNER, PROJECT_ROLE_COPILOT, PROJECT_ROLE_MANAGER, PROJECT_ROLE_MEMBER],
goTo: GOTO.PROJECT_DASHBOARD
}]
},

{
eventType: 'notifications.connect.project.fileUploaded',
type: NOTIFICATION_TYPE.NEW_POSTS,
text: '<strong>[userHandle]</strong> added a new file',
projectRoles: [PROJECT_ROLE_OWNER, PROJECT_ROLE_COPILOT, PROJECT_ROLE_MANAGER, PROJECT_ROLE_MEMBER],
goTo: GOTO.FILE_LIST
rules: [{
text: '<strong>[userHandle]</strong> added a new file',
projectRoles: [PROJECT_ROLE_OWNER, PROJECT_ROLE_COPILOT, PROJECT_ROLE_MANAGER, PROJECT_ROLE_MEMBER],
goTo: GOTO.FILE_LIST
}]
}, {
version: 2,
eventType: 'notifications.connect.project.fileUploaded',
type: NOTIFICATION_TYPE.NEW_POSTS,
rules: [{
text: '<strong>[userFullName]</strong> added a new file',
projectRoles: [PROJECT_ROLE_OWNER, PROJECT_ROLE_COPILOT, PROJECT_ROLE_MANAGER, PROJECT_ROLE_MEMBER],
goTo: GOTO.FILE_LIST
}]
},

{
eventType: 'notifications.connect.project.specificationModified',
type: NOTIFICATION_TYPE.UPDATES,
text: '<strong>[userHandle]</strong> updated the project specification',
projectRoles: [PROJECT_ROLE_OWNER, PROJECT_ROLE_COPILOT, PROJECT_ROLE_MANAGER, PROJECT_ROLE_MEMBER],
goTo: GOTO.PROJECT_SPECIFICATION
rules: [{
text: '<strong>[userHandle]</strong> updated the project specification',
projectRoles: [PROJECT_ROLE_OWNER, PROJECT_ROLE_COPILOT, PROJECT_ROLE_MANAGER, PROJECT_ROLE_MEMBER],
goTo: GOTO.PROJECT_SPECIFICATION
}]
}, {
version: 2,
eventType: 'notifications.connect.project.specificationModified',
type: NOTIFICATION_TYPE.UPDATES,
rules: [{
text: '<strong>[userFullName]</strong> updated the project specification',
projectRoles: [PROJECT_ROLE_OWNER, PROJECT_ROLE_COPILOT, PROJECT_ROLE_MANAGER, PROJECT_ROLE_MEMBER],
goTo: GOTO.PROJECT_SPECIFICATION
}]
}
]

// create a flat list of all possible notifications (expand notification rules)
export const NOTIFICATION_RULES = (() => {
const notificationRules = []

NOTIFICATIONS.forEach((notification) => {
notification.rules.forEach((notificationRule) => {
notificationRules.push({ ...notification, ...notificationRule })
})
})

return notificationRules
})()
Loading