From 4403c31d5f7e695188101c00d5af3884a142e3e8 Mon Sep 17 00:00:00 2001 From: kaushalya4s5s7 Date: Wed, 7 Jan 2026 02:19:21 +0530 Subject: [PATCH] refactor: enhance syncPosition logic in SolvencyController --- packages/backend/configs/approved_admins.json | 3 ++- .../blockchain/services/blockchain.service.ts | 3 ++- .../controllers/solvency.controller.ts | 24 +++++++++++++++++-- 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/packages/backend/configs/approved_admins.json b/packages/backend/configs/approved_admins.json index d374a63..4e5f715 100644 --- a/packages/backend/configs/approved_admins.json +++ b/packages/backend/configs/approved_admins.json @@ -2,7 +2,8 @@ "admins": [ "0x23e67597f0898f747Fa3291C8920168adF9455D0", "0x55A3B8e137104f50f2147d2Dc846dE38a16829d3", - "0x84fa5B3980ab22354504A05a7AFD640FD200122d" + "0x84fa5B3980ab22354504A05a7AFD640FD200122d", + "0x276f6d0a52bBd84A6fA6F3727E8e344aa63993C3" ] } diff --git a/packages/backend/src/modules/blockchain/services/blockchain.service.ts b/packages/backend/src/modules/blockchain/services/blockchain.service.ts index af2bc56..1ff16f9 100644 --- a/packages/backend/src/modules/blockchain/services/blockchain.service.ts +++ b/packages/backend/src/modules/blockchain/services/blockchain.service.ts @@ -62,9 +62,10 @@ export class BlockchainService { }); this.logger.log(`Transaction submitted: ${hash}, waiting for confirmation...`); - await this.publicClient.waitForTransactionReceipt({ + await this.publicClient.waitForTransactionReceipt({ hash, timeout: 300_000, // 5 minutes timeout + pollingInterval: 2_000, }); this.logger.log(`Identity registration confirmed for ${walletAddress}`); return hash; diff --git a/packages/backend/src/modules/solvency/controllers/solvency.controller.ts b/packages/backend/src/modules/solvency/controllers/solvency.controller.ts index a52a661..60b7dd9 100644 --- a/packages/backend/src/modules/solvency/controllers/solvency.controller.ts +++ b/packages/backend/src/modules/solvency/controllers/solvency.controller.ts @@ -9,6 +9,7 @@ import { HttpCode, HttpStatus, BadRequestException, + NotFoundException, } from '@nestjs/common'; import { JwtAuthGuard } from '../../auth/guards/jwt-auth.guard'; import { SolvencyBlockchainService } from '../services/solvency-blockchain.service'; @@ -211,7 +212,7 @@ export class SolvencyController { * Called after investor deposits collateral directly via contract */ @Post('sync-position') - @HttpCode(HttpStatus.CREATED) + @HttpCode(HttpStatus.OK) async syncPosition(@Request() req: any, @Body() dto: { positionId: string; txHash: string; blockNumber: number }) { const userAddress = req.user.walletAddress; @@ -219,8 +220,27 @@ export class SolvencyController { throw new BadRequestException('Missing required fields: positionId, txHash'); } - // Fetch position details from chain const positionId = parseInt(dto.positionId); + + // Check if position already exists to prevent duplicate key error + try { + const existingPosition = await this.positionService.getPosition(positionId); + if (existingPosition) { + return { + success: true, + message: 'Position already exists.', + position: existingPosition, + }; + } + } catch (error) { + // If it's a NotFoundException, we can safely proceed to create the position. + // Otherwise, rethrow the error. + if (!(error instanceof NotFoundException)) { + throw error; + } + } + + // Fetch position details from chain const positionData = await this.blockchainService.getPositionFromChain(positionId); // Verify position belongs to user