Bom dia!
Consegui realizar a conexão.
Para quem precisar vou deixar um modelo do código:
Criei um provider com o Pool de conexões:
import { ConfigService } from '@nestjs/config';
import { createPool, initOracleClient } from 'oracledb';
import { IConfiguracaoDatabase } from 'src/config/configuracao';
import { ORACLE } from '../constants/database';
// eslint-disable-next-line @typescript-eslint/no-var-requires
const oracledb = require('oracledb');
export const OracleProviderFactory = {
provide: ORACLE,
inject: [ConfigService], //necessário para injetar o service
useFactory: async (configService: ConfigService) => {
try {
const configDatabase =
configService.get<IConfiguracaoDatabase>('database');
if (!process.env.LD_LIBRARY_PATH) {
initOracleClient({ libDir: './lib/instantclient_21_3' });
}
initOracleClient({ libDir: process.env.LD_LIBRARY_PATH });
oracledb.outFormat = oracledb.OUT_FORMAT_OBJECT;
await createPool({
user: configDatabase.user,
password: configDatabase.password,
connectionString: configDatabase.connectionString,
poolAlias: ORACLE,
poolMax: 5,
poolMin: 1,
});
console.log('Conexão UP!');
} catch (error) {
console.error(error);
}
},
};
Um service para pegar uma conexão do poll
import { Injectable } from '@nestjs/common';
import { Connection, getConnection } from 'oracledb';
@Injectable()
export class OracleService {
async conexao(alias: string): Promise<Connection> {
try {
return await getConnection(alias);
} catch (error) {
console.error(error);
throw new Error(error);
}
}
}
E um Modulo
import { Global, Module } from '@nestjs/common';
import { OracleProviderFactory } from './oracle.provider';
import { OracleService } from './oracle.service';
@Global()
@Module({
providers: [OracleProviderFactory, OracleService],
exports: [OracleService],
})
export class DatabaseModule { }
Ai no service que precisar da conexão, precisa injetar o Service criado para pegar uma conexão:
Modulo de exemplo que vai usar a conexão com o banco
import { Module } from '@nestjs/common';
import { OracleService } from 'src/database/oracle/oracle.service';
@Module({
controllers: [NotaFiscalController],
providers: [OracleService],
imports: [],
})
export class NotaFiscalModule {}
Service de Exemplo que vai utilizar a conexão com o banco
@Injectable()
export class NotaFiscalService {
constructor(
private readonly oracleService: OracleService,
) { }