From 2f36ece39b5a493fb50633f56d19382c531aeeff Mon Sep 17 00:00:00 2001 From: Kallesh B S Date: Wed, 11 Jun 2025 15:31:20 +0530 Subject: [PATCH] modified holder API according to updated holder spec --- src/dto/manage-holders/manage-holders.dto.ts | 11 ++- .../manage-holders/manage-holders.service.ts | 26 +++---- .../manage-holders.controller.ts | 6 ++ .../manage-holders/manage-holders.service.ts | 78 +++++++++++++++++-- 4 files changed, 98 insertions(+), 23 deletions(-) diff --git a/src/dto/manage-holders/manage-holders.dto.ts b/src/dto/manage-holders/manage-holders.dto.ts index 2867434..7a65fc3 100644 --- a/src/dto/manage-holders/manage-holders.dto.ts +++ b/src/dto/manage-holders/manage-holders.dto.ts @@ -35,7 +35,11 @@ export class CreateHoldersDTO extends IntersectionType( ZIP_DTO, COUNTRY_DTO, USERID_DTO, - PartialType(CONTACTSTABLE_DTO) + // PartialType(CONTACTSTABLE_DTO) +) { } + +export class CreateHolderContactsDTO extends IntersectionType( + SPID_DTO, HOLDERID_DTO, CONTACTSTABLE_DTO, USERID_DTO ) { } @@ -73,7 +77,6 @@ export class UpdateHolderContactDTO extends IntersectionType( USERID_DTO ) { } - export class GetHolderDTO extends IntersectionType( SPID_DTO, HOLDERID_DTO @@ -89,9 +92,9 @@ export class HolderContactActivateOrInactivateDTO extends IntersectionType( SPID_DTO, HOLDERCONTACTID_DTO, USERID_DTO -) {} +) { } export class SearchHolderDTO extends IntersectionType( SPID_DTO, HOLDERNAME_DTO -){} \ No newline at end of file +) { } \ No newline at end of file diff --git a/src/mssql/manage-holders/manage-holders.service.ts b/src/mssql/manage-holders/manage-holders.service.ts index 32bd633..b21c7da 100644 --- a/src/mssql/manage-holders/manage-holders.service.ts +++ b/src/mssql/manage-holders/manage-holders.service.ts @@ -78,20 +78,20 @@ export class ManageHoldersService { contactTable.columns.add('MobileNo', mssql.VarChar(20)); contactTable.columns.add('FaxNo', mssql.VarChar(20)); - finalBody.P_CONTACTSTABLE && finalBody.P_CONTACTSTABLE.forEach((contact) => { - contactTable.rows.add( - contact.P_FIRSTNAME, - contact.P_LASTNAME, - contact.P_MIDDLEINITIAL, - contact.P_TITLE, - contact.P_EMAILADDRESS, - contact.P_PHONENO, - contact.P_MOBILENO, - contact.P_FAXNO, - ); - }); + // finalBody.P_CONTACTSTABLE && finalBody.P_CONTACTSTABLE.forEach((contact) => { + // contactTable.rows.add( + // contact.P_FIRSTNAME, + // contact.P_LASTNAME, + // contact.P_MIDDLEINITIAL, + // contact.P_TITLE, + // contact.P_EMAILADDRESS, + // contact.P_PHONENO, + // contact.P_MOBILENO, + // contact.P_FAXNO, + // ); + // }); - request.input('p_contactstable', contactTable); + // request.input('p_contactstable', contactTable); const result = await request.execute('carnetsys.CreateHolderData'); return { data: result.recordset }; diff --git a/src/oracle/manage-holders/manage-holders.controller.ts b/src/oracle/manage-holders/manage-holders.controller.ts index 23f555c..5f9f166 100644 --- a/src/oracle/manage-holders/manage-holders.controller.ts +++ b/src/oracle/manage-holders/manage-holders.controller.ts @@ -13,6 +13,7 @@ import { ApiTags } from '@nestjs/swagger'; import { ManageHoldersService } from './manage-holders.service'; import { + CreateHolderContactsDTO, CreateHoldersDTO, GetHolderDTO, HolderActivateOrInactivateDTO, HolderContactActivateOrInactivateDTO, SearchHolderDTO, UpdateHolderContactDTO, UpdateHolderDTO } from 'src/dto/property.dto'; @@ -34,6 +35,11 @@ export class ManageHoldersController { // return {message:"Request received.."} } + @Post('CreateHoldercontact') + CreateHoldercontact(@Body() body: CreateHolderContactsDTO) { + return this.manageHoldersService.CreateHoldercontact(body); + } + @Put('/UpdateHolder') UpdateHolder(@Body() body: UpdateHolderDTO) { return this.manageHoldersService.UpdateHolder(body); diff --git a/src/oracle/manage-holders/manage-holders.service.ts b/src/oracle/manage-holders/manage-holders.service.ts index 5079783..3652522 100644 --- a/src/oracle/manage-holders/manage-holders.service.ts +++ b/src/oracle/manage-holders/manage-holders.service.ts @@ -6,6 +6,7 @@ import { InternalServerException } from 'src/exceptions/internalServerError.exce import { closeOracleDbConnection, fetchCursor, handleError, setEmptyStringsToNull } from 'src/utils/helper'; import { + CreateHolderContactsDTO, CreateHoldersDTO, GetHolderDTO, HolderActivateOrInactivateDTO, HolderContactActivateOrInactivateDTO, SearchHolderDTO, UpdateHolderContactDTO, UpdateHolderDTO } from 'src/dto/property.dto'; @@ -39,7 +40,7 @@ export class ManageHoldersService { P_ZIP: null, P_COUNTRY: null, P_USERID: null, - P_CONTACTSTABLE: null, + // P_CONTACTSTABLE: null, }; const reqBody = JSON.parse(JSON.stringify(body)); @@ -54,7 +55,7 @@ export class ManageHoldersService { connection = await this.oracleDBService.getConnection(); - const CONTACTSTABLE_INSTANCE = await this.oracleService.get_CONTACTS_TABLE_INSTANCE(finalBody) + // const CONTACTSTABLE_INSTANCE = await this.oracleService.get_CONTACTS_TABLE_INSTANCE(finalBody) const result = await connection.execute( `BEGIN @@ -83,7 +84,7 @@ export class ManageHoldersService { P_ZIP: { val: finalBody.P_ZIP, type: oracledb.DB_TYPE_NVARCHAR }, P_COUNTRY: { val: finalBody.P_COUNTRY, type: oracledb.DB_TYPE_NVARCHAR }, P_USERID: { val: finalBody.P_USERID, type: oracledb.DB_TYPE_NVARCHAR }, - P_CONTACTSTABLE: { val: CONTACTSTABLE_INSTANCE, type: oracledb.DB_TYPE_OBJECT }, + // P_CONTACTSTABLE: { val: CONTACTSTABLE_INSTANCE, type: oracledb.DB_TYPE_OBJECT }, P_HOLDERCURSOR: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT }, P_HOLDERCONTACTCURSOR: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT } }, @@ -109,11 +110,76 @@ export class ManageHoldersService { // throw new BadRequestException(fres[0].ERRORMESG) // } - return { - holderDetails: await fetchCursor(outBinds.P_HOLDERCURSOR, ManageHoldersService.name), - holderContactDetails: await fetchCursor(outBinds.P_HOLDERCONTACTCURSOR, ManageHoldersService.name), + // return { + // holderDetails: await fetchCursor(outBinds.P_HOLDERCURSOR, ManageHoldersService.name), + // holderContactDetails: await fetchCursor(outBinds.P_HOLDERCONTACTCURSOR, ManageHoldersService.name), + // } + + return await fetchCursor(outBinds.P_HOLDERCURSOR, ManageHoldersService.name); + + } catch (error) { + handleError(error, ManageHoldersService.name) + } finally { + await closeOracleDbConnection(connection, ManageHoldersService.name) + } + } + + async CreateHoldercontact(body: CreateHolderContactsDTO) { + // const CONTACTSTABLE_INSTANCE = await this.oracleService.get_CONTACTS_TABLE_INSTANCE(finalBody) + // P_CONTACTSTABLE: { val: CONTACTSTABLE_INSTANCE, type: oracledb.DB_TYPE_OBJECT } + + const newBody = { + P_SPID: null, + P_HOLDERID: null, + P_CONTACTSTABLE: null, + P_USERID: null, + }; + + const reqBody = JSON.parse(JSON.stringify(body)); + + setEmptyStringsToNull(reqBody); + + const finalBody: CreateHolderContactsDTO = { ...newBody, ...reqBody }; + + let connection; + try { + connection = await this.oracleDBService.getConnection(); + + const CONTACTSTABLE_INSTANCE = await this.oracleService.get_CONTACTS_TABLE_INSTANCE(finalBody); + + const result = await connection.execute( + `BEGIN + MANAGEPREPARER_PKG.CreateClientContact( + :P_SPID, :P_HOLDERID, :P_CONTACTSTABLE, :P_USERID, :P_CURSOR + ); + END;`, + { + P_SPID: { val: finalBody.P_SPID, type: oracledb.DB_TYPE_NUMBER }, + P_HOLDERID: { val: finalBody.P_HOLDERID, type: oracledb.DB_TYPE_NUMBER }, + P_CONTACTSTABLE: { val: CONTACTSTABLE_INSTANCE, type: oracledb.DB_TYPE_OBJECT }, + P_USERID: { val: finalBody.P_USERID, type: oracledb.DB_TYPE_NVARCHAR }, + P_CURSOR: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT } + }, + { outFormat: oracledb.OUT_FORMAT_OBJECT } + ); + + await connection.commit(); + + 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."); } + const fres: any = await fetchCursor(outBinds.P_CURSOR, ManageHoldersService.name); + + if (fres.length > 0 && fres[0].ERRORMESG) { + this.logger.warn(fres[0].ERRORMESG); + throw new BadRequestException(fres[0].ERRORMESG) + } + + return { statusCode: 201, message: "Created Successfully", ...fres[0] }; + } catch (error) { handleError(error, ManageHoldersService.name) } finally {