diff --git a/package.json b/package.json index 650a3f5..a65c4ed 100644 --- a/package.json +++ b/package.json @@ -36,4 +36,4 @@ "npmextra.json", "readme.md" ] -} +} \ No newline at end of file diff --git a/test/test.ts b/test/test.ts index 8f376a2..29b44ba 100644 --- a/test/test.ts +++ b/test/test.ts @@ -30,8 +30,39 @@ tap.test('should get all lists for a project', async () => { }); const projectsInLosslessOrg = await losslessOrganization.getProjects(); const featureProjects = projectsInLosslessOrg.filter(oraProjectArg => { - return oraProjectArg.title - }) + return oraProjectArg.title.includes('Feature'); + }); + + console.log('The following Feature Boards are available:'); + featureProjects.forEach(oraProjectArg => console.log(oraProjectArg.title)); + const layerIoProject = featureProjects.find(oraProjectArg => + oraProjectArg.title.includes('layer.io') + ); + + const lists = await layerIoProject.getLists(); + console.log('\nThe following lists are available'); + lists.forEach(listArg => console.log(listArg.title)); +}); + +tap.test('should get all tasks for a project', async () => { + const organizations = await oraInstance.getOrganizations(); + const losslessOrganization = organizations.find(orgArg => { + return orgArg.name.startsWith('Lossless'); + }); + const projectsInLosslessOrg = await losslessOrganization.getProjects(); + const featureProjects = projectsInLosslessOrg.filter(oraProjectArg => { + return oraProjectArg.title.includes('Feature'); + }); + const layerIoProject = featureProjects.find(oraProjectArg => + oraProjectArg.title.includes('layer.io') + ); + const lists = await layerIoProject.getLists(); + let tasks: ora.OraTask[] = []; + for (const list of lists) { + tasks = tasks.concat(await list.getTasks()); + } + console.log('the following tasks are available:'); + tasks.forEach(taskArg => console.log(taskArg.title)); }); tap.start(); diff --git a/ts/index.ts b/ts/index.ts index 38d75b3..d66f3be 100644 --- a/ts/index.ts +++ b/ts/index.ts @@ -1,2 +1,5 @@ export * from './ora.classes.ora'; export * from './ora.classes.organization'; +export * from './ora.classes.project'; +export * from './ora.classes.list'; +export * from './ora.classes.task'; diff --git a/ts/ora.classes.list.ts b/ts/ora.classes.list.ts index 8ee5542..5065ec1 100644 --- a/ts/ora.classes.list.ts +++ b/ts/ora.classes.list.ts @@ -1,12 +1,33 @@ import * as plugins from './ora.plugins'; import { OraProject } from './ora.classes.project'; +import { OraTask } from './ora.classes.task'; -export class OraList { +/** + * the interface for an ora list + */ +export interface IOraList { + actions: number; + archived: false; + color: string; + id: number; + list_type: number; + position: number; + project_id: number; + public: boolean; + title: string; + updated_at: string; + view_id: number; +} + +export class OraList implements IOraList { // ====== // STATIC // ====== public static async getAllLists(oraProjectRef: OraProject) { - const response = await oraProjectRef.oraOrganizationRef.oraRef.request(`/projects/${oraProjectRef.id}/lists`, 'GET'); + const response = await oraProjectRef.oraOrganizationRef.oraRef.request( + `/projects/${oraProjectRef.id}/lists`, + 'GET' + ); const oraLists: OraList[] = []; for (const dataObject of response.data) { oraLists.push(new OraList(oraProjectRef, dataObject)); @@ -17,6 +38,17 @@ export class OraList { // ======== // INSTANCE // ======== + public actions: number; + public archived: false; + public color: string; + public id: number; + public list_type: number; + public position: number; + public project_id: number; + public public: boolean; + public title: string; + public updated_at: string; + public view_id: number; public oraProjectObjectRef: OraProject; @@ -24,4 +56,8 @@ export class OraList { this.oraProjectObjectRef = oraProjectRefArg; Object.assign(this, creationObjectArg); } -} \ No newline at end of file + + public async getTasks() { + return OraTask.getAllOraTasks(this); + } +} diff --git a/ts/ora.classes.ora.ts b/ts/ora.classes.ora.ts index 0d012d0..84a9a91 100644 --- a/ts/ora.classes.ora.ts +++ b/ts/ora.classes.ora.ts @@ -9,25 +9,25 @@ export class Ora { this.apiToken = apiTokenArg; } - public async getOrganizations () { + public async getOrganizations() { return await OraOrganization.getAllOrganizations(this); } /** * make a request - * @param routeArg - * @param methodArg - * @param payloadArg + * @param routeArg + * @param methodArg + * @param payloadArg */ - public async request (routeArg: string, methodArg: string, payloadArg?: string) { + public async request(routeArg: string, methodArg: string, payloadArg?: string) { const response = await plugins.smartrequest.request(this.apiBase + routeArg, { method: methodArg, requestBody: payloadArg, headers: { - accept: "application/json", + accept: 'application/json', authorization: `Bearer ${this.apiToken}` } }); return response.body; } -} \ No newline at end of file +} diff --git a/ts/ora.classes.project.ts b/ts/ora.classes.project.ts index fd27cc1..1b8f363 100644 --- a/ts/ora.classes.project.ts +++ b/ts/ora.classes.project.ts @@ -72,7 +72,6 @@ export class OraProject implements IOraProject { public view_title: 'Backlog'; public web: string; - public oraOrganizationRef: OraOrganization; constructor(oraOrganiazionRefArg: OraOrganization, creationObjectArg: IOraProject) { this.oraOrganizationRef = oraOrganiazionRefArg; diff --git a/ts/ora.classes.task.ts b/ts/ora.classes.task.ts new file mode 100644 index 0000000..2d9f007 --- /dev/null +++ b/ts/ora.classes.task.ts @@ -0,0 +1,95 @@ +import * as plugins from './ora.plugins'; +import { OraList } from './ora.classes.list'; + +export interface IOraTask { + milestone_id: number; + task_type: number; + creator: number; + second_id: number; + title: string; + description: string; + last_picture: string; + last_picture_external_url: string; + created_at: string; + updated_at: string; + deadline: string; + archived: boolean; + color: string; + estimated: string; + time_tracked: string; + public: boolean; + state: string; + cover_width: number; + cover_height: number; + checklist: string; + comments: number; + public_comments: number; + likes: number; + attachments: number; + commits: number; + support_tickets: number; + value: number; + points: number; + points_done: number; + sprint_id: number; + position: number; +} + +export class OraTask implements IOraTask { + // ====== + // STATIC + // ====== + public static async getAllOraTasks(oraListArg: OraList): Promise { + const response = await oraListArg.oraProjectObjectRef.oraOrganizationRef.oraRef.request( + `/projects/${oraListArg.oraProjectObjectRef.id}/lists/${oraListArg.id}/tasks`, + 'GET' + ); + const oraTasks: OraTask[] = []; + for (const dataObject of response.data) { + oraTasks.push(new OraTask(oraListArg, dataObject)); + } + return oraTasks; + } + + // ======== + // INSTANCE + // ======== + public milestone_id: number; + public task_type: number; + public creator: number; + public second_id: number; + public title: string; + public description: string; + public last_picture: string; + public last_picture_external_url: string; + public created_at: string; + public updated_at: string; + public deadline: string; + public archived: boolean; + public color: string; + public estimated: string; + public time_tracked: string; + public public: boolean; + public state: string; + public cover_width: number; + public cover_height: number; + public checklist: string; + public comments: number; + public public_comments: number; + public likes: number; + public attachments: number; + public commits: number; + public support_tickets: number; + public value: number; + public points: number; + public points_done: number; + public sprint_id: number; + public position: number; + + public oraListRef: OraList; + + constructor(oraListRefArg: OraList, creationObjectArg: IOraTask) { + this.oraListRef = oraListRefArg; + Object.assign(this, creationObjectArg); + } +} diff --git a/ts/ora.plugins.ts b/ts/ora.plugins.ts index fc3561f..03c097b 100644 --- a/ts/ora.plugins.ts +++ b/ts/ora.plugins.ts @@ -1,6 +1,4 @@ // pushrocks scope import * as smartrequest from '@pushrocks/smartrequest'; -export { - smartrequest -}; +export { smartrequest };