676 lines
22 KiB
TypeScript
676 lines
22 KiB
TypeScript
import { Injectable, Logger } from '@nestjs/common';
|
|
import { OracleDBService } from 'src/db/db.service';
|
|
import * as oracledb from 'oracledb';
|
|
import { BadRequestException } from 'src/exceptions/badRequest.exception';
|
|
import { InternalServerException } from 'src/exceptions/internalServerError.exception';
|
|
import { closeOracleDbConnection, fetchCursor, handleError } from 'src/utils/helper';
|
|
|
|
import {
|
|
SPID_DTO, InsertNewServiceProviderDTO,
|
|
UpdateServiceProviderDTO,
|
|
} from 'src/dto/property.dto';
|
|
|
|
@Injectable()
|
|
export class SpService {
|
|
private readonly logger = new Logger(SpService.name);
|
|
|
|
constructor(private readonly oracleDBService: OracleDBService) { }
|
|
|
|
// async insertNewServiceProviderX(body: InsertNewServiceProviderDTO) {
|
|
|
|
// let connection;
|
|
// try {
|
|
// connection = await this.oracleDBService.getConnection();
|
|
// if (!connection) {
|
|
// throw new InternalServerException();
|
|
// }
|
|
|
|
// const result = await connection.execute(
|
|
// `BEGIN
|
|
// USCIB_Managed_Pkg.InsertNewSP(
|
|
// :P_NAME,
|
|
// :P_LOOKUPCODE,
|
|
// :P_ADDRESS1,
|
|
// :P_ADDRESS2,
|
|
// :P_CITY,
|
|
// :P_STATE,
|
|
// :P_ZIP,
|
|
// :P_COUNTRY,
|
|
// :P_ISSUINGREGION,
|
|
// :P_REPLACEMENTREGION,
|
|
// :P_BONDSURETY,
|
|
// :P_CARGOPOLICYNO,
|
|
// :P_CARGOSURETY,
|
|
// :P_USER_ID,
|
|
// :P_NOTES,
|
|
// :P_FILEIDS,
|
|
// :P_CURSOR);
|
|
// END;`,
|
|
// {
|
|
// P_NAME: { val: body.P_NAME, type: oracledb.DB_TYPE_VARCHAR },
|
|
// P_LOOKUPCODE: { val: body.P_LOOKUPCODE, type: oracledb.DB_TYPE_VARCHAR },
|
|
// P_ADDRESS1: { val: body.P_ADDRESS1, type: oracledb.DB_TYPE_VARCHAR },
|
|
// P_ADDRESS2: { val: body.P_ADDRESS2, type: oracledb.DB_TYPE_VARCHAR },
|
|
// P_CITY: { val: body.P_CITY, type: oracledb.DB_TYPE_VARCHAR },
|
|
// P_STATE: { val: body.P_STATE, type: oracledb.DB_TYPE_VARCHAR },
|
|
// P_ZIP: { val: body.P_ZIP, type: oracledb.DB_TYPE_VARCHAR },
|
|
// P_COUNTRY: { val: body.P_COUNTRY, type: oracledb.DB_TYPE_VARCHAR },
|
|
// P_ISSUINGREGION: { val: body.P_ISSUINGREGION, type: oracledb.DB_TYPE_VARCHAR },
|
|
// P_REPLACEMENTREGION: { val: body.P_REPLACEMENTREGION, type: oracledb.DB_TYPE_VARCHAR },
|
|
// P_BONDSURETY: { val: body.P_BONDSURETY, type: oracledb.DB_TYPE_VARCHAR },
|
|
// P_CARGOPOLICYNO: { val: body.P_CARGOPOLICYNO, type: oracledb.DB_TYPE_VARCHAR },
|
|
// P_CARGOSURETY: { val: body.P_CARGOSURETY, type: oracledb.DB_TYPE_VARCHAR },
|
|
// P_USER_ID: { val: body.P_USER_ID, type: oracledb.DB_TYPE_VARCHAR },
|
|
// P_NOTES: { val: body.P_NOTES, type: oracledb.DB_TYPE_VARCHAR },
|
|
// P_FILEIDS: { val: body.P_FILEIDS, type: oracledb.DB_TYPE_VARCHAR },
|
|
// P_CURSOR: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT }
|
|
// },
|
|
// {
|
|
// outFormat: oracledb.OUT_FORMAT_OBJECT,
|
|
// },
|
|
// );
|
|
// await connection.commit();
|
|
|
|
// const fres = await result.outBinds.P_CURSOR.getRows();
|
|
|
|
// if (fres.length > 0 && fres[0].ERRORMESG) {
|
|
// this.logger.warn(fres[0].ERRORMESG);
|
|
// throw new BadRequestException(fres[0].ERRORMESG)
|
|
// }
|
|
|
|
// // return fres[0];
|
|
// return { statusCode: 201, message: "Createdted Successfully", ...fres[0] };
|
|
// } catch (error) {
|
|
// if (error instanceof BadRequestException) {
|
|
// this.logger.warn(error.message);
|
|
// throw error;
|
|
// }
|
|
// this.logger.error('insertNewServiceProvider failed', error.stack || error);
|
|
// throw new InternalServerException();
|
|
// } finally {
|
|
// if (connection) {
|
|
// try {
|
|
// await connection.close();
|
|
// } catch (closeErr) {
|
|
// this.logger.error('Failed to close DB connection', closeErr);
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
|
|
async insertNewServiceProvider(body: InsertNewServiceProviderDTO) {
|
|
const newBody = {
|
|
P_NAME: null,
|
|
P_LOOKUPCODE: null,
|
|
P_ADDRESS1: null,
|
|
P_ADDRESS2: null,
|
|
P_CITY: null,
|
|
P_STATE: null,
|
|
P_ZIP: null,
|
|
P_COUNTRY: null,
|
|
P_ISSUINGREGION: null,
|
|
P_REPLACEMENTREGION: null,
|
|
P_BONDSURETY: null,
|
|
P_CARGOPOLICYNO: null,
|
|
P_CARGOSURETY: null,
|
|
P_USER_ID: null
|
|
};
|
|
|
|
const reqBody = JSON.parse(JSON.stringify(body));
|
|
|
|
function setEmptyStringsToNull(obj) {
|
|
Object.keys(obj).forEach((key) => {
|
|
if (typeof obj[key] === 'object' && obj[key] !== null) {
|
|
setEmptyStringsToNull(obj[key]);
|
|
} else if (obj[key] === '') {
|
|
obj[key] = null;
|
|
}
|
|
});
|
|
}
|
|
|
|
setEmptyStringsToNull(reqBody);
|
|
|
|
const finalBody: InsertNewServiceProviderDTO = { ...newBody, ...reqBody };
|
|
|
|
let connection;
|
|
try {
|
|
connection = await this.oracleDBService.getConnection();
|
|
|
|
const result = await connection.execute(
|
|
`BEGIN
|
|
USCIB_Managed_Pkg.InsertNewSP(
|
|
:P_NAME,
|
|
:P_LOOKUPCODE,
|
|
:P_ADDRESS1,
|
|
:P_ADDRESS2,
|
|
:P_CITY,
|
|
:P_STATE,
|
|
:P_ZIP,
|
|
:P_COUNTRY,
|
|
:P_ISSUINGREGION,
|
|
:P_REPLACEMENTREGION,
|
|
:P_BONDSURETY,
|
|
:P_CARGOPOLICYNO,
|
|
:P_CARGOSURETY,
|
|
:P_USER_ID,
|
|
:P_NOTES,
|
|
:P_FILEIDS,
|
|
:P_CURSOR);
|
|
END;`,
|
|
{
|
|
P_NAME: { val: finalBody.P_NAME, type: oracledb.DB_TYPE_VARCHAR },
|
|
P_LOOKUPCODE: { val: finalBody.P_LOOKUPCODE, type: oracledb.DB_TYPE_VARCHAR },
|
|
P_ADDRESS1: { val: finalBody.P_ADDRESS1, type: oracledb.DB_TYPE_VARCHAR },
|
|
P_ADDRESS2: { val: finalBody.P_ADDRESS2, type: oracledb.DB_TYPE_VARCHAR },
|
|
P_CITY: { val: finalBody.P_CITY, type: oracledb.DB_TYPE_VARCHAR },
|
|
P_STATE: { val: finalBody.P_STATE, type: oracledb.DB_TYPE_VARCHAR },
|
|
P_ZIP: { val: finalBody.P_ZIP, type: oracledb.DB_TYPE_VARCHAR },
|
|
P_COUNTRY: { val: finalBody.P_COUNTRY, type: oracledb.DB_TYPE_VARCHAR },
|
|
P_ISSUINGREGION: { val: finalBody.P_ISSUINGREGION, type: oracledb.DB_TYPE_VARCHAR },
|
|
P_REPLACEMENTREGION: { val: finalBody.P_REPLACEMENTREGION, type: oracledb.DB_TYPE_VARCHAR },
|
|
P_BONDSURETY: { val: finalBody.P_BONDSURETY, type: oracledb.DB_TYPE_VARCHAR },
|
|
P_CARGOPOLICYNO: { val: finalBody.P_CARGOPOLICYNO, type: oracledb.DB_TYPE_VARCHAR },
|
|
P_CARGOSURETY: { val: finalBody.P_CARGOSURETY, type: oracledb.DB_TYPE_VARCHAR },
|
|
P_USER_ID: { val: finalBody.P_USER_ID, type: oracledb.DB_TYPE_VARCHAR },
|
|
P_NOTES: { val: finalBody.P_NOTES, type: oracledb.DB_TYPE_VARCHAR },
|
|
P_FILEIDS: { val: finalBody.P_FILEIDS, type: oracledb.DB_TYPE_VARCHAR },
|
|
P_CURSOR: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT }
|
|
},
|
|
{ outFormat: oracledb.OUT_FORMAT_OBJECT }
|
|
);
|
|
|
|
const outBinds = result.outBinds;
|
|
if (!outBinds?.P_CURSOR) {
|
|
this.logger.error('One or more expected cursors are missing from stored procedure output.');
|
|
throw new InternalServerException("Incomplete data received from the database.");
|
|
}
|
|
|
|
|
|
let fres: any = await fetchCursor(outBinds.P_CURSOR, SpService.name);
|
|
|
|
if (fres.length > 0 && fres[0].ERRORMESG) {
|
|
this.logger.warn(fres[0].ERRORMESG);
|
|
throw new BadRequestException(fres[0].ERRORMESG)
|
|
}
|
|
|
|
return { statusCode: 201, message: "Createdted Successfully", ...fres[0] };
|
|
|
|
} catch (error) {
|
|
handleError(error, SpService.name)
|
|
} finally {
|
|
await closeOracleDbConnection(connection, SpService.name)
|
|
}
|
|
}
|
|
|
|
// async updateServiceProviderX(body: UpdateServiceProviderDTO) {
|
|
|
|
// const newBody = {
|
|
// p_spid: null,
|
|
// p_name: null,
|
|
// P_LOOKUPCODE: null,
|
|
// P_ADDRESS1: null,
|
|
// P_ADDRESS2: null,
|
|
// P_CITY: null,
|
|
// P_STATE: null,
|
|
// P_ZIP: null,
|
|
// P_COUNTRY: null,
|
|
// P_ISSUINGREGION: null,
|
|
// P_REPLACEMENTREGION: null,
|
|
// P_BONDSURETY: null,
|
|
// P_CARGOPOLICYNO: null,
|
|
// P_CARGOSURETY: null,
|
|
// P_USER_ID: null
|
|
// };
|
|
|
|
// const reqBody = JSON.parse(JSON.stringify(body));
|
|
|
|
// function setEmptyStringsToNull(obj) {
|
|
// Object.keys(obj).forEach((key) => {
|
|
// if (typeof obj[key] === 'object' && obj[key] !== null) {
|
|
// setEmptyStringsToNull(obj[key]);
|
|
// } else if (obj[key] === '') {
|
|
// obj[key] = null;
|
|
// }
|
|
// });
|
|
// }
|
|
|
|
// setEmptyStringsToNull(reqBody);
|
|
|
|
// const finalBody: UpdateServiceProviderDTO = { ...newBody, ...reqBody };
|
|
|
|
// let connection;
|
|
// try {
|
|
// connection = await this.oracleDBService.getConnection();
|
|
// if (!connection) {
|
|
// throw new InternalServerException();
|
|
// }
|
|
|
|
// const result = await connection.execute(
|
|
// `BEGIN
|
|
// USCIB_Managed_Pkg.UpdateSP(
|
|
// :P_SPID,
|
|
// :P_NAME,
|
|
// :P_LOOKUPCODE,
|
|
// :P_ADDRESS1,
|
|
// :P_ADDRESS2,
|
|
// :P_CITY,
|
|
// :P_STATE,
|
|
// :P_ZIP,
|
|
// :P_COUNTRY,
|
|
// :P_BONDSURETY,
|
|
// :P_CARGOPOLICYNO,
|
|
// :P_CARGOSURETY,
|
|
// :P_REPLACEMENTREGION,
|
|
// :P_ISSUINGREGION,
|
|
// :P_USER_ID,
|
|
// :P_NOTES,
|
|
// :P_FILEIDS,
|
|
// :P_CURSOR);
|
|
// END;`,
|
|
// {
|
|
// P_SPID: {
|
|
// val: finalBody.P_SPID,
|
|
// type: oracledb.DB_TYPE_NUMBER,
|
|
// },
|
|
// P_NAME: {
|
|
// val: finalBody.P_NAME,
|
|
// type: oracledb.DB_TYPE_VARCHAR,
|
|
// },
|
|
// P_LOOKUPCODE: {
|
|
// val: finalBody.P_LOOKUPCODE,
|
|
// type: oracledb.DB_TYPE_VARCHAR,
|
|
// },
|
|
// P_ADDRESS1: {
|
|
// val: finalBody.P_ADDRESS1,
|
|
// type: oracledb.DB_TYPE_VARCHAR,
|
|
// },
|
|
// P_ADDRESS2: {
|
|
// val: finalBody.P_ADDRESS2,
|
|
// type: oracledb.DB_TYPE_VARCHAR,
|
|
// },
|
|
// P_CITY: {
|
|
// val: finalBody.P_CITY,
|
|
// type: oracledb.DB_TYPE_VARCHAR,
|
|
// },
|
|
// P_STATE: {
|
|
// val: finalBody.P_STATE,
|
|
// type: oracledb.DB_TYPE_VARCHAR,
|
|
// },
|
|
// P_ZIP: {
|
|
// val: finalBody.P_ZIP,
|
|
// type: oracledb.DB_TYPE_VARCHAR,
|
|
// },
|
|
// P_COUNTRY: {
|
|
// val: finalBody.P_COUNTRY,
|
|
// type: oracledb.DB_TYPE_VARCHAR,
|
|
// },
|
|
// P_BONDSURETY: {
|
|
// val: finalBody.P_BONDSURETY,
|
|
// type: oracledb.DB_TYPE_VARCHAR,
|
|
// },
|
|
// P_CARGOPOLICYNO: {
|
|
// val: finalBody.P_CARGOPOLICYNO,
|
|
// type: oracledb.DB_TYPE_VARCHAR,
|
|
// },
|
|
// P_CARGOSURETY: {
|
|
// val: finalBody.P_CARGOSURETY,
|
|
// type: oracledb.DB_TYPE_VARCHAR,
|
|
// },
|
|
// P_REPLACEMENTREGION: {
|
|
// val: finalBody.P_REPLACEMENTREGION,
|
|
// type: oracledb.DB_TYPE_VARCHAR,
|
|
// },
|
|
// P_ISSUINGREGION: {
|
|
// val: finalBody.P_ISSUINGREGION,
|
|
// type: oracledb.DB_TYPE_VARCHAR,
|
|
// },
|
|
// P_USER_ID: {
|
|
// val: finalBody.P_USER_ID,
|
|
// type: oracledb.DB_TYPE_VARCHAR,
|
|
// },
|
|
// P_NOTES: {
|
|
// val: finalBody.P_NOTES,
|
|
// type: oracledb.DB_TYPE_VARCHAR,
|
|
// },
|
|
// P_FILEIDS: {
|
|
// val: finalBody.P_FILEIDS,
|
|
// type: oracledb.DB_TYPE_VARCHAR,
|
|
// },
|
|
// P_CURSOR: {
|
|
// type: oracledb.CURSOR,
|
|
// dir: oracledb.BIND_OUT,
|
|
// },
|
|
// },
|
|
// {
|
|
// outFormat: oracledb.OUT_FORMAT_OBJECT,
|
|
// },
|
|
// );
|
|
|
|
// await connection.commit();
|
|
|
|
// const fres = await result.outBinds.P_CURSOR.getRows();
|
|
|
|
// if (fres.length > 0 && fres[0].ERRORMESG) {
|
|
// this.logger.warn(fres[0].ERRORMESG);
|
|
// throw new BadRequestException(fres[0].ERRORMESG)
|
|
// }
|
|
|
|
// return { statusCode: 200, message: "Updated Successfully" };
|
|
// } catch (error) {
|
|
// if (error instanceof BadRequestException) {
|
|
// this.logger.warn(error.message);
|
|
// throw error;
|
|
// }
|
|
// this.logger.error('updateServiceProvider failed', error.stack || error);
|
|
// throw new InternalServerException();
|
|
// } finally {
|
|
// if (connection) {
|
|
// try {
|
|
// await connection.close();
|
|
// } catch (closeErr) {
|
|
// this.logger.error('Failed to close DB connection', closeErr);
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
|
|
async updateServiceProvider(body: UpdateServiceProviderDTO) {
|
|
const newBody = {
|
|
P_SPID: null,
|
|
P_NAME: null,
|
|
P_LOOKUPCODE: null,
|
|
P_ADDRESS1: null,
|
|
P_ADDRESS2: null,
|
|
P_CITY: null,
|
|
P_STATE: null,
|
|
P_ZIP: null,
|
|
P_COUNTRY: null,
|
|
P_ISSUINGREGION: null,
|
|
P_REPLACEMENTREGION: null,
|
|
P_BONDSURETY: null,
|
|
P_CARGOPOLICYNO: null,
|
|
P_CARGOSURETY: null,
|
|
P_USER_ID: null
|
|
};
|
|
|
|
const reqBody = JSON.parse(JSON.stringify(body));
|
|
|
|
function setEmptyStringsToNull(obj) {
|
|
Object.keys(obj).forEach((key) => {
|
|
if (typeof obj[key] === 'object' && obj[key] !== null) {
|
|
setEmptyStringsToNull(obj[key]);
|
|
} else if (obj[key] === '') {
|
|
obj[key] = null;
|
|
}
|
|
});
|
|
}
|
|
|
|
setEmptyStringsToNull(reqBody);
|
|
|
|
const finalBody: UpdateServiceProviderDTO = { ...newBody, ...reqBody };
|
|
|
|
let connection;
|
|
try {
|
|
connection = await this.oracleDBService.getConnection();
|
|
|
|
const result = await connection.execute(
|
|
`BEGIN
|
|
USCIB_Managed_Pkg.UpdateSP(
|
|
:P_SPID,
|
|
:P_NAME,
|
|
:P_LOOKUPCODE,
|
|
:P_ADDRESS1,
|
|
:P_ADDRESS2,
|
|
:P_CITY,
|
|
:P_STATE,
|
|
:P_ZIP,
|
|
:P_COUNTRY,
|
|
:P_ISSUINGREGION,
|
|
:P_REPLACEMENTREGION,
|
|
:P_BONDSURETY,
|
|
:P_CARGOPOLICYNO,
|
|
:P_CARGOSURETY,
|
|
:P_USER_ID,
|
|
:P_NOTES,
|
|
:P_FILEIDS,
|
|
:P_CURSOR);
|
|
END;`,
|
|
{
|
|
P_SPID: { val: finalBody.P_SPID, type: oracledb.DB_TYPE_NUMBER },
|
|
P_NAME: { val: finalBody.P_NAME, type: oracledb.DB_TYPE_VARCHAR },
|
|
P_LOOKUPCODE: { val: finalBody.P_LOOKUPCODE, type: oracledb.DB_TYPE_VARCHAR },
|
|
P_ADDRESS1: { val: finalBody.P_ADDRESS1, type: oracledb.DB_TYPE_VARCHAR },
|
|
P_ADDRESS2: { val: finalBody.P_ADDRESS2, type: oracledb.DB_TYPE_VARCHAR },
|
|
P_CITY: { val: finalBody.P_CITY, type: oracledb.DB_TYPE_VARCHAR },
|
|
P_STATE: { val: finalBody.P_STATE, type: oracledb.DB_TYPE_VARCHAR },
|
|
P_ZIP: { val: finalBody.P_ZIP, type: oracledb.DB_TYPE_VARCHAR },
|
|
P_COUNTRY: { val: finalBody.P_COUNTRY, type: oracledb.DB_TYPE_VARCHAR },
|
|
P_ISSUINGREGION: { val: finalBody.P_ISSUINGREGION, type: oracledb.DB_TYPE_VARCHAR },
|
|
P_REPLACEMENTREGION: { val: finalBody.P_REPLACEMENTREGION, type: oracledb.DB_TYPE_VARCHAR },
|
|
P_BONDSURETY: { val: finalBody.P_BONDSURETY, type: oracledb.DB_TYPE_VARCHAR },
|
|
P_CARGOPOLICYNO: { val: finalBody.P_CARGOPOLICYNO, type: oracledb.DB_TYPE_VARCHAR },
|
|
P_CARGOSURETY: { val: finalBody.P_CARGOSURETY, type: oracledb.DB_TYPE_VARCHAR },
|
|
P_USER_ID: { val: finalBody.P_USER_ID, type: oracledb.DB_TYPE_VARCHAR },
|
|
P_NOTES: { val: finalBody.P_NOTES, type: oracledb.DB_TYPE_VARCHAR },
|
|
P_FILEIDS: { val: finalBody.P_FILEIDS, type: oracledb.DB_TYPE_VARCHAR },
|
|
P_CURSOR: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT }
|
|
},
|
|
{ outFormat: oracledb.OUT_FORMAT_OBJECT }
|
|
);
|
|
|
|
const outBinds = result.outBinds;
|
|
if (!outBinds?.P_CURSOR) {
|
|
this.logger.error('One or more expected cursors are missing from stored procedure output.');
|
|
throw new InternalServerException("Incomplete data received from the database.");
|
|
}
|
|
|
|
let fres: any = await fetchCursor(outBinds.P_CURSOR, SpService.name);
|
|
|
|
if (fres.length > 0 && fres[0].ERRORMESG) {
|
|
this.logger.warn(fres[0].ERRORMESG);
|
|
throw new BadRequestException(fres[0].ERRORMESG)
|
|
}
|
|
|
|
return { statusCode: 200, message: "Updated Successfully", ...fres[0] };
|
|
|
|
} catch (error) {
|
|
handleError(error, SpService.name)
|
|
} finally {
|
|
await closeOracleDbConnection(connection, SpService.name)
|
|
}
|
|
}
|
|
|
|
// async getAllServiceprovidersX() {
|
|
// let connection;
|
|
// let rows: any = [];
|
|
// try {
|
|
// connection = await this.oracleDBService.getConnection();
|
|
// if (!connection) {
|
|
// throw new InternalServerException();
|
|
// }
|
|
|
|
// const result = await connection.execute(
|
|
// `BEGIN
|
|
// USCIB_Managed_Pkg.GetAllSPs(:P_CURSOR);
|
|
// END;`,
|
|
// {
|
|
// P_CURSOR: {
|
|
// type: oracledb.CURSOR,
|
|
// dir: oracledb.BIND_OUT,
|
|
// },
|
|
// },
|
|
// {
|
|
// outFormat: oracledb.OUT_FORMAT_OBJECT,
|
|
// },
|
|
// );
|
|
|
|
// if (result.outBinds && result.outBinds.P_CURSOR) {
|
|
// const cursor = result.outBinds.P_CURSOR;
|
|
// let rowsBatch;
|
|
|
|
// do {
|
|
// rowsBatch = await cursor.getRows(100);
|
|
// rows = rows.concat(rowsBatch);
|
|
// } while (rowsBatch.length > 0);
|
|
|
|
// await cursor.close();
|
|
|
|
// if (rows.length > 0 && rows[0].ERRORMESG) {
|
|
// throw new BadRequestException(rows[0].ERRORMESG);
|
|
// }
|
|
|
|
// return rows;
|
|
// } else {
|
|
// throw new BadRequestException();
|
|
// }
|
|
// } catch (error) {
|
|
// if (error instanceof BadRequestException) {
|
|
// this.logger.warn(error.message);
|
|
// throw error;
|
|
// }
|
|
// this.logger.error('getAllServiceproviders failed', error.stack || error);
|
|
// throw new InternalServerException();
|
|
// } finally {
|
|
// if (connection) {
|
|
// try {
|
|
// await connection.close();
|
|
// } catch (closeErr) {
|
|
// this.logger.error('Failed to close DB connection', closeErr);
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
|
|
async getAllServiceproviders() {
|
|
|
|
let connection;
|
|
try {
|
|
connection = await this.oracleDBService.getConnection();
|
|
|
|
const result = await connection.execute(
|
|
`BEGIN
|
|
USCIB_Managed_Pkg.GetAllSPs(:P_CURSOR);
|
|
END;`,
|
|
{
|
|
P_CURSOR: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT }
|
|
},
|
|
{ outFormat: oracledb.OUT_FORMAT_OBJECT }
|
|
);
|
|
|
|
const outBinds = result.outBinds;
|
|
if (!outBinds?.P_CURSOR) {
|
|
this.logger.error('One or more expected cursors are missing from stored procedure output.');
|
|
throw new InternalServerException("Incomplete data received from the database.");
|
|
}
|
|
|
|
return await fetchCursor(outBinds.P_CURSOR, SpService.name);
|
|
|
|
} catch (error) {
|
|
handleError(error, SpService.name)
|
|
} finally {
|
|
await closeOracleDbConnection(connection, SpService.name)
|
|
}
|
|
}
|
|
|
|
// async getServiceproviderByIDX(body: SPID_DTO) {
|
|
// let connection;
|
|
// let rows: any = [];
|
|
// try {
|
|
// connection = await this.oracleDBService.getConnection();
|
|
// if (!connection) {
|
|
// throw new InternalServerException();
|
|
// }
|
|
|
|
// const result = await connection.execute(
|
|
// `BEGIN
|
|
// USCIB_Managed_Pkg.GetSPbySPID(:P_SPID,:P_CURSOR);
|
|
// END;`,
|
|
// {
|
|
// P_SPID: {
|
|
// val: body.P_SPID,
|
|
// type: oracledb.DB_TYPE_NUMBER,
|
|
// },
|
|
// P_CURSOR: {
|
|
// type: oracledb.CURSOR,
|
|
// dir: oracledb.BIND_OUT,
|
|
// },
|
|
// },
|
|
// {
|
|
// outFormat: oracledb.OUT_FORMAT_OBJECT,
|
|
// },
|
|
// );
|
|
|
|
// if (result.outBinds && result.outBinds.P_CURSOR) {
|
|
// const cursor = result.outBinds.P_CURSOR;
|
|
// let rowsBatch;
|
|
|
|
// do {
|
|
// rowsBatch = await cursor.getRows(100);
|
|
// rows = rows.concat(rowsBatch);
|
|
// } while (rowsBatch.length > 0);
|
|
|
|
// await cursor.close();
|
|
// } else {
|
|
// throw new BadRequestException();
|
|
// }
|
|
|
|
// if (rows.length > 0 && rows[0].ERRORMESG) {
|
|
// throw new BadRequestException(rows[0].ERRORMESG);
|
|
// }
|
|
|
|
// return rows;
|
|
// } catch (error) {
|
|
// if (error instanceof BadRequestException) {
|
|
// this.logger.warn(error.message);
|
|
// throw error;
|
|
// }
|
|
// else if (error.message === "NJS-107: invalid cursor") {
|
|
// this.logger.warn(error.message);
|
|
// throw new BadRequestException();
|
|
// }
|
|
// this.logger.error('getServiceproviderByID failed', error.stack || error);
|
|
// throw new InternalServerException();
|
|
// } finally {
|
|
// if (connection) {
|
|
// try {
|
|
// await connection.close();
|
|
// } catch (closeErr) {
|
|
// this.logger.error('Failed to close DB connection', closeErr);
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
|
|
async getServiceproviderByID(body: SPID_DTO) {
|
|
|
|
let connection;
|
|
try {
|
|
connection = await this.oracleDBService.getConnection();
|
|
|
|
const result = await connection.execute(
|
|
`BEGIN
|
|
USCIB_Managed_Pkg.GetSPbySPID(:P_SPID,:P_CURSOR);
|
|
END;`,
|
|
{
|
|
P_SPID: { val: body.P_SPID, type: oracledb.DB_TYPE_NUMBER },
|
|
P_CURSOR: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT }
|
|
},
|
|
{ outFormat: oracledb.OUT_FORMAT_OBJECT }
|
|
);
|
|
|
|
const outBinds = result.outBinds;
|
|
if (!outBinds?.P_CURSOR) {
|
|
this.logger.error('One or more expected cursors are missing from stored procedure output.');
|
|
throw new InternalServerException("Incomplete data received from the database.");
|
|
}
|
|
|
|
return await fetchCursor(outBinds.P_CURSOR, SpService.name);
|
|
|
|
} catch (error) {
|
|
handleError(error, SpService.name)
|
|
} finally {
|
|
await closeOracleDbConnection(connection, SpService.name)
|
|
}
|
|
}
|
|
}
|