Skip to content

Commit d6de5f2

Browse files
author
vikasrohit
authored
Merge pull request #270 from topcoder-platform/feature/handle-errors-seed-metadata
handle errors in seed metadata script
2 parents 346ec30 + 7c206b9 commit d6de5f2

File tree

2 files changed

+54
-38
lines changed

2 files changed

+54
-38
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ Microservice to manage CRUD operations for all things Projects.
3434
* Local config
3535

3636
There are two prepared configs:
37-
- if you have M2M environment variables provided: `AUTH0_CLIENT_ID`, `AUTH0_CLIENT_SECRET`, `AUTH0_URL`, `AUTH0_AUDIENCE` then use `config/m2m.local.js`
37+
- if you have M2M environment variables provided: `AUTH0_CLIENT_ID`, `AUTH0_CLIENT_SECRET`, `AUTH0_URL`, `AUTH0_AUDIENCE`, `AUTH0_PROXY_SERVER_URL` then use `config/m2m.local.js`
3838
- otherwise use `config/mock.local.js`.
3939

4040
To apply any of these config copy it to `config/local.js`:
@@ -57,7 +57,7 @@ Microservice to manage CRUD operations for all things Projects.
5757

5858
Explanation of configs:
5959
- `config/mock.local.js` - Use local `mock-services` from docker to mock Identity and Member services instead of using deployed at Topcoder dev environment.
60-
- `config/m2m.local.js` - Use Identity and Member services deployed at Topcoder dev environment. This can be used only if you have M2M environment variables (`AUTH0_CLIENT_ID`, `AUTH0_CLIENT_SECRET`, `AUTH0_URL`, `AUTH0_AUDIENCE`) provided to access Topcoder DEV environment services.
60+
- `config/m2m.local.js` - Use Identity and Member services deployed at Topcoder dev environment. This can be used only if you have M2M environment variables (`AUTH0_CLIENT_ID`, `AUTH0_CLIENT_SECRET`, `AUTH0_URL`, `AUTH0_AUDIENCE`, `AUTH0_PROXY_SERVER_URL`) provided to access Topcoder DEV environment services.
6161

