diff --git a/api/config/custom-environment-variables.json b/api/config/custom-environment-variables.json index dd2bad1dd..2699a221a 100644 --- a/api/config/custom-environment-variables.json +++ b/api/config/custom-environment-variables.json @@ -75,6 +75,7 @@ }, "carto": { "apiKey": "CARTO_API_KEY", - "baseUrl": "CARTO_BASE_URL" + "baseUrl": "CARTO_BASE_URL", + "credentials": "CARTO_CREDENTIALS" } } diff --git a/api/config/default.json b/api/config/default.json index a3075196a..6069b6d9a 100644 --- a/api/config/default.json +++ b/api/config/default.json @@ -84,6 +84,7 @@ }, "carto": { "apiKey": null, - "baseUrl": "null" + "baseUrl": "null", + "credentials": null } } diff --git a/api/src/modules/eudr-alerts/alerts.repository.ts b/api/src/modules/eudr-alerts/alerts.repository.ts index ccea70d49..3dbaaf78f 100644 --- a/api/src/modules/eudr-alerts/alerts.repository.ts +++ b/api/src/modules/eudr-alerts/alerts.repository.ts @@ -1,29 +1,25 @@ import { BigQuery } from '@google-cloud/bigquery'; import { Injectable } from '@nestjs/common'; -import { DataSource, QueryBuilder, SelectQueryBuilder } from 'typeorm'; +import { DataSource, SelectQueryBuilder } from 'typeorm'; import { AlertsOutput } from './dto/alerts-output.dto'; -import { SA } from './SA'; import { ResourceStream } from '@google-cloud/paginator'; import { RowMetadata } from '@google-cloud/bigquery/build/src/table'; +import { IEUDRAlertsRepository } from './eudr.repositoty.interface'; +import { AppConfig } from '../../utils/app.config'; const projectId: string = 'carto-dw-ac-zk2uhih6'; -const BASE_QUERY: string = `SELECT * FROM cartobq.eudr.mock_data LIMIT 1`; - -const BASE_DATASET: string = 'cartobq.eudr.dev_mock_data_optimized'; - const limit: number = 1; @Injectable() -export class AlertsRepository { +export class AlertsRepository implements IEUDRAlertsRepository { bigQueryClient: BigQuery; BASE_DATASET: string = 'cartobq.eudr.dev_mock_data_optimized'; constructor(private readonly dataSource: DataSource) { - //TODO: Implement error handling for missing service account file - + const { credentials } = AppConfig.get('carto'); this.bigQueryClient = new BigQuery({ - credentials: SA, + credentials: JSON.parse(credentials), projectId, }); } diff --git a/api/src/modules/eudr/carto/carto.connector.ts b/api/src/modules/eudr-alerts/carto/carto.connector.ts similarity index 100% rename from api/src/modules/eudr/carto/carto.connector.ts rename to api/src/modules/eudr-alerts/carto/carto.connector.ts diff --git a/api/src/modules/eudr-alerts/eudr.module.ts b/api/src/modules/eudr-alerts/eudr.module.ts index 85eccb432..9e65a3682 100644 --- a/api/src/modules/eudr-alerts/eudr.module.ts +++ b/api/src/modules/eudr-alerts/eudr.module.ts @@ -6,8 +6,11 @@ import { MaterialsModule } from 'modules/materials/materials.module'; import { SuppliersModule } from 'modules/suppliers/suppliers.module'; import { GeoRegionsModule } from 'modules/geo-regions/geo-regions.module'; import { AdminRegionsModule } from 'modules/admin-regions/admin-regions.module'; -import { AlertsRepository } from './alerts.repository'; +import { AlertsRepository } from 'modules/eudr-alerts/alerts.repository'; +export const IEUDRAlertsRepositoryToken = Symbol('IEUDRAlertsRepository'); + +// TODO: Use token injection and refer to the interface, right now I am having a dependencv issue @Module({ imports: [ HttpModule, @@ -16,7 +19,12 @@ import { AlertsRepository } from './alerts.repository'; GeoRegionsModule, AdminRegionsModule, ], - providers: [EudrService, AlertsRepository], + providers: [ + EudrService, + AlertsRepository, + { provide: IEUDRAlertsRepositoryToken, useClass: AlertsRepository }, + ], controllers: [EudrController], + // exports: [IEUDRAlertsRepositoryToken], }) export class EudrModule {} diff --git a/api/src/modules/eudr-alerts/eudr.repositoty.interface.ts b/api/src/modules/eudr-alerts/eudr.repositoty.interface.ts new file mode 100644 index 000000000..12f3de272 --- /dev/null +++ b/api/src/modules/eudr-alerts/eudr.repositoty.interface.ts @@ -0,0 +1,3 @@ +export interface IEUDRAlertsRepository { + select(): any; +} diff --git a/api/src/modules/eudr-alerts/eudr.service.ts b/api/src/modules/eudr-alerts/eudr.service.ts index eaab097cf..01fb0686d 100644 --- a/api/src/modules/eudr-alerts/eudr.service.ts +++ b/api/src/modules/eudr-alerts/eudr.service.ts @@ -1,8 +1,7 @@ -import { Injectable } from '@nestjs/common'; -import { AlertsRepository } from './alerts.repository'; - +import { Inject, Injectable } from '@nestjs/common'; import { ResourceStream } from '@google-cloud/paginator'; import { RowMetadata } from '@google-cloud/bigquery/build/src/table'; +import { AlertsRepository } from './alerts.repository'; @Injectable() export class EudrService { diff --git a/api/src/modules/eudr/carto/cartodb.repository.ts b/api/src/modules/eudr/carto/cartodb.repository.ts deleted file mode 100644 index bf89b34f3..000000000 --- a/api/src/modules/eudr/carto/cartodb.repository.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { HttpService } from '@nestjs/axios'; -import { IEudrRepository } from 'modules/eudr/eudr.repositoty.interface'; -import { Injectable } from '@nestjs/common'; - -@Injectable() -export class CartodbRepository implements IEudrRepository { - constructor(private readonly http: HttpService) {} - - async select(): Promise {} -} diff --git a/api/src/modules/eudr/eudr.repositoty.interface.ts b/api/src/modules/eudr/eudr.repositoty.interface.ts deleted file mode 100644 index 5281989f2..000000000 --- a/api/src/modules/eudr/eudr.repositoty.interface.ts +++ /dev/null @@ -1,3 +0,0 @@ -export interface IEudrRepository { - select(): Promise; -} diff --git a/api/src/modules/notifications/notifications.module.ts b/api/src/modules/notifications/notifications.module.ts index 414187097..af3afaeb4 100644 --- a/api/src/modules/notifications/notifications.module.ts +++ b/api/src/modules/notifications/notifications.module.ts @@ -1,8 +1,10 @@ import { Module } from '@nestjs/common'; import { SendgridEmailService } from 'modules/notifications/email/sendgrid.email.service'; +export const IEmailServiceToken: string = 'IEmailService'; + @Module({ - providers: [{ provide: 'IEmailService', useClass: SendgridEmailService }], - exports: ['IEmailService'], + providers: [{ provide: IEmailServiceToken, useClass: SendgridEmailService }], + exports: [IEmailServiceToken], }) export class NotificationsModule {} diff --git a/api/test/utils/application-manager.ts b/api/test/utils/application-manager.ts index 2351df515..964c52b54 100644 --- a/api/test/utils/application-manager.ts +++ b/api/test/utils/application-manager.ts @@ -9,7 +9,10 @@ import { TestingModuleBuilder } from '@nestjs/testing/testing-module.builder'; import { Type } from '@nestjs/common/interfaces'; import { TestingModule } from '@nestjs/testing/testing-module'; import { isUndefined } from 'lodash'; -import { MockEmailService } from './service-mocks'; +import { MockAlertRepository, MockEmailService } from './service-mocks'; +import { IEUDRAlertsRepositoryToken } from '../../src/modules/eudr-alerts/eudr.module'; +import { IEmailServiceToken } from '../../src/modules/notifications/notifications.module'; +import { AlertsRepository } from 'modules/eudr-alerts/alerts.repository'; export default class ApplicationManager { static readonly regenerateResourcesOnEachTest: boolean = false; @@ -43,8 +46,10 @@ export default class ApplicationManager { Test.createTestingModule({ imports: [AppModule], }) - .overrideProvider('IEmailService') - .useClass(MockEmailService); + .overrideProvider(IEmailServiceToken) + .useClass(MockEmailService) + .overrideProvider(AlertsRepository) + .useClass(MockAlertRepository); ApplicationManager.testApplication.moduleFixture = await testingModuleBuilder.compile(); diff --git a/api/test/utils/service-mocks.ts b/api/test/utils/service-mocks.ts index 1cb4351c0..98626b7b8 100644 --- a/api/test/utils/service-mocks.ts +++ b/api/test/utils/service-mocks.ts @@ -3,6 +3,7 @@ import { SendMailDTO, } from '../../src/modules/notifications/email/email.service.interface'; import { Logger } from '@nestjs/common'; +import { IEUDRAlertsRepository } from 'modules/eudr-alerts/eudr.repositoty.interface'; export class MockEmailService implements IEmailService { logger: Logger = new Logger(MockEmailService.name); @@ -12,3 +13,14 @@ export class MockEmailService implements IEmailService { return Promise.resolve(); } } + +export class MockAlertRepository implements IEUDRAlertsRepository { + logger: Logger = new Logger(MockAlertRepository.name); + + select(): any { + this.logger.warn(`Alert Repository Mock called... `); + return new Promise((resolve) => { + resolve([]); + }); + } +}