UNPKG

@novo-learning/novo-sdk

Version:

SDK for the Novolanguage Speech Analysis API

96 lines (87 loc) 3.81 kB
import { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios'; import { ExerciseType, LanguageCode } from '../../entities'; import { ExerciseDefinitionMapper } from '../../mappers/exercise-definition.mapper'; import { ExerciseTypeMapper } from '../../mappers/exercise-type.mapper'; import { LanguageCodeMapper } from '../../mappers/language-code.mapper'; import { CreateExerciseDtoV1 } from './dto/create-exercise.dto.v1'; import { ExerciseDescriptorDtoV1 } from './dto/exercise-descriptor.dto.v1'; import { ExerciseResponseDtoV1 } from './dto/exercise-response.dto.v1'; import { ReplaceExerciseDtoV1 } from './dto/replace-exercise.dto.v1'; import { Configuration, ExerciseResponseDtoV1 as GeneratedExerciseResponseDtoV1, ExercisesApi as GeneratedExercisesApi, } from './generated'; export class ExerciseApi { private readonly api: GeneratedExercisesApi; private readonly languageCodeMapper: LanguageCodeMapper; private readonly exerciseTypeMapper: ExerciseTypeMapper; private readonly exerciseDefinitionMapper: ExerciseDefinitionMapper; constructor(configuration?: Configuration | undefined, basePath?: string, axios?: AxiosInstance) { this.api = new GeneratedExercisesApi(configuration, basePath, axios); this.languageCodeMapper = new LanguageCodeMapper(); this.exerciseTypeMapper = new ExerciseTypeMapper(); this.exerciseDefinitionMapper = new ExerciseDefinitionMapper(); } private mapGeneratedExerciseResponse( dto: AxiosResponse<GeneratedExerciseResponseDtoV1>, ): AxiosResponse<ExerciseResponseDtoV1> { return { ...dto, data: { ...dto.data, exercise: this.exerciseDefinitionMapper.mapFromGenerated(dto.data.exercise), languageCode: this.languageCodeMapper.mapFromGenerated(dto.data.languageCode), type: this.exerciseTypeMapper.mapFromGenerated(dto.data.type), customProperties: <Record<string, unknown> | undefined>dto.data.customProperties, }, }; } public createExerciseV1( createExerciseDto: CreateExerciseDtoV1, options?: AxiosRequestConfig<unknown> | undefined, ): Promise<AxiosResponse<ExerciseResponseDtoV1>> { return this.api .createExercise( { ...createExerciseDto, languageCode: this.languageCodeMapper.mapToGenerated(createExerciseDto.languageCode), }, options, ) .then((response) => this.mapGeneratedExerciseResponse(response)); } public deleteExerciseV1(id: string, options?: AxiosRequestConfig<unknown> | undefined): Promise<AxiosResponse<void>> { return this.api.deleteExercise(id, options); } public getExerciseV1( id: string, options?: AxiosRequestConfig<unknown> | undefined, ): Promise<AxiosResponse<ExerciseResponseDtoV1>> { return this.api.getExercise(id, options).then((response) => this.mapGeneratedExerciseResponse(response)); } public getExerciseListV1( custom?: string, exerciseType?: ExerciseType, languageCode?: LanguageCode, options?: AxiosRequestConfig<unknown> | undefined, ): Promise<AxiosResponse<Array<ExerciseDescriptorDtoV1>>> { return this.api.getExerciseList(custom, exerciseType, languageCode, options).then((r) => ({ ...r, data: r.data.map((dto) => ({ ...dto, languageCode: this.languageCodeMapper.mapFromGenerated(dto.languageCode), type: this.exerciseTypeMapper.mapFromGenerated(dto.type), })), })); } public replaceExerciseV1( id: string, replaceExerciseDto: ReplaceExerciseDtoV1, options?: AxiosRequestConfig<unknown> | undefined, ): Promise<AxiosResponse<ExerciseResponseDtoV1>> { return this.api .replaceExercise(id, replaceExerciseDto, options) .then((response) => this.mapGeneratedExerciseResponse(response)); } }