Skip to content

Commit

Permalink
Refactor: replace promises with async/await
Browse files Browse the repository at this point in the history
  • Loading branch information
lusarz committed Dec 31, 2018
1 parent a70cda8 commit 287bd15
Show file tree
Hide file tree
Showing 13 changed files with 87 additions and 92 deletions.
11 changes: 5 additions & 6 deletions lib/actions/create-issue.js
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
module.exports = {
description: 'Create new issue',
props: [],
run () {
async run () {
const IssuesDAO = require('../dao/issues-dao');
const ProjectsInquirer = require('../inquirer/projects-inquirer');
const IssuesInquirer = require('../inquirer/issues-inquirer');
const PrintUtils = require('../utils/print-utils');

return ProjectsInquirer
.chooseProject()
.then(IssuesInquirer.getIssueParameters)
.then(IssuesDAO.createIssue)
.then(({ key }) => PrintUtils.printLine(`Issue '${key}' successfully created`, 'green'));
const projectId = await ProjectsInquirer.chooseProject();
const parameters = await IssuesInquirer.getIssueParameters(projectId);
const issue = await IssuesDAO.createIssue(parameters);
PrintUtils.printLine(`Issue '${issue.key}' successfully created`, 'green')
}
};
7 changes: 3 additions & 4 deletions lib/actions/issue-status.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
module.exports = {
description: 'Show issue status',
props: ['issueName'],
run (issueName) {
async run (issueName) {
const IssuesDAO = require('../dao/issues-dao');
const IssuesPrinter = require('../printer/issues-printer');

return IssuesDAO
.findIssueByName(issueName)
.then(IssuesPrinter.printIssueStatus);
const issue = await IssuesDAO.findIssueByName(issueName);
IssuesPrinter.printIssueStatus(issue);
}
};
7 changes: 3 additions & 4 deletions lib/actions/issue.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
module.exports = {
description: 'Show issue details',
props: ['issueName'],
run (issueName) {
async run (issueName) {
const IssuesDAO = require('../dao/issues-dao');
const IssuesPrinter = require('../printer/issues-printer');

return IssuesDAO
.findIssueByName(issueName)
.then(IssuesPrinter.printIssueDetails);
const issue = await IssuesDAO.findIssueByName(issueName);
IssuesPrinter.printIssueDetails(issue);
}
};
7 changes: 3 additions & 4 deletions lib/actions/jql.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
module.exports = {
description: 'Show issues using JQL',
props: ['jql'],
run (jql) {
async run (jql) {
const IssuesDAO = require('../dao/issues-dao');
const IssuesPrinter = require('../printer/issues-printer');

return IssuesDAO
.fetchIssuesUsingJQL(jql)
.then(IssuesPrinter.printIssues)
const issues = await IssuesDAO.fetchIssuesUsingJQL(jql);
IssuesPrinter.printIssues(issues)
}
};
11 changes: 6 additions & 5 deletions lib/dao/issue-types-dao.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@ const DAOUtils = require('../utils/dao-utils');
const IssueTypesMapper = require('../mappers/issue-types-mapper');

module.exports = {
getIssueTypesExcludingSubtasks (projectId) {
return DAOUtils
.fetch(`/project/${projectId}`)
.then(({ issueTypes }) => issueTypes.filter(issue => !issue.subtask))
.then(IssueTypesMapper.mapIssueTypes);
async getIssueTypesExcludingSubtasks (projectId) {
const { issueTypes } = await DAOUtils.fetch(`/project/${projectId}`);

return issueTypes
.filter(issue => !issue.subtask)
.map(IssueTypesMapper.mapIssueType)
}
};
16 changes: 7 additions & 9 deletions lib/dao/issues-dao.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,12 @@ const DAOUtils = require('../utils/dao-utils');
const IssuesMapper = require('../mappers/issues-mapper');

module.exports = {
findIssueByName (issueName) {
return DAOUtils
.fetch(`/issue/${issueName}`)
.then(IssuesMapper.mapIssueDetails)
async findIssueByName (issueName) {
const issue = await DAOUtils.fetch(`/issue/${issueName}`);
return IssuesMapper.mapIssueDetails(issue);
},

createIssue ({ summary, description, issueTypeId, projectId }) {
async createIssue ({ summary, description, issueTypeId, projectId }) {
return DAOUtils.post('/issue', {
summary,
description,
Expand All @@ -17,9 +16,8 @@ module.exports = {
})
},

fetchIssuesUsingJQL (jql) {
return DAOUtils
.fetch(`/search?jql=${jql}`)
.then(IssuesMapper.mapIssues);
async fetchIssuesUsingJQL (jql) {
const { issues } = await DAOUtils.fetch(`/search?jql=${jql}`);
return issues.map(IssuesMapper.mapIssue);
}
};
9 changes: 4 additions & 5 deletions lib/dao/projects-dao.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,12 @@ const DAOUtils = require('../utils/dao-utils');
const ProjectsMapper = require('../mappers/projects-mapper');

module.exports = {
getProjects () {
return DAOUtils
.fetch(`/project`)
.then(ProjectsMapper.mapProjects);
async getProjects () {
const projects = await DAOUtils.fetch(`/project`);
return projects.map(ProjectsMapper.mapProject);
},

getProject (projectId) {
async getProject (projectId) {
return DAOUtils.fetch(`/project/${projectId}`);
}
};
39 changes: 20 additions & 19 deletions lib/inquirer/issues-inquirer.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,25 @@ const prompt = require('inquirer').prompt;
const IssueTypesDAO = require('../dao/issue-types-dao');

module.exports = {
getIssueParameters (projectId) {
return IssueTypesDAO.getIssueTypesExcludingSubtasks(projectId)
.then(issueTypes => prompt([
{
type: 'list',
name: 'issueTypeId',
message: 'Type: ',
choices: issueTypes.map(issueType => ({ value: issueType.id, name: issueType.name }))
},{
type: 'input',
name: 'summary',
message: 'Name: '
},{
type: 'input',
name: 'description',
message: 'Description: '
}
]))
.then(answers => Object.assign(answers, { projectId }));
async getIssueParameters (projectId) {
const issueTypes = await IssueTypesDAO.getIssueTypesExcludingSubtasks(projectId);
const answers = await prompt([
{
type: 'list',
name: 'issueTypeId',
message: 'Type: ',
choices: issueTypes.map(issueType => ({ value: issueType.id, name: issueType.name }))
},{
type: 'input',
name: 'summary',
message: 'Name: '
},{
type: 'input',
name: 'description',
message: 'Description: '
}
]);

return Object.assign(answers, { projectId });
}
};
20 changes: 11 additions & 9 deletions lib/inquirer/projects-inquirer.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,16 @@ const prompt = require('inquirer').prompt;
const ProjectsDAO = require('../dao/projects-dao');

module.exports = {
chooseProject () {
return ProjectsDAO.getProjects()
.then(projects => prompt({
type: 'list',
name: 'projectId',
message: 'Choose project: ',
choices: projects.map(project => ({ value: project.id, name: project.name }))
}))
.then(({ projectId }) => projectId)
async chooseProject () {
const projects = await ProjectsDAO.getProjects();

const { projectId } = await prompt({
type: 'list',
name: 'projectId',
message: 'Choose project: ',
choices: projects.map(project => ({ value: project.id, name: project.name }))
});

return projectId;
}
};
4 changes: 0 additions & 4 deletions lib/mappers/issue-types-mapper.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,6 @@ const IssueTypeMapper = {
};

return issueType;
},

mapIssueTypes (issueTypes) {
return issueTypes.map(IssueTypeMapper.mapIssueType);
}
};

Expand Down
4 changes: 0 additions & 4 deletions lib/mappers/issues-mapper.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,6 @@ const IssueMapper = {
issue.commentsCount = serverIssue.fields.comment.total;
issue.comments = (serverIssue.fields.comment.comments || []).map(CommentsMapper.mapComment);
return issue;
},

mapIssues ({ issues }) {
return issues.map(IssueMapper.mapIssue);
}
};

Expand Down
14 changes: 5 additions & 9 deletions lib/utils/configuration-utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,6 @@ function saveConfiguration ({ host, username, password }) {
})
}

function printWhereConfigurationStored () {
PrintUtils.printLine(`Configuration JSON stored in '${CONFIGURATION_FILE_PATH}' file`, 'yellow')
}

const ConfigurationUtils = {
CONFIGURATION_FILE_PATH,

Expand All @@ -30,11 +26,11 @@ const ConfigurationUtils = {
PrintUtils.printNewLine();
},

setupConfigurationFile () {
return ConfigurationInquirer.getConfigurationParameters()
.then(saveConfiguration)
.then(ConfigurationUtils.printConfigurationFile)
.then(printWhereConfigurationStored)
async setupConfigurationFile () {
const parameters = await ConfigurationInquirer.getConfigurationParameters();
saveConfiguration(parameters);
ConfigurationUtils.printConfigurationFile();
PrintUtils.printLine(`Configuration JSON stored in '${CONFIGURATION_FILE_PATH}' file`, 'yellow')
}
};

Expand Down
30 changes: 20 additions & 10 deletions lib/utils/dao-utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,18 +14,28 @@ function readDataFromResponse (response) {
}

const DAOUtils = {
fetch (url) {
return require('axios')
.get(buildUrl(url), buildRequestParams())
.then(readDataFromResponse)
.catch(require('./error-handle-utils').handleResponseError);
async fetch (url) {
const axios = require('axios');
const ErrorHandleUtils = require('./error-handle-utils');

try {
const response = await axios.get(buildUrl(url), buildRequestParams());
return readDataFromResponse(response);
} catch (error) {
ErrorHandleUtils.handleResponseError(error);
}
},

post (url, fields) {
return require('axios')
.post(buildUrl(url), { fields }, buildRequestParams())
.then(readDataFromResponse)
.catch(require('./error-handle-utils').handleResponseError);
async post (url, fields) {
const axios = require('axios');
const ErrorHandleUtils = require('./error-handle-utils');

try {
const response = await axios.post(buildUrl(url), { fields }, buildRequestParams());
return readDataFromResponse(response);
} catch (error) {
ErrorHandleUtils.handleResponseError(error);
}
}
};

Expand Down

0 comments on commit 287bd15

Please sign in to comment.