UNPKG

qus-canvas

Version:
75 lines (63 loc) 2.31 kB
import { CanvasHttpConnector } from "../../http/connections/canvas-http.connector"; import { OutcomeInterface } from "../dtos/outcome.interface"; import { Endpoints } from "../config/endpoints"; import { HttpResponse } from "node-http-connector"; import { toCamelCase } from "../../utils/case.converter"; export class OutcomesFactory { constructor( protected readonly connector: CanvasHttpConnector, protected version: string, protected accountId: string ) {} /** * Fetch outcome - system only returns one outcome * * @param endpoint * @private */ private async fetchOutcome(endpoint: string): Promise<OutcomeInterface | undefined> { try { const response: HttpResponse<any> | undefined = await this.connector.get(endpoint); if (response) { const outcome: any = toCamelCase(response.data); return this.mapOutcome(outcome); } } catch (error) { console.error(`Error fetching outcomes: ${error}`); } } // async listOutcomesByCourse(courseId: number, page: number, size: number): Promise<OutcomeInterface[]> { // const endpoint: string = new Endpoints(). // .replace(':version', this.version) // .replace(':account_id', this.accountId) // .replace(':course_id', courseId.toString()) // .replace(':page', page.toString()) // .replace(':size', size.toString()); // // return this.fetchOutcomes(endpoint); // } /** * Map outcome * * @param outcome * @private */ private mapOutcome(outcome: any): OutcomeInterface { return { ...outcome, id: '', // let the user generate their own local GUID outcomeNumber: outcome.id // Map API id to termId }; } /** * Get outcome * * @param id */ async getOutcome(id: string): Promise<OutcomeInterface | undefined> { const endpoint: string = new Endpoints().GET_OUTCOME .replace(':version', this.version) .replace(':id', id); return await this.fetchOutcome(endpoint); } }