diff --git a/api/.env.defaults b/api/.env.defaults new file mode 100644 index 0000000000000000000000000000000000000000..63d5e94dc49793acee86be230ae90ff3783eff32 --- /dev/null +++ b/api/.env.defaults @@ -0,0 +1,3 @@ +ENGINE_TYPE=exareme +ENGINE_BASE_URL=http://127.0.0.1:8080/services/ +GATEWAY_PORT=8081 \ No newline at end of file diff --git a/api/package-lock.json b/api/package-lock.json index c564f292ce87de51fe2f29be8fab6f19a2c06ceb..0fa22675542e222a5d4fd602ce9fb51114f28903 100644 --- a/api/package-lock.json +++ b/api/package-lock.json @@ -11,6 +11,7 @@ "dependencies": { "@nestjs/axios": "^0.0.1", "@nestjs/common": "^8.0.0", + "@nestjs/config": "^1.0.1", "@nestjs/core": "^8.0.0", "@nestjs/graphql": "^9.0.4", "@nestjs/platform-express": "^8.0.0", @@ -1765,6 +1766,32 @@ } } }, + "node_modules/@nestjs/config": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@nestjs/config/-/config-1.0.1.tgz", + "integrity": "sha512-azMl4uYlFIhYsywFxPJT81RxF3Pnn0TZW3EEmr0Wa0Wex8R2xpvBNrCcrOgW3TB1xGMP7eqBrlfsVh5ZP82szg==", + "dependencies": { + "dotenv": "10.0.0", + "dotenv-expand": "5.1.0", + "lodash.get": "4.4.2", + "lodash.has": "4.5.2", + "lodash.set": "4.3.2", + "uuid": "8.3.2" + }, + "peerDependencies": { + "@nestjs/common": "^7.0.0 || ^8.0.0", + "reflect-metadata": "^0.1.13", + "rxjs": "^6.0.0 || ^7.2.0" + } + }, + "node_modules/@nestjs/config/node_modules/dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "engines": { + "node": ">=10" + } + }, "node_modules/@nestjs/core": { "version": "8.0.6", "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-8.0.6.tgz", @@ -4392,6 +4419,11 @@ "node": ">=10" } }, + "node_modules/dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==" + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -7217,12 +7249,27 @@ "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", "dev": true }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" + }, + "node_modules/lodash.has": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/lodash.has/-/lodash.has-4.5.2.tgz", + "integrity": "sha1-0Z9NwQlQWMzL4rDN9O4P5Ko3yGI=" + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "node_modules/lodash.set": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", + "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=" + }, "node_modules/lodash.sortby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", @@ -11891,6 +11938,26 @@ "uuid": "8.3.2" } }, + "@nestjs/config": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@nestjs/config/-/config-1.0.1.tgz", + "integrity": "sha512-azMl4uYlFIhYsywFxPJT81RxF3Pnn0TZW3EEmr0Wa0Wex8R2xpvBNrCcrOgW3TB1xGMP7eqBrlfsVh5ZP82szg==", + "requires": { + "dotenv": "10.0.0", + "dotenv-expand": "5.1.0", + "lodash.get": "4.4.2", + "lodash.has": "4.5.2", + "lodash.set": "4.3.2", + "uuid": "8.3.2" + }, + "dependencies": { + "dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==" + } + } + }, "@nestjs/core": { "version": "8.0.6", "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-8.0.6.tgz", @@ -13914,6 +13981,11 @@ "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", "peer": true }, + "dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==" + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -16061,12 +16133,27 @@ "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", "dev": true }, + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" + }, + "lodash.has": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/lodash.has/-/lodash.has-4.5.2.tgz", + "integrity": "sha1-0Z9NwQlQWMzL4rDN9O4P5Ko3yGI=" + }, "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "lodash.set": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", + "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=" + }, "lodash.sortby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", diff --git a/api/package.json b/api/package.json index c467c3162a253b554f8c90d90e10cff550646752..1c4d897f3900ecfbf4eb4eebe6a835b5e164c04b 100644 --- a/api/package.json +++ b/api/package.json @@ -23,6 +23,7 @@ "dependencies": { "@nestjs/axios": "^0.0.1", "@nestjs/common": "^8.0.0", + "@nestjs/config": "^1.0.1", "@nestjs/core": "^8.0.0", "@nestjs/graphql": "^9.0.4", "@nestjs/platform-express": "^8.0.0", diff --git a/api/src/engine/connectors/datashield/main.connector.ts b/api/src/engine/connectors/datashield/main.connector.ts index ee877e21e4f6c94938ffe786a68b198bc429a779..643cd6dadd4955e6a85a875dc2819f5dc208db29 100644 --- a/api/src/engine/connectors/datashield/main.connector.ts +++ b/api/src/engine/connectors/datashield/main.connector.ts @@ -1,9 +1,14 @@ import { HttpService } from "@nestjs/axios"; +import { Observable } from "rxjs"; import { IEngineOptions, IEngineService } from "src/engine/engine.interfaces"; export default class DataShieldService implements IEngineService { constructor(private readonly options: IEngineOptions, private readonly httpService: HttpService) { } + getAlgorithms(): Observable<string> { + throw new Error("Method not implemented."); + } + demo(): string { return "datashield"; } diff --git a/api/src/engine/connectors/exareme/main.connector.ts b/api/src/engine/connectors/exareme/main.connector.ts index b8a6ae8d6bdb640549172a78968d9a9cfe231a92..10aa6527111885ca57e7898d85b69d47f03ede18 100644 --- a/api/src/engine/connectors/exareme/main.connector.ts +++ b/api/src/engine/connectors/exareme/main.connector.ts @@ -1,9 +1,18 @@ import { HttpService } from "@nestjs/axios"; +import { map, Observable } from "rxjs"; import { IEngineOptions, IEngineService } from "src/engine/engine.interfaces"; export default class ExaremeService implements IEngineService { constructor(private readonly options: IEngineOptions, private readonly httpService: HttpService) { } + getAlgorithms(): Observable<string> { + const path = this.options.baseurl + "algorithms"; + + return this.httpService.get<string>(path).pipe( + map(response => response.data) + ); + } + demo(): string { return "exareme" } diff --git a/api/src/engine/engine.controller.ts b/api/src/engine/engine.controller.ts index 5c9e3c59b04377fc4b4bf0e325a4ca1cd2cfd3fb..a5bae286a29e3894151772cf53ffcc44b4901f7f 100644 --- a/api/src/engine/engine.controller.ts +++ b/api/src/engine/engine.controller.ts @@ -1,5 +1,6 @@ import { HttpService } from '@nestjs/axios'; import { Controller, Get, Inject } from '@nestjs/common'; +import { Observable } from 'rxjs'; import { ENGINE_SERVICE } from './engine.constants'; import { IEngineService } from './engine.interfaces'; @@ -11,4 +12,9 @@ export class EngineController { getTest(): string { return this.engineService.demo(); } + + @Get('/algorithms') + getAlgorithms(): Observable<string> { + return this.engineService.getAlgorithms(); + } } diff --git a/api/src/engine/engine.interfaces.ts b/api/src/engine/engine.interfaces.ts index 271cbb1da4556360a61bbad0c38c009a510bdb8f..f9cbacc686ab0c60abc5321904aa25e00f304618 100644 --- a/api/src/engine/engine.interfaces.ts +++ b/api/src/engine/engine.interfaces.ts @@ -1,7 +1,12 @@ +import { Observable } from "rxjs"; + export interface IEngineOptions { type: string; + baseurl: string; } export interface IEngineService { demo(): string; + + getAlgorithms(): Observable<string>; } \ No newline at end of file diff --git a/api/src/main.ts b/api/src/main.ts index af521d9150d9eecb68faf0d83fa7fd789b91ce98..5f3c7f944ec32c52a62e6a4b0bdd081e71b611e6 100644 --- a/api/src/main.ts +++ b/api/src/main.ts @@ -2,7 +2,7 @@ import { NestFactory } from '@nestjs/core'; import { AppModule } from './main/app.module'; async function bootstrap() { - const app = await NestFactory.create(AppModule); - await app.listen(3000); + const app = await NestFactory.create(AppModule, {cors: true}); + await app.listen(process.env.GATEWAY_PORT); } bootstrap(); diff --git a/api/src/main/app.module.ts b/api/src/main/app.module.ts index 302746526a7ea75609e579f01306b0e944413aa5..326ae1d1de2dd87483264dd4a578632a5f275e15 100644 --- a/api/src/main/app.module.ts +++ b/api/src/main/app.module.ts @@ -1,12 +1,18 @@ import { Module } from '@nestjs/common'; +import { ConfigModule } from '@nestjs/config'; import { EngineModule } from 'src/engine/engine.module'; import { AppController } from './app.controller'; import { AppService } from './app.service'; @Module({ imports: [ + ConfigModule.forRoot({ + isGlobal: true, + envFilePath: ['.env', '.env.defaults'] + }), EngineModule.forRootAsync({ - type: process.env.ENGINE_TYPE || "exareme" + type: process.env.ENGINE_TYPE, + baseurl: process.env.ENGINE_BASE_URL, })], controllers: [AppController], providers: [AppService],