FINERACT-1926: Add external id validation for buyback and sale

This commit is contained in:
Adam Saghy
2023-07-11 17:08:04 +02:00
parent 1ef6b9d739
commit d65de7a8e9
2 changed files with 38 additions and 4 deletions
@@ -78,10 +78,14 @@ public class ExternalAssetOwnersWriteServiceImpl implements ExternalAssetOwnersW
@Override
@Transactional
public CommandProcessingResult saleLoanByLoanId(JsonCommand command) {
final JsonElement json = fromApiJsonHelper.parse(command.json());
validateSaleRequestBody(command.json());
ExternalId externalId = getTransferExternalIdFromJson(json);
validateExternalId(externalId);
Long loanId = command.getLoanId();
LoanIdAndExternalIdAndStatus loanIdAndExternalIdAndStatus = fetchLoanDetails(loanId);
validateLoanStatus(loanIdAndExternalIdAndStatus);
ExternalAssetOwnerTransfer externalAssetOwnerTransfer = createSaleTransfer(loanId, command.json(),
ExternalAssetOwnerTransfer externalAssetOwnerTransfer = createSaleTransfer(loanId, json,
loanIdAndExternalIdAndStatus.getExternalId());
validateSale(externalAssetOwnerTransfer);
externalAssetOwnerTransferRepository.saveAndFlush(externalAssetOwnerTransfer);
@@ -98,12 +102,22 @@ public class ExternalAssetOwnersWriteServiceImpl implements ExternalAssetOwnersW
LocalDate settlementDate = getSettlementDateFromJson(json);
ExternalId externalId = getTransferExternalIdFromJson(json);
validateSettlementDate(settlementDate);
validateExternalId(externalId);
ExternalAssetOwnerTransfer effectiveTransfer = fetchAndValidateEffectiveTransferForBuyback(loanId, settlementDate);
ExternalAssetOwnerTransfer externalAssetOwnerTransfer = createBuybackTransfer(effectiveTransfer, settlementDate, externalId);
externalAssetOwnerTransferRepository.saveAndFlush(externalAssetOwnerTransfer);
return buildResponseData(externalAssetOwnerTransfer);
}
private void validateExternalId(ExternalId externalId) {
boolean alreadyExists = externalAssetOwnerTransferRepository
.exists((root, query, criteriaBuilder) -> criteriaBuilder.equal(root.get("externalId"), externalId));
if (alreadyExists) {
throw new ExternalAssetOwnerInitiateTransferException(
String.format("Already existing an asset transfer with the provided transfer external id: %s", externalId.getValue()));
}
}
private void validateLoan(Long loanId) {
if (!loanRepository.existsById(loanId)) {
throw new LoanNotFoundException(loanId);
@@ -247,11 +261,9 @@ public class ExternalAssetOwnersWriteServiceImpl implements ExternalAssetOwnersW
}
}
private ExternalAssetOwnerTransfer createSaleTransfer(Long loanId, String apiRequestBodyAsJson, ExternalId externalLoanId) {
private ExternalAssetOwnerTransfer createSaleTransfer(Long loanId, JsonElement json, ExternalId externalLoanId) {
ExternalAssetOwnerTransfer externalAssetOwnerTransfer = new ExternalAssetOwnerTransfer();
LocalDate effectiveFrom = ThreadLocalContextUtil.getBusinessDate();
validateSaleRequestBody(apiRequestBodyAsJson);
final JsonElement json = fromApiJsonHelper.parse(apiRequestBodyAsJson);
ExternalAssetOwner owner = getOwner(json);
externalAssetOwnerTransfer.setOwner(owner);