Untitled

 avatar
unknown
plain_text
16 days ago
1.8 kB
4
Indexable
public async createBusinessBankingEntityV3(
  @Inject() event: APIGatewayProxyEventWithBosphorusDataAndB2BAuth,
  @Body() createBankingEntityRequest: ICreateBusinessBankingEntityV3Request,
  @Header("x-idempotency-key") idempotencyKey: string,
): Promise<IBankingEntityResponse> {
  try {
    logger.appendKeys(this.getRequestContext(event));
    
    // Check for existing idempotent request
    const existingRecord = await this.idempotencyService.findExistingRecord<IBankingEntityResponse>(
      idempotencyKey,
      "banking-entity",
      "create"
    );
    
    if (existingRecord) {
      if (existingRecord.status === 'SUCCESS') {
        logger.info("Returning cached response for idempotent request", { idempotencyKey });
        return existingRecord.response;
      } else if (existingRecord.status === 'ERROR') {
        logger.info("Returning cached error for idempotent request", { idempotencyKey });
        throw new Error(existingRecord.errorDetails.message);
      }
    }

    // Regular processing...
    // ...

    // Save successful response
    await this.idempotencyService.saveRecord({
      idempotencyKey,
      resourceType: "banking-entity",
      operation: "create",
      resourceId: response.bankingEntityId,
      response,
      status: 'SUCCESS'
    });
    
    return response;
  } catch (error) {
    // Save error response
    await this.idempotencyService.saveErrorRecord({
      idempotencyKey,
      resourceType: "banking-entity",
      operation: "create",
      errorDetails: {
        message: error.message,
        code: error.code || 'UNKNOWN_ERROR',
        stack: error.stack
      },
      status: 'ERROR'
    });
    
    logger.error("Failed to create business banking entity", {
      error,
      idempotencyKey
    });
    genericExceptionHttpWrap(error);
  }
}
Editor is loading...
Leave a Comment