Skip to content

Commit fea2bbb

Browse files
author
Parth Shah
committed
2 parents d9c2b08 + 484505a commit fea2bbb

File tree

18 files changed

+171
-19
lines changed

18 files changed

+171
-19
lines changed

.ebextensions/01-environment-variables.config

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,3 +53,27 @@ option_settings:
5353
- namespace: aws:elasticbeanstalk:application:environment
5454
option_name: AWS_SECRET_ACCESS_KEY
5555
value: TBD
56+
- namespace: aws:elasticbeanstalk:application:environment
57+
option_name: SALESFORCE_WEB_TO_LEAD_URL
58+
value: https://www.salesforce.com/servlet/servlet.WebToLead?encoding=UTF-8
59+
- namespace: aws:elasticbeanstalk:application:environment
60+
option_name: SALESFORCE_ORG_ID
61+
value: TBD
62+
- namespace: aws:elasticbeanstalk:application:environment
63+
option_name: SALESFORCE_LEAD_PROJECT_NAME
64+
value: TBD
65+
- namespace: aws:elasticbeanstalk:application:environment
66+
option_name: SALESFORCE_LEAD_PROJECT_DESC
67+
value: TBD
68+
- namespace: aws:elasticbeanstalk:application:environment
69+
option_name: SALESFORCE_LEAD_PROJECT_LINK
70+
value: TBD
71+
- namespace: aws:elasticbeanstalk:application:environment
72+
option_name: SALESFORCE_LEAD_PROJECT_ID
73+
value: TBD
74+
- namespace: aws:elasticbeanstalk:application:environment
75+
option_name: CONNECT_PROJECTS_URL
76+
value: TBD
77+
- namespace: aws:elasticbeanstalk:application:environment
78+
option_name: USER_SERVICE_URL
79+
value: TBD

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ config/local.js
66
logs
77
*.log
88
npm-debug.log*
9+
.DS_Store
910

1011
dist/
1112

