From c3812b1bf19e8109cf412727dd889a8b0ecb7391 Mon Sep 17 00:00:00 2001 From: Raphael Rivas Date: Wed, 28 Feb 2024 11:21:52 -0300 Subject: [PATCH] feat:bq-transacao repository --- package-lock.json | 29 ++++-- package.json | 1 + .../bq-transacao.repository.service.spec.ts | 89 +++++++++++++++++++ .../bq-transacao.repository.service.ts | 20 ++--- yarn.lock | 7 +- 5 files changed, 129 insertions(+), 17 deletions(-) create mode 100644 src/bigquery/repositories/bq-transacao.repository.service.spec.ts diff --git a/package-lock.json b/package-lock.json index 2061f437..ad366f3f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,6 +31,7 @@ "class-transformer": "0.5.1", "class-validator": "0.14.0", "date-fns": "^2.30.0", + "dotenv": "^16.4.5", "fb": "2.0.0", "gerador-validador-cpf": "^5.0.2", "google-auth-library": "8.8.0", @@ -3431,6 +3432,14 @@ "rxjs": "^6.0.0 || ^7.2.0" } }, + "node_modules/@nestjs/config/node_modules/dotenv": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", + "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", + "engines": { + "node": ">=12" + } + }, "node_modules/@nestjs/config/node_modules/uuid": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", @@ -6470,11 +6479,14 @@ } }, "node_modules/dotenv": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", - "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", "engines": { "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" } }, "node_modules/dotenv-expand": { @@ -18463,6 +18475,11 @@ "uuid": "9.0.0" }, "dependencies": { + "dotenv": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", + "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==" + }, "uuid": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", @@ -20839,9 +20856,9 @@ } }, "dotenv": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", - "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==" + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==" }, "dotenv-expand": { "version": "10.0.0", diff --git a/package.json b/package.json index 4803c63b..c6af548b 100644 --- a/package.json +++ b/package.json @@ -52,6 +52,7 @@ "class-transformer": "0.5.1", "class-validator": "0.14.0", "date-fns": "^2.30.0", + "dotenv": "^16.4.5", "fb": "2.0.0", "gerador-validador-cpf": "^5.0.2", "google-auth-library": "8.8.0", diff --git a/src/bigquery/repositories/bq-transacao.repository.service.spec.ts b/src/bigquery/repositories/bq-transacao.repository.service.spec.ts new file mode 100644 index 00000000..f68d0a76 --- /dev/null +++ b/src/bigquery/repositories/bq-transacao.repository.service.spec.ts @@ -0,0 +1,89 @@ +import { Provider } from '@nestjs/common'; +import { Test, TestingModule } from '@nestjs/testing'; +import { BigqueryService } from 'src/bigquery/bigquery.service'; +import { SettingsService } from 'src/settings/settings.service'; +import { BqTransacaoRepositoryService } from './bq-transacao.repository.service'; +import { ConfigService } from '@nestjs/config'; +import { resolve } from 'path'; +import { config } from 'dotenv'; +import { BigqueryEnvironment } from 'src/settings/enums/bigquery-env.enum'; +import { SettingEntity } from 'src/settings/entities/setting.entity'; + +describe('BqTransacaoRepositoryService', () => { + let settingsService: SettingsService; + let bqTransacaoRepository: BqTransacaoRepositoryService; + const mockBqGoogleCredentials = () => ({ + 'google.clientApiType': process.env.GOOGLE_CLIENT_API_TYPE, + 'google.clientApiProjectId': process.env.GOOGLE_CLIENT_API_PROJECT_ID, + 'google.clientApiPrivateKeyId': + process.env.GOOGLE_CLIENT_API_PRIVATE_KEY_ID, + 'google.clientApiPrivateKey': process.env.GOOGLE_CLIENT_API_PRIVATE_KEY, + 'google.clientApiClientEmail': process.env.GOOGLE_CLIENT_API_CLIENT_EMAIL, + 'google.clientApiClientId': process.env.GOOGLE_CLIENT_API_CLIENT_ID, + 'google.clientApiAuthUri': process.env.GOOGLE_CLIENT_API_AUTH_URI, + 'google.clientApiTokenUri': process.env.GOOGLE_CLIENT_API_TOKEN_URI, + 'google.clientApiAuthProviderX509CertUrl': + process.env.GOOGLE_CLIENT_API_AUTH_PROVIDER_X509_CERT_URL, + 'google.clientApiClientX509CertUrl': + process.env.GOOGLE_CLIENT_API_CLIENT_X509_CERT_URL, + 'google.clientApiUniverseDomain': + process.env.GOOGLE_CLIENT_API_UNIVERSE_DOMAIN, + }); + + beforeAll(() => { + const envPath = resolve(__dirname, '../../../.env'); + config({ path: envPath }); + }); + + beforeEach(async () => { + const settingsServiceMock = { + provide: SettingsService, + useValue: { + getOneBySettingData: jest.fn(), + }, + } as Provider; + const configServiceMock = { + provide: ConfigService, + useValue: { + getOrThrow: jest.fn((key: string) => mockBqGoogleCredentials()[key]), + }, + } as Provider; + const module: TestingModule = await Test.createTestingModule({ + providers: [ + BigqueryService, + BqTransacaoRepositoryService, + settingsServiceMock, + configServiceMock, + ], + }).compile(); + + settingsService = module.get(SettingsService); + bqTransacaoRepository = module.get(BqTransacaoRepositoryService); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + it('should be defined', () => { + expect(settingsService).toBeDefined(); + }); + + describe('findTransacaoBy', () => { + it('should return some data', async () => { + // Arrange + jest.spyOn(settingsService, 'getOneBySettingData').mockResolvedValueOnce({ + getValueAsString: () => BigqueryEnvironment.Development, + } as SettingEntity); + + // Act + const result = await bqTransacaoRepository.findTransacaoBy({ + startDate: new Date('2023-06-01'), + endDate: new Date('2024-06-01'), + }); + + // Assert + expect(result.length).toBeGreaterThan(0); + }); + }); +}); diff --git a/src/bigquery/repositories/bq-transacao.repository.service.ts b/src/bigquery/repositories/bq-transacao.repository.service.ts index 14da7edd..d705c768 100644 --- a/src/bigquery/repositories/bq-transacao.repository.service.ts +++ b/src/bigquery/repositories/bq-transacao.repository.service.ts @@ -1,16 +1,16 @@ import { Injectable, Logger } from '@nestjs/common'; -import { BQSInstances, BigqueryService } from '../bigquery.service'; -import { BqTransacao } from '../entities/transacao.bq-entity'; -import { IBqFetchTransacao } from '../interfaces/bq-find-transacao-by.interface'; -import { SettingsService } from 'src/settings/settings.service'; import { appSettings } from 'src/settings/app.settings'; import { BigqueryEnvironment } from 'src/settings/enums/bigquery-env.enum'; -import { QueryBuilder } from 'src/utils/query-builder/query-builder'; -import { isCpfOrCnpj } from 'src/utils/cpf-cnpj'; +import { SettingsService } from 'src/settings/settings.service'; import { TRIntegrationTypeMap } from 'src/ticket-revenues/maps/ticket-revenues.map'; +import { isCpfOrCnpj } from 'src/utils/cpf-cnpj'; +import { QueryBuilder } from 'src/utils/query-builder/query-builder'; +import { BQSInstances, BigqueryService } from '../bigquery.service'; +import { BqTransacao } from '../entities/transacao.bq-entity'; +import { IBqFetchTransacao } from '../interfaces/bq-find-transacao-by.interface'; import { BqTsansacaoTipoIntegracaoMap } from '../maps/bq-transacao-tipo-integracao.map'; -import { BqTransacaoTipoTransacaoMap } from '../maps/bq-transacao-tipo-transacao.map'; import { BqTransacaoTipoPagamentoMap } from '../maps/bq-transacao-tipo-pagamento.map'; +import { BqTransacaoTipoTransacaoMap } from '../maps/bq-transacao-tipo-transacao.map'; @Injectable() export class BqTransacaoRepositoryService { @@ -37,8 +37,8 @@ export class BqTransacaoRepositoryService { const query = ` SELECT - CAST(t.data AS STRING) AS partitionDate, - t.hora AS processingHour, + CAST(t.data AS STRING) AS \`data\`, + t.hora AS hora, CAST(t.datetime_transacao AS STRING) AS datetime_transacao, CAST(t.datetime_processamento AS STRING) AS datetime_processamento, t.datetime_captura AS captureDateTime, @@ -70,7 +70,7 @@ export class BqTransacaoRepositoryService { `UNION ALL SELECT ${'null, '.repeat(22)} (${qArgs.countQuery}) AS count, 'empty' AS status` + - `\nORDER BY t.data DESC, t.hora DESC` + + `\nORDER BY \`data\` DESC, hora DESC` + (qArgs?.limit !== undefined ? `\nLIMIT ${qArgs.limit + 1}` : '') + (qArgs?.offset !== undefined ? `\nOFFSET ${qArgs.offset}` : ''); const queryResult = await this.bigqueryService.query( diff --git a/yarn.lock b/yarn.lock index 7445cb19..80d45ad6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4080,7 +4080,12 @@ "resolved" "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz" "version" "10.0.0" -"dotenv@^16.0.3", "dotenv@16.0.3": +"dotenv@^16.0.3", "dotenv@^16.4.5": + "integrity" "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==" + "resolved" "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz" + "version" "16.4.5" + +"dotenv@16.0.3": "integrity" "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==" "resolved" "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz" "version" "16.0.3"