@codebynithin/time-entry
Version:
Nithin time entry cli
163 lines (131 loc) • 4.46 kB
JavaScript
const { checkConfig } = require('./init-config');
const { removeEmpty } = require('./utils');
const { getStatus, getTasksByDate } = require('./get-report');
const { logTaskHoursAndSync } = require('./log-task-hours-and-sync');
const { addNewTask } = require('./add-task');
const { updateTask, deleteTask } = require('./update-delete-task');
const { getGitlabActivities } = require('./get-gitlab-activities');
const { getZohoTasks } = require('./get-zoho-tasks');
const axios = require('axios');
const processArgs = async (type, value) => {
try {
await checkConfig();
const values = value ? removeEmpty(value?.split(' -')) : value;
switch (type) {
case 'add': {
await addNewTask(values);
break;
}
case 'update': {
await updateTask(values);
break;
}
case 'delete': {
console.log(await deleteTask(values));
break;
}
case 'status': {
await getStatus(values);
break;
}
case 'entries': {
console.table(await getTasksByDate(values));
break;
}
case 'zoho': {
console.log('Final status: ', await logTaskHoursAndSync());
break;
}
case 'gitlab': {
await getGitlabActivities(values);
break;
}
case 'merge': {
const tasks = await getZohoTasks({ params: { type: ['2'] } });
const taskIds = tasks
.filter((task) => task.gitlab_iid)
.map((task) => ({ taskId: task.taskId, gitlabIid: task.gitlab_iid }));
if (!taskIds.length) {
console.log('No active tasks with GitLab IIDs found');
break;
}
const mergeRequests = await Promise.all(
taskIds.map(async ({ taskId, gitlabIid }) => {
try {
const response = await axios.get(
`${process.env.GITLAB_API_URL}/projects/${process.env.GITLAB_PROJECT_ID}/merge_requests/${gitlabIid}`,
{
headers: {
'PRIVATE-TOKEN': process.env.GITLAB_TOKEN,
},
},
);
return {
taskId,
gitlabIid,
status: response.data.state,
assignee: response.data.assignee?.name || 'Unassigned',
title: response.data.title,
webUrl: response.data.web_url,
};
} catch (error) {
return {
taskId,
gitlabIid,
status: 'error',
error: error.response?.status === 404 ? 'MR not found' : 'Failed to fetch MR',
};
}
}),
);
console.table(
mergeRequests.map((mr) => ({
'Task ID': mr.taskId,
'MR IID': mr.gitlabIid,
Status: mr.status,
Assignee: mr.assignee || '-',
Title: mr.title || '-',
URL: mr.webUrl || '-',
Error: mr.error || '-',
})),
);
break;
}
case 'v':
case 'version': {
const path = require('path');
const packageJson = require(path.resolve(__dirname, '../package.json'));
const packageVersion = packageJson.version;
console.log('Package version:', packageVersion);
break;
}
case 'h':
case 'help': {
console.log(`usage: timectl \t[version] [help] [init] [switch]
\t[add] [update] [delete] [status] [entries] [zoho]\n`);
console.log(`Below are common Time Entry commands utilized in various scenarios:\n
Start a time entry:
init \t\t: Initialize and input necessary information.
switch \t: Switch between the default projects.
Work on the Current Change:
add \t\t: Add your time details.
update \t: Update existing time details.
delete \t: Remove existing time details.
Examine the History:
entries \t: View each time entry's details by date.
status \t: View daily status of time entries.
zoho \t\t: Update time entries remotely.
Running 'timectl help' will list available subcommands and provide some conceptual guides.`);
break;
}
default: {
console.error(`timectl: '${type}' is not a timectl command. See 'timectl -help'.`);
return;
}
}
} catch (error) {
console.log(error);
}
process.exit(1);
};
module.exports = { processArgs };