Skip to content

Commit

Permalink
MODDCB-105 Accept existing circulation request ID (borrowing transact…
Browse files Browse the repository at this point in the history
…ion)
  • Loading branch information
MagzhanArtykov committed Jun 21, 2024
1 parent e9ee904 commit 273bf00
Show file tree
Hide file tree
Showing 6 changed files with 53 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,6 @@ public interface CirculationClient {
void checkOutByBarcode(@RequestBody CheckOutRequest checkOutRequest);

@PutMapping("/requests/{requestId}")
CirculationRequest cancelRequest(@PathVariable("requestId") String requestId, @RequestBody CirculationRequest circulationRequest);
CirculationRequest updateRequest(@PathVariable("requestId") String requestId,
@RequestBody CirculationRequest circulationRequest);
}
1 change: 1 addition & 0 deletions src/main/java/org/folio/dcb/service/RequestService.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,5 @@ public interface RequestService {
*/
CirculationRequest createPageItemRequest(User user, DcbItem dcbItem, String pickupServicePointId);
CirculationRequest createHoldItemRequest(User user, DcbItem dcbItem, String pickupServicePointId);
void updateCirculationRequest(CirculationRequest circulationRequest);
}
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public void cancelRequest(TransactionEntity dcbTransaction) {
CirculationRequest request = circulationStorageService.getCancellationRequestIfOpenOrNull(dcbTransaction.getRequestId().toString());
if (request != null){
try {
circulationClient.cancelRequest(request.getId(), request);
circulationClient.updateRequest(request.getId(), request);
} catch (FeignException e) {
log.warn("cancelRequest:: error cancelling request using request id {} ", dcbTransaction.getRequestId(), e);
throw new CirculationRequestException(String.format("Error cancelling request using request id %s", dcbTransaction.getRequestId()));
Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,29 @@
package org.folio.dcb.service.impl;

import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2;
import static org.folio.dcb.domain.dto.DcbTransaction.RoleEnum.BORROWER;
import static org.folio.dcb.domain.dto.DcbTransaction.RoleEnum.LENDER;

import java.util.UUID;

import org.folio.dcb.domain.dto.CirculationItem;
import org.folio.dcb.domain.dto.CirculationRequest;
import org.folio.dcb.domain.dto.DcbItem;
import org.folio.dcb.domain.dto.DcbPatron;
import org.folio.dcb.domain.dto.DcbPickup;
import org.folio.dcb.domain.dto.DcbTransaction;
import org.folio.dcb.domain.dto.Item;
import org.folio.dcb.domain.dto.TransactionStatusResponse;
import org.folio.dcb.exception.ResourceAlreadyExistException;
import org.folio.dcb.repository.TransactionRepository;
import org.folio.dcb.service.CirculationItemService;
import org.folio.dcb.service.CirculationRequestService;
import org.folio.dcb.service.EcsRequestTransactionsService;
import org.folio.dcb.service.RequestService;
import org.folio.dcb.utils.RequestStatus;
import org.springframework.stereotype.Service;
import static org.folio.dcb.domain.dto.DcbTransaction.RoleEnum.LENDER;

import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2;

@Service
@RequiredArgsConstructor
Expand All @@ -23,11 +32,13 @@ public class EcsRequestTransactionsServiceImpl implements EcsRequestTransactions

private final BaseLibraryService baseLibraryService;
private final TransactionRepository transactionRepository;
private final RequestService requestService;
private final CirculationRequestService circulationRequestService;
private final CirculationItemService circulationItemService;

@Override
public TransactionStatusResponse createEcsRequestTransactions(String ecsRequestTransactionsId,
DcbTransaction dcbTransaction) {
DcbTransaction dcbTransaction) {
log.info("createEcsRequestTransactions:: creating new transaction request for role {} ",
dcbTransaction.getRole());
checkEcsRequestTransactionExistsAndThrow(ecsRequestTransactionsId);
Expand All @@ -37,6 +48,9 @@ public TransactionStatusResponse createEcsRequestTransactions(String ecsRequestT
RequestStatus.from(circulationRequest.getStatus()))) {
if (dcbTransaction.getRole() == LENDER) {
createLenderEcsRequestTransactions(ecsRequestTransactionsId, dcbTransaction, circulationRequest);
} else if(dcbTransaction.getRole() == BORROWER) {
createBorrowerEcsRequestTransactions(ecsRequestTransactionsId, dcbTransaction,
circulationRequest);
} else {
throw new IllegalArgumentException("Unimplemented role: " + dcbTransaction.getRole());
}
Expand Down Expand Up @@ -74,4 +88,26 @@ private void createLenderEcsRequestTransactions(String ecsRequestTransactionsId,
baseLibraryService.saveDcbTransaction(ecsRequestTransactionsId, dcbTransaction,
dcbTransaction.getRequestId());
}

private void createBorrowerEcsRequestTransactions(String ecsRequestTransactionsId,
DcbTransaction dcbTransaction, CirculationRequest circulationRequest) {
var itemVirtual = dcbTransaction.getItem();
baseLibraryService.checkItemExistsInInventoryAndThrow(itemVirtual.getBarcode());
CirculationItem item = circulationItemService.checkIfItemExistsAndCreate(itemVirtual, circulationRequest.getPickupServicePointId());
circulationRequest.setItemId(UUID.fromString(item.getId()));
circulationRequest.setItem(Item.builder()
.barcode(item.getBarcode())
.build());
circulationRequest.setHoldingsRecordId(UUID.fromString(item.getHoldingsRecordId()));
requestService.updateCirculationRequest(circulationRequest);
dcbTransaction.setPatron(DcbPatron.builder()
.id(String.valueOf(circulationRequest.getRequesterId()))
.barcode(circulationRequest.getRequester().getBarcode())
.build());
dcbTransaction.setPickup(DcbPickup.builder()
.servicePointId(String.valueOf(circulationRequest.getPickupServicePointId()))
.build());
baseLibraryService.saveDcbTransaction(ecsRequestTransactionsId, dcbTransaction,
dcbTransaction.getRequestId());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,13 @@ public CirculationRequest createHoldItemRequest(User user, DcbItem item, String
return circulationClient.createRequest(circulationRequest);
}

@Override
public void updateCirculationRequest(CirculationRequest circulationRequest) {
log.debug("updateCirculationRequest:: updating circulation request with id {}",
circulationRequest.getId());
circulationClient.updateRequest(circulationRequest.getId(), circulationRequest);
}

private CirculationRequest createCirculationRequest(CirculationRequest.RequestTypeEnum type, User user, DcbItem item, String holdingsId, String instanceId, String pickupServicePointId) {
return CirculationRequest.builder()
.id(UUID.randomUUID().toString())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,13 +48,13 @@ void checkInByBarcodeWithServicePointTest(){
void cancelRequestTest() {
when(circulationRequestService.getCancellationRequestIfOpenOrNull(anyString())).thenReturn(createCirculationRequest());
circulationService.cancelRequest(createTransactionEntity());
verify(circulationClient).cancelRequest(anyString(), any());
verify(circulationClient).updateRequest(anyString(), any());
}

@Test
void shouldThrowExceptionWhenRequestIsNotUpdated() {
when(circulationRequestService.getCancellationRequestIfOpenOrNull(anyString())).thenReturn(createCirculationRequest());
when(circulationClient.cancelRequest(anyString(), any())).thenThrow(FeignException.BadRequest.class);
when(circulationClient.updateRequest(anyString(), any())).thenThrow(FeignException.BadRequest.class);
assertThrows(CirculationRequestException.class, () -> circulationService.cancelRequest(createTransactionEntity()));
}

Expand Down

0 comments on commit 273bf00

Please sign in to comment.