@@ -42,3 +43,4 @@ jspm_packages
4243
!.elasticbeanstalk/config.yml
4344
!.elasticbeanstalk/*.cfg.yml
4445
!.elasticbeanstalk/*.global.yml
46+
.DS_Store

.nvmrc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
5.9
1+
v6.9.4

Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM node:5.10.1
1+
FROM node:6.9.4
22
LABEL version="1.0"
33
LABEL description="Projects microservice"
44

@@ -9,6 +9,7 @@ RUN apt-get update && \
99
RUN apt-get install -y \
1010
ssh \
1111
python \
12+
python-dev \
1213
python-pip
1314

1415
RUN pip install awscli
@@ -23,7 +24,6 @@ COPY . /usr/src/app
2324
# Install app dependencies
2425
RUN npm install
2526

26-
2727
EXPOSE 3000
2828

2929
CMD ["npm", "start"]

config/custom-environment-variables.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,16 @@
1414
"topicServiceEndpoint": "TOPIC_SERVICE_ENDPOINT",
1515
"systemUserClientId": "SYSTEM_USER_CLIENT_ID",
1616
"systemUserClientSecret": "SYSTEM_USER_CLIENT_SECRET",
17+
"userServiceUrl": "USER_SERVICE_URL",
18+
"connectProjectsUrl": "CONNECT_PROJECTS_URL",
19+
"salesforceLead" : {
20+
"webToLeadUrl": "SALESFORCE_WEB_TO_LEAD_URL",
21+
"orgId" : "SALESFORCE_ORG_ID",
22+
"projectNameFieldId": "SALESFORCE_LEAD_PROJECT_NAME",
23+
"projectDescFieldId": "SALESFORCE_LEAD_PROJECT_DESC",
24+
"projectLinkFieldId": "SALESFORCE_LEAD_PROJECT_LINK",
25+
"projectIdFieldId" : "SALESFORCE_LEAD_PROJECT_ID"
26+
},
1727
"dbConfig": {
1828
"masterUrl": "DB_MASTER_URL",
1929
"maxPoolSize": "DB_MAX_POOL_SIZE",

config/default.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,16 @@
1818
"projectAttachmentPathSuffix": "attachments",
1919
"systemUserClientId": "",
2020
"systemUserClientSecret": "",
21+
"userServiceUrl": "",
22+
"connectProjectUrl":"",
23+
"salesforceLead" : {
24+
"webToLeadUrl": "https://www.salesforce.com/servlet/servlet.WebToLead?encoding=UTF-8",
25+
"orgId": "",
26+
"projectNameFieldId": "",
27+
"projectDescFieldId": "",
28+
"projectLinkFieldId": "",
29+
"projectIdFieldId" : ""
30+
},
2131
"dbConfig": {
2232
"masterUrl": "",
2333
"maxPoolSize": 50,

config/sample.local.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,16 @@ if (process.env.NODE_ENV === 'test') {
1313
"fileServiceEndpoint": "https://api.topcoder-dev.com/v3/files/",
1414
"topicServiceEndpoint": "https://api.topcoder-dev.com/v4/topics/",
1515
"directProjectServiceEndpoint": "https://api.topcoder-dev.com/v3/direct",
16+
"userServiceUrl": "https://api.topcoder-dev.com/v3/users",
17+
"connectProjectsUrl": "https://connect.topcoder-dev.com/projects/",
18+
"salesforceLead" : {
19+
"webToLeadUrl": 'https://www.salesforce.com/servlet/servlet.WebToLead?encoding=UTF-8',
20+
"orgId": "00D2C0000000dO6",
21+
"projectNameFieldId": "title",
22+
"projectDescFieldId": "description",
23+
"projectLinkFieldId": "URL",
24+
"projectIdFieldId" : "00N2C000000Vxxx"
25+
},
1626
"dbConfig": {
1727
"masterUrl": "postgres://coder:mysecretpassword@dockerhost:5432/projectsdb",
1828
"maxPoolSize": 50,

local/docker-compose.yml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@ postgres:
55
environment:
66
- POSTGRES_PASSWORD=mysecretpassword
77
- POSTGRES_USER=coder
8-
- POSTGRES_DB=tagsdb
9-
elasticsearch:
10-
image: "elasticsearch:1.5.2"
11-
ports:
12-
- "9200:9200"
13-
- "9300:9300"
8+
- POSTGRES_DB=projectsdb
9+
#elasticsearch:
10+
# image: "elasticsearch:2"
11+
# ports:
12+
# - "9200:9200"
13+
# - "9300:9300"
1414
redis:
1515
image: redis:2.8
1616
ports:

package.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,11 @@
33
"version": "1.1.2",
44
"description": "Projects microservice",
55
"main": "index.js",
6+
"engines": {
7+
"node": ">=6.9"
8+
},
69
"scripts": {
7-
"test": "NODE_ENV=test ./node_modules/.bin/mocha --compilers js:babel-core/register $(find src -path '*spec.js*')",
10+
"test": "NODE_ENV=test ./node_modules/.bin/istanbul cover ./node_modules/mocha/bin/_mocha -- --compilers js:babel-core/register $(find src -path '*spec.js*')",
811
"live-test": "NODE_ENV=test ./node_modules/.bin/mocha -w --compilers js:babel-core/register $(find src -path '*spec.js*')",
912
"dev": "NODE_ENV=local PORT=8001 nodemon -w src --exec \"babel-node src --presets es2015\" | ./node_modules/.bin/bunyan",
1013
"build": "babel src -d dist --presets es2015",

src/events/projects/index.js

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import {
33
EVENT
44
} from '../../constants'
55
import util from '../../util'
6+
import config from 'config'
7+
import querystring from 'querystring'
68
import topicService from '../../services/topicService'
79

810
const _addProjectStatus = (req, logger, project) => {
@@ -29,6 +31,41 @@ const _addProjectStatus = (req, logger, project) => {
2931
return true
3032
})
3133
}
34+
35+
/**
36+
* Creates a lead in salesforce for the connect project.
37+
*
38+
* @param token JWT token of the admin user which would be used to fetch user info
39+
* @param logger logger to be used for logging
40+
* @param project connect project for which lead is to be created
41+
*
42+
* @return promise which resolves to the HTML content where salesforce web to lead form redirects
43+
*/
44+
const _addSalesforceLead = (token, logger, project) => {
45+
logger.debug('Getting topcoder user with userId: ', project.createdBy)
46+
return util.getTopcoderUser(project.createdBy, token, logger)
47+
.then((userInfo) => {
48+
var httpClient = util.getHttpClient({id: 2,log : logger})
49+
httpClient.defaults.timeout = 3000
50+
httpClient.defaults.headers.common['Content-Type'] = 'application/x-www-form-urlencoded'
51+
var data = {
52+
oid: config.get('salesforceLead.orgId'),
53+
first_name: userInfo.firstName,
54+
last_name: userInfo.lastName,
55+
email: userInfo.email
56+
}
57+
data[config.get('salesforceLead.projectIdFieldId')] = project.id
58+
data[config.get('salesforceLead.projectNameFieldId')] = project.name
59+
data[config.get('salesforceLead.projectDescFieldId')] = project.description
60+
data[config.get('salesforceLead.projectLinkFieldId')] = config.get('connectProjectsUrl') + project.id
61+
var body = querystring.stringify(data)
62+
var webToLeadUrl = config.get('salesforceLead.webToLeadUrl')
63+
logger.debug('initiaiting salesforce web to lead call for project: ', project.id)
64+
return httpClient.post(webToLeadUrl, body)
65+
})
66+
}
67+
68+
3269
/**
3370
* Handler for project creation event
3471
* @param {[type]} logger logger to log along with trace id
@@ -46,10 +83,13 @@ const projectCreatedHandler = (logger, msg, channel) => {
4683
authorization: `Bearer ${token}`
4784
}
4885
}
49-
return _addProjectStatus(req, logger, project)
86+
return Promise.all([
87+
_addProjectStatus(req, logger, project),
88+
_addSalesforceLead(token, logger, project).then((resp)=> logger.debug('web to lead response:', resp.status))
89+
]);
5090
})
5191
.then(() => {
52-
channel.ack(msg, true)
92+
channel.ack(msg)
5393
})
5494
.catch(err => {
5595
// don't requeue for now

0 commit comments

Comments
 (0)