6262
* Create tables in DB
6363
```bash

migrations/seedMetadata.js

Lines changed: 52 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ const Promise = require('bluebird');
55

66
if (!process.env.CONNECT_USER_TOKEN) {
77
console.error('This script requires environment variable CONNECT_USER_TOKEN to be defined. Login to http://connect.topcoder-dev.com and get your user token from the requests headers.')
8-
exit(1);
8+
process.exit(1);
99
}
1010

1111
// we need to know any logged in Connect user token to retrieve data from DEV
@@ -16,67 +16,83 @@ var targetUrl = 'http://localhost:8001/v4/';
1616
var destUrl = targetUrl + 'projects/';
1717
var destTimelines = targetUrl;
1818

19+
console.log('Getting metadata from DEV environment...');
20+
1921
axios.get(url, {
2022
headers: {
2123
'Content-Type': 'application/json',
2224
'Authorization': `Bearer ${CONNECT_USER_TOKEN}`
2325
}
2426
})
27+
.catch((err) => {
28+
const errMessage = _.get(err, 'response.data.result.content.message');
29+
throw errMessage ? new Error('Error during obtaining data from DEV: ' + errMessage) : err
30+
})
2531
.then(async function (response) {
2632
let data = response.data;
2733

34+
console.log('Creating metadata objects locally...');
35+
2836
var headers = {
2937
'Content-Type': 'application/json',
3038
'Authorization': 'Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJyb2xlcyI6WyJUb3Bjb2RlciBVc2VyIiwiYWRtaW5pc3RyYXRvciJdLCJpc3MiOiJodHRwczovL2FwaS50b3Bjb2Rlci1kZXYuY29tIiwiaGFuZGxlIjoidGVzdDEiLCJleHAiOjI1NjMwNzY2ODksInVzZXJJZCI6IjQwMDUxMzMzIiwiaWF0IjoxNDYzMDc2MDg5LCJlbWFpbCI6InRlc3RAdG9wY29kZXIuY29tIiwianRpIjoiYjMzYjc3Y2QtYjUyZS00MGZlLTgzN2UtYmViOGUwYWU2YTRhIn0.wKWUe0-SaiFVN-VR_-GwgFlvWaDkSbc8H55ktb9LAVw'
3139
}
3240

33-
3441
let promises = _(data.result.content.projectTypes).map(pt=>{
35-
return axios.post(destUrl+'metadata/projectTypes',{param:pt}, {headers:headers})
42+
return axios
43+
.post(destUrl+'metadata/projectTypes',{param:pt}, {headers:headers})
44+
.catch((err) => {
45+
const errMessage = _.get(err, 'response.data.result.content.message', '');
46+
console.log(`Failed to create projectType with key=${pt.key}.`, errMessage)
47+
})
3648
});
37-
try{
38-
await Promise.all(promises);
39-
}catch(ex){
40-
//ignore the error
41-
}
4249

43-
promises = _(data.result.content.projectTemplates).map(pt=>{
44-
return axios.post(destUrl+'metadata/projectTemplates',{param:pt}, {headers:headers})
45-
});
46-
try{
47-
await Promise.all(promises);
48-
}catch(ex){
49-
//ignore the error
50-
}
50+
await Promise.all(promises);
5151

5252
promises = _(data.result.content.productCategories).map(pt=>{
53-
return axios.post(destUrl+'metadata/productCategories',{param:pt}, {headers:headers})
53+
return axios
54+
.post(destUrl+'metadata/productCategories',{param:pt}, {headers:headers})
55+
.catch((err) => {
56+
const errMessage = _.get(err, 'response.data.result.content.message', '');
57+
console.log(`Failed to create productCategory with key=${pt.key}.`, errMessage)
58+
})
5459
});
55-
try{
56-
await Promise.all(promises);
57-
}catch(ex){
58-
//ignore the error
59-
}
6060

61-
promises = _(data.result.content.productTemplates).map(pt=>{
62-
return axios.post(destUrl+'metadata/productTemplates',{param:pt}, {headers:headers})
61+
await Promise.all(promises);
62+
63+
promises = _(data.result.content.projectTemplates).map(pt=>{
64+
return axios
65+
.post(destUrl+'metadata/projectTemplates',{param:pt}, {headers:headers})
66+
.catch((err) => {
67+
const errMessage = _.get(err, 'response.data.result.content.message', '');
68+
console.log(`Failed to create projectTemplate with id=${pt.id}.`, errMessage)
69+
})
6370
});
64-
try{
65-
await Promise.all(promises);
66-
}catch(ex){
67-
//ignore the error
68-
}
6971

70-
await Promise.each(data.result.content.milestoneTemplates,pt=>{
71-
return new Promise((resolve,reject)=>{
72-
axios.post(destTimelines+'timelines/metadata/milestoneTemplates',{param:pt}, {headers:headers})
73-
.then(r=>resolve())
74-
.catch(e=>resolve()); //ignore the error
75-
})
72+
await Promise.all(promises);
73+
74+
promises = _(data.result.content.productTemplates).map(pt=>{
75+
return axios
76+
.post(destUrl+'metadata/productTemplates',{param:pt}, {headers:headers})
77+
.catch((err) => {
78+
const errMessage = _.get(err, 'response.data.result.content.message', '');
79+
console.log(`Failed to create productTemplate with id=${pt.id}.`, errMessage)
80+
})
7681
});
7782

83+
await Promise.all(promises);
84+
85+
await Promise.each(data.result.content.milestoneTemplates,pt=> (
86+
axios
87+
.post(destTimelines+'timelines/metadata/milestoneTemplates',{param:pt}, {headers:headers})
88+
.catch((err) => {
89+
const errMessage = _.get(err, 'response.data.result.content.message', '');
90+
console.log(`Failed to create milestoneTemplate with id=${pt.id}.`, errMessage)
91+
})
92+
));
93+
7894
// handle success
7995
console.log('Done');
8096
}).catch(err=>{
81-
console.log(err && err.response ? err.response.data : err);
97+
console.error(err && err.response ? err.response : err);
8298
});

0 commit comments

Comments
 (0)