Skip to content

Commit 5495cc0

Browse files
author
Parth Shah
committed
Merge branch 'release/v1.1.1'
2 parents cd1b36b + a130fbf commit 5495cc0

File tree

19 files changed

+464
-460
lines changed

19 files changed

+464
-460
lines changed

package.json

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
{
22
"name": "tc-projects-service",
3-
"version": "1.0.0",
3+
"version": "1.1.1",
44
"description": "Projects microservice",
55
"main": "index.js",
66
"scripts": {
77
"test": "NODE_ENV=test ./node_modules/.bin/mocha --compilers js:babel-core/register $(find src -path '*spec.js*')",
8-
"dev": "PORT=8001 nodemon -w src --exec \"babel-node src --presets es2015\" | ./node_modules/.bin/bunyan",
8+
"live-test": "NODE_ENV=test ./node_modules/.bin/mocha -w --compilers js:babel-core/register $(find src -path '*spec.js*')",
9+
"dev": "NODE_ENV=local PORT=8001 nodemon -w src --exec \"babel-node src --presets es2015\" | ./node_modules/.bin/bunyan",
910
"build": "babel src -d dist --presets es2015",
1011
"start": "node dist",
1112
"prestart": "npm run -s build",
@@ -43,6 +44,7 @@
4344
}
4445
},
4546
"dependencies": {
47+
"amqplib": "^0.5.1",
4648
"app-module-path": "^1.0.7",
4749
"bluebird": "^3.4.1",
4850
"body-parser": "^1.15.0",
@@ -53,7 +55,6 @@
5355
"express-list-routes": "^0.1.4",
5456
"express-request-id": "^1.1.0",
5557
"express-validation": "^0.6.0",
56-
"jackrabbit": "^4.3.0",
5758
"joi": "^8.0.5",
5859
"lodash": "^4.16.4",
5960
"newrelic": "^1.27.2",

src/app.js

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -74,12 +74,6 @@ permissions()
7474
app.use(router)
7575
app.routerRef = router
7676

77-
// =======================
78-
// Register events handler
79-
// =======================
80-
require('./events/projects')(app, logger)
81-
require('./events/projectMembers')(app, logger)
82-
8377
// =======================
8478
// Initialize services
8579
// =======================

src/events/index.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
'use strict'
2+
import {
3+
EVENT
4+
} from '../constants'
5+
import {
6+
projectCreatedHandler
7+
} from './projects'
8+
import {
9+
projectMemberAddedHandler,
10+
projectMemberRemovedHandler
11+
} from './projectMembers'
12+
13+
export const handlers = {
14+
[EVENT.ROUTING_KEY.PROJECT_DRAFT_CREATED]: projectCreatedHandler,
15+
[EVENT.ROUTING_KEY.PROJECT_MEMBER_ADDED]: projectMemberAddedHandler,
16+
[EVENT.ROUTING_KEY.PROJECT_MEMBER_REMOVED]: projectMemberRemovedHandler
17+
}

src/events/projectMembers/index.js

Lines changed: 94 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -1,107 +1,112 @@
11
'use strict'
22

33
import _ from 'lodash'
4-
import { EVENT, PROJECT_MEMBER_ROLE } from '../../constants'
4+
import {
5+
EVENT,
6+
PROJECT_MEMBER_ROLE
7+
} from '../../constants'
58
import util from '../../util'
69
import models from '../../models'
710
import directProject from '../../services/directProject'
811

912

10-
module.exports = (app, logger) => {
11-
// Handle internal events
12-
const internalEvents = [
13-
EVENT.INTERNAL.PROJECT_MEMBER_ADDED,
14-
EVENT.INTERNAL.PROJECT_MEMBER_REMOVED
15-
]
13+
const projectMemberAddedHandler = (logger, msg, channel) => {
14+
const origRequestId = msg.properties.correlationId
15+
const newMember = JSON.parse(msg.content.toString())
1616

17-
// Publish messages to the queue
18-
_.map(internalEvents, (evt) => {
19-
app.on(evt, ({payload, props}) => {
20-
logger.debug('handling ', evt)
21-
let key = evt.substring(evt.indexOf('.') + 1)
22-
return app.services.pubsub.publish(key, payload, props)
23-
})
24-
})
25-
26-
27-
// EXTERNAL events
28-
app.on(EVENT.EXTERNAL.PROJECT_MEMBER_ADDED, (msg, next) => {
29-
const origRequestId = msg.properties.correlationId
30-
logger = logger.child({requestId: origRequestId})
31-
let newMember = JSON.parse(msg.content.toString())
32-
logger.debug(`received msg '${EVENT.EXTERNAL.PROJECT_MEMBER_ADDED}'`, newMember)
33-
34-
if (newMember.role === PROJECT_MEMBER_ROLE.COPILOT) {
35-
// Add co-pilot when a co-pilot is added to a project
36-
return models.Project.getDirectProjectId(newMember.projectId)
37-
.then(directProjectId => {
38-
if (directProjectId) {
39-
// retrieve system user token
40-
return util.getSystemUserToken(logger)
41-
.then(token => {
42-
const req = {
43-
id: origRequestId,
44-
log: logger,
45-
headers: { authorization: `Bearer ${token}` }
17+
if (newMember.role === PROJECT_MEMBER_ROLE.COPILOT) {
18+
// Add co-pilot when a co-pilot is added to a project
19+
return models.Project.getDirectProjectId(newMember.projectId)
20+
.then(directProjectId => {
21+
if (directProjectId) {
22+
// retrieve system user token
23+
return util.getSystemUserToken(logger)
24+
.then(token => {
25+
const req = {
26+
id: origRequestId,
27+
log: logger,
28+
headers: {
29+
authorization: `Bearer ${token}`
4630
}
47-
return directProject.addCopilot(req, directProjectId, {
31+
}
32+
return directProject.addCopilot(req, directProjectId, {
4833
copilotUserId: newMember.userId
4934
})
50-
.then((resp) => {
51-
next()
52-
})
53-
})
54-
.catch(err => {
55-
logger.error('Error caught while adding co-pilot from direct', err)
56-
return next(err)
57-
})
58-
} else {
59-
next()
60-
}
61-
})
62-
.catch(err => next(err))
63-
} else {
64-
// nothing to do
65-
next()
66-
}
67-
})
35+
.then(resp => {
36+
logger.debug('added copilot to direct')
37+
// acknowledge
38+
channel.ack(msg)
39+
})
40+
})
41+
.catch(err => {
42+
logger.error('Error caught while adding co-pilot from direct', err)
43+
channel.nack(msg, false, false)
44+
})
45+
} else {
46+
logger.info('project not associated with a direct project, skipping')
47+
ack(msg)
48+
}
49+
})
50+
.catch(err => {
51+
// if the message has been redelivered dont attempt to reprocess it
52+
logger.error('Error retrieving project', err, msg)
53+
channel.nack(msg, false, !msg.fields.redelivered)
54+
})
55+
} else {
56+
// nothing to do
57+
channel.ack(msg)
58+
}
59+
}
6860

69-
app.on(EVENT.EXTERNAL.PROJECT_MEMBER_REMOVED, (msg, next) => {
70-
const origRequestId = msg.properties.correlationId
71-
const member = JSON.parse(msg.content.toString())
72-
logger = logger.child({requestId: origRequestId})
73-
logger.debug(`received msg '${EVENT.EXTERNAL.PROJECT_MEMBER_REMOVED}'`, member)
61+
const projectMemberRemovedHandler = (logger, msg, channel) => {
62+
const origRequestId = msg.properties.correlationId
63+
const member = JSON.parse(msg.content.toString())
7464

75-
if (member.role === PROJECT_MEMBER_ROLE.COPILOT) {
76-
// Add co-pilot when a co-pilot is added to a project
77-
return models.Project.getDirectProjectId(member.projectId)
78-
.then(directProjectId => {
79-
if (directProjectId) {
80-
// retrieve system user token
81-
return util.getSystemUserToken(logger)
82-
.then(token => {
83-
const req = {
84-
id: origRequestId,
85-
log: logger,
86-
headers: { authorization: `Bearer ${token}` }
65+
if (member.role === PROJECT_MEMBER_ROLE.COPILOT) {
66+
// Add co-pilot when a co-pilot is added to a project
67+
return models.Project.getDirectProjectId(member.projectId)
68+
.then(directProjectId => {
69+
if (directProjectId) {
70+
// retrieve system user token
71+
return util.getSystemUserToken(logger)
72+
.then(token => {
73+
const req = {
74+
id: origRequestId,
75+
log: logger,
76+
headers: {
77+
authorization: `Bearer ${token}`
8778
}
88-
return directProject.deleteCopilot(req, directProjectId, {
79+
}
80+
return directProject.deleteCopilot(req, directProjectId, {
8981
copilotUserId: member.userId
9082
})
91-
})
92-
.catch(err => {
93-
logger.error('Error caught while removing co-pilot from direct', err)
94-
return next(err)
95-
})
96-
} else {
97-
// nothing to do
98-
next()
99-
}
100-
})
101-
.catch(err => next(err))
102-
} else {
103-
// nothing to do
104-
next()
105-
}
106-
})
83+
.then(resp => {
84+
logger.debug('removed copilot from direct')
85+
// acknowledge
86+
channel.ack(msg)
87+
})
88+
})
89+
.catch(err => {
90+
logger.error('Error caught while removing co-pilot from direct', err)
91+
channel.nack(msg, false, false)
92+
})
93+
} else {
94+
logger.info('project not associated with a direct project, skipping')
95+
channel.ack(msg)
96+
}
97+
})
98+
.catch(err => {
99+
// if the message has been redelivered dont attempt to reprocess it
100+
logger.error('Error retrieving project', err, msg)
101+
channel.nack(msg, false, !msg.fields.redelivered)
102+
})
103+
} else {
104+
// nothing to do
105+
channel.ack(msg)
106+
}
107+
}
108+
109+
module.exports = {
110+
projectMemberAddedHandler,
111+
projectMemberRemovedHandler
107112
}

src/events/projects/create.event.js

Lines changed: 0 additions & 90 deletions
This file was deleted.

0 commit comments

Comments
 (0)