diff --git a/api/src/engine/connectors/exareme/converters.ts b/api/src/engine/connectors/exareme/converters.ts index 5ca4b79db61a06924af99aebb4e0ca44670de630..56f35ddcd2876a5cd6435cd3454c6fb414034923 100644 --- a/api/src/engine/connectors/exareme/converters.ts +++ b/api/src/engine/connectors/exareme/converters.ts @@ -227,6 +227,14 @@ export const dataToExperiment = ( status: 'error', variables: [], domain: data['domain'] ?? '', + results: [ + { + rawdata: { + type: 'text/plain+error', + data: 'Error when parsing experiment data from the Engine', + }, + }, + ], datasets: [], algorithm: { id: 'unknown', diff --git a/api/src/engine/connectors/exareme/main.connector.ts b/api/src/engine/connectors/exareme/main.connector.ts index 8d25f9ffd2b3eba957ee2bcbe73a7f704841b38a..02f28ae18223e74286b62b83a5e1aca03ce577d7 100644 --- a/api/src/engine/connectors/exareme/main.connector.ts +++ b/api/src/engine/connectors/exareme/main.connector.ts @@ -5,6 +5,7 @@ import { HttpStatus, Inject, Injectable, + InternalServerErrorException, } from '@nestjs/common'; import { AxiosRequestConfig } from 'axios'; import { Request } from 'express'; @@ -45,7 +46,6 @@ type Headers = Record<string, string>; @Injectable() export default class ExaremeService implements IEngineService { - headers = {}; constructor( @Inject(ENGINE_MODULE_OPTIONS) private readonly options: IEngineOptions, private readonly httpService: HttpService, @@ -75,9 +75,7 @@ export default class ExaremeService implements IEngineService { this.options.baseurl + `experiments${isTransient ? '/transient' : ''}`; const resultAPI = await firstValueFrom( - this.post<ExperimentData>(request, path, form, { - headers: this.headers, - }), + this.post<ExperimentData>(request, path, form), ); return dataToExperiment(resultAPI.data); @@ -141,11 +139,7 @@ export default class ExaremeService implements IEngineService { const path = this.options.baseurl + `experiments/${id}`; try { - await firstValueFrom( - this.delete(request, path, { - headers: this.headers, - }), - ); + await firstValueFrom(this.delete(request, path)); return { id: id, }; @@ -158,11 +152,7 @@ export default class ExaremeService implements IEngineService { const path = this.options.baseurl + 'pathologies'; try { - const data = await firstValueFrom( - this.get<Pathology[]>(request, path, { - headers: this.headers, - }), - ); + const data = await firstValueFrom(this.get<Pathology[]>(request, path)); return ( data?.data @@ -192,20 +182,30 @@ export default class ExaremeService implements IEngineService { async getActiveUser(request: Request): Promise<User> { const path = this.options.baseurl + 'activeUser'; - const response = await firstValueFrom(this.get<string>(request, path)); - return transformToUser.evaluate(response.data); + try { + return transformToUser.evaluate(response.data); + } catch (e) { + new InternalServerErrorException('Cannot parse user data from Engine', e); + } } async updateUser(request: Request): Promise<User> { const path = this.options.baseurl + 'activeUser/agreeNDA'; - - this.post<string>(request, path, request.body).pipe( - map((response) => response.data), + const response = await firstValueFrom( + this.post<string>(request, path, { + agreeNDA: true, + }), ); - return this.getActiveUser(request); + try { + return transformToUser.evaluate(response.data); + } catch (e) { + throw new InternalServerErrorException( + 'Error when trying to parse user data from the engine', + ); + } } getAlgorithmsREST(request: Request): Observable<string> { @@ -256,7 +256,7 @@ export default class ExaremeService implements IEngineService { }; private getHeadersFromRequest(request: Request): Headers { - if (!request || request.headers) return {}; + if (!request || !request.headers) return {}; return request.headers as Headers; }