From 0ddf06958ee07bb8a9808ab1a046c77724b6cb40 Mon Sep 17 00:00:00 2001 From: oleksandr_vidinieiev Date: Wed, 10 Jun 2026 17:04:48 +0200 Subject: [PATCH 01/16] MODDCB-292 Use claim returned resolution during check-in --- .../folio/dcb/service/CirculationService.java | 8 ++++ .../impl/BorrowingLibraryServiceImpl.java | 22 ++++++++++- .../service/impl/CirculationServiceImpl.java | 12 ++++++ .../service/impl/TransactionsServiceImpl.java | 3 +- .../swagger.api/schemas/CheckInRequest.yaml | 3 ++ .../schemas/transactionStatus.yaml | 13 +++++++ .../folio/dcb/it/BorrowerTransactionIT.java | 39 +++++++++++++++++++ .../service/BorrowingLibraryServiceTest.java | 38 ++++++++++++++++++ .../dcb/service/CirculationServiceTest.java | 15 +++++++ 9 files changed, 151 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/folio/dcb/service/CirculationService.java b/src/main/java/org/folio/dcb/service/CirculationService.java index 651955bb..6a297227 100644 --- a/src/main/java/org/folio/dcb/service/CirculationService.java +++ b/src/main/java/org/folio/dcb/service/CirculationService.java @@ -11,6 +11,14 @@ public interface CirculationService { void checkInByBarcode(TransactionEntity dcbTransaction, String servicePointId); + /** + * Check in item by barcode with an optional claim returned resolution + * @param dcbTransaction dcbTransactionEntity + * @param servicePointId service point id + * @param claimReturnedResolution optional claim returned resolution value + */ + void checkInByBarcode(TransactionEntity dcbTransaction, String servicePointId, String claimReturnedResolution); + /** * Check out item by barcode * @param dcbTransaction dcbTransactionEntity diff --git a/src/main/java/org/folio/dcb/service/impl/BorrowingLibraryServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/BorrowingLibraryServiceImpl.java index 236a087d..c84bd813 100644 --- a/src/main/java/org/folio/dcb/service/impl/BorrowingLibraryServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/BorrowingLibraryServiceImpl.java @@ -5,6 +5,7 @@ import org.folio.dcb.domain.dto.DcbTransaction; import org.folio.dcb.domain.dto.ServicePointRequest; import org.folio.dcb.domain.dto.TransactionStatus; +import org.folio.dcb.domain.dto.TransactionStatusContext; import org.folio.dcb.domain.dto.TransactionStatusResponse; import org.folio.dcb.domain.entity.TransactionEntity; import org.folio.dcb.repository.TransactionRepository; @@ -12,6 +13,8 @@ import org.folio.dcb.service.LibraryService; import org.folio.dcb.service.ServicePointService; import org.springframework.stereotype.Service; + +import java.util.Optional; import java.util.UUID; import static org.folio.dcb.domain.dto.TransactionStatus.StatusEnum.AWAITING_PICKUP; @@ -45,11 +48,20 @@ public void updateTransactionStatus(TransactionEntity dcbTransaction, Transactio var currentStatus = dcbTransaction.getStatus(); var requestedStatus = transactionStatus.getStatus(); - if ((CREATED == currentStatus && OPEN == requestedStatus) || (ITEM_CHECKED_OUT == currentStatus && ITEM_CHECKED_IN == requestedStatus)) { + if (CREATED == currentStatus && OPEN == requestedStatus) { log.info("updateTransactionStatus:: Checking in item for transaction {}.", dcbTransaction.getId()); //Random UUID for servicePointId. circulationService.checkInByBarcode(dcbTransaction, UUID.randomUUID().toString()); updateTransactionEntity(dcbTransaction, requestedStatus); + } else if (ITEM_CHECKED_OUT == currentStatus && ITEM_CHECKED_IN == requestedStatus) { + log.info("updateTransactionStatus:: Checking in item for transaction {}.", dcbTransaction.getId()); + String claimReturnedResolution = extractClaimReturnedResolution(transactionStatus); + if (claimReturnedResolution != null) { + circulationService.checkInByBarcode(dcbTransaction, UUID.randomUUID().toString(), claimReturnedResolution); + } else { + circulationService.checkInByBarcode(dcbTransaction, UUID.randomUUID().toString()); + } + updateTransactionEntity(dcbTransaction, requestedStatus); } else if(OPEN == currentStatus && AWAITING_PICKUP == requestedStatus) { circulationService.checkInByBarcode(dcbTransaction); updateTransactionEntity(dcbTransaction, requestedStatus); @@ -77,4 +89,12 @@ private void updateTransactionEntity(TransactionEntity transactionEntity, Transa transactionRepository.save(transactionEntity); } + private String extractClaimReturnedResolution(TransactionStatus transactionStatus) { + return Optional.ofNullable(transactionStatus) + .map(TransactionStatus::getContext) + .map(TransactionStatusContext::getClaimReturnedResulution) + .map(TransactionStatusContext.ClaimReturnedResulutionEnum::getValue) + .orElse(null); + } + } diff --git a/src/main/java/org/folio/dcb/service/impl/CirculationServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/CirculationServiceImpl.java index 08d87666..95730c13 100644 --- a/src/main/java/org/folio/dcb/service/impl/CirculationServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/CirculationServiceImpl.java @@ -34,6 +34,13 @@ public void checkInByBarcode(TransactionEntity dcbTransaction, String servicePoi circulationClient.checkInByBarcode(createCheckInRequest(dcbTransaction.getItemBarcode(), servicePointId)); } + @Override + public void checkInByBarcode(TransactionEntity dcbTransaction, String servicePointId, String claimReturnedResolution) { + log.debug("checkInByBarcode:: checking in item for transaction {} with claimReturnedResolution '{}'.", + dcbTransaction.getId(), claimReturnedResolution); + circulationClient.checkInByBarcode(createCheckInRequest(dcbTransaction.getItemBarcode(), servicePointId, claimReturnedResolution)); + } + @Override public void checkOutByBarcode(TransactionEntity dcbTransaction) { log.debug("checkOutByBarcode:: checking out item for transaction {}.", dcbTransaction.getId()); @@ -58,10 +65,15 @@ public void cancelRequest(TransactionEntity dcbTransaction, boolean isItemUnavai } private CheckInRequest createCheckInRequest(String itemBarcode, String servicePointId){ + return createCheckInRequest(itemBarcode, servicePointId, null); + } + + private CheckInRequest createCheckInRequest(String itemBarcode, String servicePointId, String claimReturnedResolution){ return CheckInRequest.builder() .itemBarcode(itemBarcode) .servicePointId(servicePointId) .checkInDate(OffsetDateTime.now().toString()) + .claimReturnedResolution(claimReturnedResolution) .build(); } diff --git a/src/main/java/org/folio/dcb/service/impl/TransactionsServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/TransactionsServiceImpl.java index 25f1a707..48571a15 100644 --- a/src/main/java/org/folio/dcb/service/impl/TransactionsServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/TransactionsServiceImpl.java @@ -107,7 +107,8 @@ public TransactionStatusResponse updateTransactionStatus(String dcbTransactionId case BORROWING_PICKUP -> borrowingPickupLibraryService.updateTransactionStatus(dcbTransaction, transactionStatus); case PICKUP -> pickupLibraryService.updateTransactionStatus(dcbTransaction, transactionStatus); case BORROWER -> statusProcessorService.borrowingChainProcessor(dcbTransaction.getStatus(), transactionStatus.getStatus()) - .forEach(statusEnum -> borrowingLibraryService.updateTransactionStatus(dcbTransaction, TransactionStatus.builder().status(statusEnum).build())); + .forEach(statusEnum -> borrowingLibraryService.updateTransactionStatus(dcbTransaction, + TransactionStatus.builder().status(statusEnum).context(transactionStatus.getContext()).build())); } return TransactionStatusResponse.builder() diff --git a/src/main/resources/swagger.api/schemas/CheckInRequest.yaml b/src/main/resources/swagger.api/schemas/CheckInRequest.yaml index 32e555a5..d19c5130 100644 --- a/src/main/resources/swagger.api/schemas/CheckInRequest.yaml +++ b/src/main/resources/swagger.api/schemas/CheckInRequest.yaml @@ -13,3 +13,6 @@ CheckInRequest: description: When the item was checked in type: string format: date-type + claimReturnedResolution: + description: Claim returned resolution, passed when checking in a claimed returned item + type: string diff --git a/src/main/resources/swagger.api/schemas/transactionStatus.yaml b/src/main/resources/swagger.api/schemas/transactionStatus.yaml index 207b9b36..be14d6d8 100644 --- a/src/main/resources/swagger.api/schemas/transactionStatus.yaml +++ b/src/main/resources/swagger.api/schemas/transactionStatus.yaml @@ -15,3 +15,16 @@ TransactionStatus: - ERROR #Error occurred message: type: string + context: + $ref: '#/TransactionStatusContext' + +TransactionStatusContext: + type: object + description: Optional context for the transaction status update + properties: + claimReturnedResulution: + type: string + description: Claim returned resolution value + enum: + - Found by library + - Returned by patron diff --git a/src/test/java/org/folio/dcb/it/BorrowerTransactionIT.java b/src/test/java/org/folio/dcb/it/BorrowerTransactionIT.java index 758bda15..b9c3ce54 100644 --- a/src/test/java/org/folio/dcb/it/BorrowerTransactionIT.java +++ b/src/test/java/org/folio/dcb/it/BorrowerTransactionIT.java @@ -44,7 +44,10 @@ import java.time.OffsetDateTime; import java.time.ZoneOffset; import java.util.Map; + +import org.folio.dcb.domain.dto.TransactionStatus; import org.folio.dcb.domain.dto.TransactionStatus.StatusEnum; +import org.folio.dcb.domain.dto.TransactionStatusContext; import org.folio.dcb.it.base.BaseTenantIntegrationTest; import org.folio.dcb.support.types.IntegrationTest; import org.folio.dcb.support.wiremock.WireMockStub; @@ -222,6 +225,42 @@ void updateTransactionStatus_positive_fromItemCheckedOutToItemCheckedIn() throws .andExpect(jsonPath("$.status").value("ITEM_CHECKED_IN")); } + @Test + @WireMockStub("/stubs/mod-circulation/check-in-by-barcode/201-post(with claim returned found by library).json") + void updateTransactionStatus_positive_fromItemCheckedOutToItemCheckedInWithFoundByLibraryContext() throws Exception { + testJdbcHelper.saveDcbTransaction(DCB_TRANSACTION_ID, ITEM_CHECKED_OUT, borrowerDcbTransaction()); + var context = TransactionStatusContext.builder() + .claimReturnedResulution(TransactionStatusContext.ClaimReturnedResulutionEnum.FOUND_BY_LIBRARY) + .build(); + var transactionStatus = TransactionStatus.builder() + .status(ITEM_CHECKED_IN) + .context(context) + .build(); + putDcbTransactionStatus(DCB_TRANSACTION_ID, transactionStatus) + .andExpect(jsonPath("$.status").value("ITEM_CHECKED_IN")); + + wiremock.verifyThat(1, postRequestedFor(urlPathEqualTo("/circulation/check-in-by-barcode")) + .withRequestBody(matchingJsonPath("$.claimReturnedResolution", equalTo("Found by library")))); + } + + @Test + @WireMockStub("/stubs/mod-circulation/check-in-by-barcode/201-post(with claim returned returned by patron).json") + void updateTransactionStatus_positive_fromItemCheckedOutToItemCheckedInWithReturnedByPatronContext() throws Exception { + testJdbcHelper.saveDcbTransaction(DCB_TRANSACTION_ID, ITEM_CHECKED_OUT, borrowerDcbTransaction()); + var context = TransactionStatusContext.builder() + .claimReturnedResulution(TransactionStatusContext.ClaimReturnedResulutionEnum.RETURNED_BY_PATRON) + .build(); + var transactionStatus = TransactionStatus.builder() + .status(ITEM_CHECKED_IN) + .context(context) + .build(); + putDcbTransactionStatus(DCB_TRANSACTION_ID, transactionStatus) + .andExpect(jsonPath("$.status").value("ITEM_CHECKED_IN")); + + wiremock.verifyThat(1, postRequestedFor(urlPathEqualTo("/circulation/check-in-by-barcode")) + .withRequestBody(matchingJsonPath("$.claimReturnedResolution", equalTo("Returned by patron")))); + } + @Test @WireMockStub({ "/stubs/mod-circulation/check-in-by-barcode/201-post(random SP).json", diff --git a/src/test/java/org/folio/dcb/service/BorrowingLibraryServiceTest.java b/src/test/java/org/folio/dcb/service/BorrowingLibraryServiceTest.java index 75ec031b..e4f31119 100644 --- a/src/test/java/org/folio/dcb/service/BorrowingLibraryServiceTest.java +++ b/src/test/java/org/folio/dcb/service/BorrowingLibraryServiceTest.java @@ -1,6 +1,7 @@ package org.folio.dcb.service; import org.folio.dcb.domain.dto.TransactionStatus; +import org.folio.dcb.domain.dto.TransactionStatusContext; import org.folio.dcb.repository.TransactionRepository; import org.folio.dcb.service.impl.BaseLibraryService; import org.folio.dcb.service.impl.BorrowingLibraryServiceImpl; @@ -27,6 +28,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -117,4 +119,40 @@ void testTransactionStatusUpdateFromItemCheckedOutToItemCheckedIn() { Assertions.assertEquals(ITEM_CHECKED_IN, transactionEntity.getStatus()); } + @Test + void testTransactionStatusUpdateFromItemCheckedOutToItemCheckedInWithFoundByLibraryContext() { + var transactionEntity = createTransactionEntity(); + transactionEntity.setStatus(ITEM_CHECKED_OUT); + doNothing().when(circulationService).checkInByBarcode(any(), any(), any()); + var context = TransactionStatusContext.builder() + .claimReturnedResulution(TransactionStatusContext.ClaimReturnedResulutionEnum.FOUND_BY_LIBRARY) + .build(); + TransactionStatus transactionStatus = TransactionStatus.builder() + .status(ITEM_CHECKED_IN) + .context(context) + .build(); + borrowingLibraryService.updateTransactionStatus(transactionEntity, transactionStatus); + + verify(circulationService).checkInByBarcode(any(), any(), eq("Found by library")); + Assertions.assertEquals(ITEM_CHECKED_IN, transactionEntity.getStatus()); + } + + @Test + void testTransactionStatusUpdateFromItemCheckedOutToItemCheckedInWithReturnedByPatronContext() { + var transactionEntity = createTransactionEntity(); + transactionEntity.setStatus(ITEM_CHECKED_OUT); + doNothing().when(circulationService).checkInByBarcode(any(), any(), any()); + var context = TransactionStatusContext.builder() + .claimReturnedResulution(TransactionStatusContext.ClaimReturnedResulutionEnum.RETURNED_BY_PATRON) + .build(); + TransactionStatus transactionStatus = TransactionStatus.builder() + .status(ITEM_CHECKED_IN) + .context(context) + .build(); + borrowingLibraryService.updateTransactionStatus(transactionEntity, transactionStatus); + + verify(circulationService).checkInByBarcode(any(), any(), eq("Returned by patron")); + Assertions.assertEquals(ITEM_CHECKED_IN, transactionEntity.getStatus()); + } + } diff --git a/src/test/java/org/folio/dcb/service/CirculationServiceTest.java b/src/test/java/org/folio/dcb/service/CirculationServiceTest.java index d2dd759b..2c29c3e8 100644 --- a/src/test/java/org/folio/dcb/service/CirculationServiceTest.java +++ b/src/test/java/org/folio/dcb/service/CirculationServiceTest.java @@ -5,6 +5,7 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.argThat; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -46,6 +47,20 @@ void checkInByBarcodeWithServicePointTest(){ verify(circulationClient).checkInByBarcode(any()); } + @Test + void checkInByBarcodeWithServicePointAndClaimReturnedResolutionTest() { + circulationService.checkInByBarcode(createTransactionEntity(), String.valueOf(UUID.randomUUID()), "Found by library"); + verify(circulationClient).checkInByBarcode(argThat(req -> + "Found by library".equals(req.getClaimReturnedResolution()))); + } + + @Test + void checkInByBarcodeWithServicePointAndNullClaimReturnedResolutionTest() { + circulationService.checkInByBarcode(createTransactionEntity(), String.valueOf(UUID.randomUUID()), null); + verify(circulationClient).checkInByBarcode(argThat(req -> + req.getClaimReturnedResolution() == null)); + } + @Test void shouldUpdateRequestApiWithIsDcbRerequestCancellationTrue() { CirculationRequest fetchedRequest = createCirculationRequest(); From 01c4ad04b644626af34d8aa57ab637830e0786b8 Mon Sep 17 00:00:00 2001 From: oleksandr_vidinieiev Date: Wed, 10 Jun 2026 17:12:33 +0200 Subject: [PATCH 02/16] MODDCB-292 Refactoring --- .../impl/BorrowingLibraryServiceImpl.java | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/src/main/java/org/folio/dcb/service/impl/BorrowingLibraryServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/BorrowingLibraryServiceImpl.java index c84bd813..efc28c08 100644 --- a/src/main/java/org/folio/dcb/service/impl/BorrowingLibraryServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/BorrowingLibraryServiceImpl.java @@ -47,20 +47,19 @@ public void updateTransactionStatus(TransactionEntity dcbTransaction, Transactio dcbTransaction.getId(), dcbTransaction.getStatus(), transactionStatus.getStatus()); var currentStatus = dcbTransaction.getStatus(); var requestedStatus = transactionStatus.getStatus(); + String randomServicePointId = UUID.randomUUID().toString(); if (CREATED == currentStatus && OPEN == requestedStatus) { log.info("updateTransactionStatus:: Checking in item for transaction {}.", dcbTransaction.getId()); - //Random UUID for servicePointId. - circulationService.checkInByBarcode(dcbTransaction, UUID.randomUUID().toString()); + circulationService.checkInByBarcode(dcbTransaction, randomServicePointId); updateTransactionEntity(dcbTransaction, requestedStatus); } else if (ITEM_CHECKED_OUT == currentStatus && ITEM_CHECKED_IN == requestedStatus) { log.info("updateTransactionStatus:: Checking in item for transaction {}.", dcbTransaction.getId()); - String claimReturnedResolution = extractClaimReturnedResolution(transactionStatus); - if (claimReturnedResolution != null) { - circulationService.checkInByBarcode(dcbTransaction, UUID.randomUUID().toString(), claimReturnedResolution); - } else { - circulationService.checkInByBarcode(dcbTransaction, UUID.randomUUID().toString()); - } + extractClaimReturnedResolution(transactionStatus) + .ifPresentOrElse( + resolution -> circulationService.checkInByBarcode(dcbTransaction, randomServicePointId, resolution), + () -> circulationService.checkInByBarcode(dcbTransaction, randomServicePointId)); + updateTransactionEntity(dcbTransaction, requestedStatus); } else if(OPEN == currentStatus && AWAITING_PICKUP == requestedStatus) { circulationService.checkInByBarcode(dcbTransaction); @@ -89,12 +88,11 @@ private void updateTransactionEntity(TransactionEntity transactionEntity, Transa transactionRepository.save(transactionEntity); } - private String extractClaimReturnedResolution(TransactionStatus transactionStatus) { + private Optional extractClaimReturnedResolution(TransactionStatus transactionStatus) { return Optional.ofNullable(transactionStatus) .map(TransactionStatus::getContext) .map(TransactionStatusContext::getClaimReturnedResulution) - .map(TransactionStatusContext.ClaimReturnedResulutionEnum::getValue) - .orElse(null); + .map(TransactionStatusContext.ClaimReturnedResulutionEnum::getValue); } } From b4901f883f672d390d1f02fcc98411684f7989c8 Mon Sep 17 00:00:00 2001 From: oleksandr_vidinieiev Date: Thu, 11 Jun 2026 11:05:42 +0200 Subject: [PATCH 03/16] MODDCB-292 Add wiremock stub files --- ...with claim returned found by library).json | 54 +++++++++++++++++++ ...th claim returned returned by patron).json | 54 +++++++++++++++++++ 2 files changed, 108 insertions(+) create mode 100644 src/test/resources/stubs/mod-circulation/check-in-by-barcode/201-post(with claim returned found by library).json create mode 100644 src/test/resources/stubs/mod-circulation/check-in-by-barcode/201-post(with claim returned returned by patron).json diff --git a/src/test/resources/stubs/mod-circulation/check-in-by-barcode/201-post(with claim returned found by library).json b/src/test/resources/stubs/mod-circulation/check-in-by-barcode/201-post(with claim returned found by library).json new file mode 100644 index 00000000..9f7c6e62 --- /dev/null +++ b/src/test/resources/stubs/mod-circulation/check-in-by-barcode/201-post(with claim returned found by library).json @@ -0,0 +1,54 @@ +{ + "request": { + "method": "POST", + "urlPath": "/circulation/check-in-by-barcode", + "bodyPatterns": [ + { + "equalToJson": { + "itemBarcode": "DCB_ITEM", + "claimReturnedResolution": "Found by library" + }, + "ignoreExtraElements": true + }, + { "matchesJsonPath": "$.checkInDate" }, + { + "matchesJsonPath": { + "expression": "$.servicePointId", + "matches": "[0-9a-f-]{36}" + } + } + ], + "headers": { + "x-okapi-tenant": { + "equalTo": "test_tenant" + } + } + }, + "response": { + "status": 201, + "headers": { + "Content-Type": "application/json" + }, + "jsonBody": { + "loan": { + "id": "cf23adf0-61ba-4887-bf82-956c4aae2260", + "userId": "df7f4993-8c14-4a0f-ab63-93975ab01c76", + "itemId": "5b95877d-86c0-4cb7-a0cd-7660b348ae5a", + "item": { + "title": "The Long Way to a Small, Angry Planet", + "barcode": "DCB_ITEM", + "status": { + "name": "Checked out" + } + }, + "loanDate": "2017-03-01T23:11:00.000Z", + "dueDate": "2017-04-01T23:11:00.000Z", + "checkinServicePointId": "9d1b77e8-f02e-4b7f-b296-3f2042ddac55", + "status": { + "name": "Closed" + }, + "action": "checkedin" + } + } + } +} diff --git a/src/test/resources/stubs/mod-circulation/check-in-by-barcode/201-post(with claim returned returned by patron).json b/src/test/resources/stubs/mod-circulation/check-in-by-barcode/201-post(with claim returned returned by patron).json new file mode 100644 index 00000000..ec1029d1 --- /dev/null +++ b/src/test/resources/stubs/mod-circulation/check-in-by-barcode/201-post(with claim returned returned by patron).json @@ -0,0 +1,54 @@ +{ + "request": { + "method": "POST", + "urlPath": "/circulation/check-in-by-barcode", + "bodyPatterns": [ + { + "equalToJson": { + "itemBarcode": "DCB_ITEM", + "claimReturnedResolution": "Returned by patron" + }, + "ignoreExtraElements": true + }, + { "matchesJsonPath": "$.checkInDate" }, + { + "matchesJsonPath": { + "expression": "$.servicePointId", + "matches": "[0-9a-f-]{36}" + } + } + ], + "headers": { + "x-okapi-tenant": { + "equalTo": "test_tenant" + } + } + }, + "response": { + "status": 201, + "headers": { + "Content-Type": "application/json" + }, + "jsonBody": { + "loan": { + "id": "cf23adf0-61ba-4887-bf82-956c4aae2260", + "userId": "df7f4993-8c14-4a0f-ab63-93975ab01c76", + "itemId": "5b95877d-86c0-4cb7-a0cd-7660b348ae5a", + "item": { + "title": "The Long Way to a Small, Angry Planet", + "barcode": "DCB_ITEM", + "status": { + "name": "Checked out" + } + }, + "loanDate": "2017-03-01T23:11:00.000Z", + "dueDate": "2017-04-01T23:11:00.000Z", + "checkinServicePointId": "9d1b77e8-f02e-4b7f-b296-3f2042ddac55", + "status": { + "name": "Closed" + }, + "action": "checkedin" + } + } + } +} From 429a24b1b41e9365080106fdddf464f8e6072916 Mon Sep 17 00:00:00 2001 From: oleksandr_vidinieiev Date: Thu, 11 Jun 2026 11:05:54 +0200 Subject: [PATCH 04/16] MODDCB-292 Refactoring --- .../dcb/service/impl/BorrowingLibraryServiceImpl.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/folio/dcb/service/impl/BorrowingLibraryServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/BorrowingLibraryServiceImpl.java index efc28c08..10816271 100644 --- a/src/main/java/org/folio/dcb/service/impl/BorrowingLibraryServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/BorrowingLibraryServiceImpl.java @@ -55,10 +55,9 @@ public void updateTransactionStatus(TransactionEntity dcbTransaction, Transactio updateTransactionEntity(dcbTransaction, requestedStatus); } else if (ITEM_CHECKED_OUT == currentStatus && ITEM_CHECKED_IN == requestedStatus) { log.info("updateTransactionStatus:: Checking in item for transaction {}.", dcbTransaction.getId()); - extractClaimReturnedResolution(transactionStatus) - .ifPresentOrElse( - resolution -> circulationService.checkInByBarcode(dcbTransaction, randomServicePointId, resolution), - () -> circulationService.checkInByBarcode(dcbTransaction, randomServicePointId)); + extractClaimReturnedResolution(transactionStatus).ifPresentOrElse( + resolution -> circulationService.checkInByBarcode(dcbTransaction, randomServicePointId, resolution), + () -> circulationService.checkInByBarcode(dcbTransaction, randomServicePointId)); updateTransactionEntity(dcbTransaction, requestedStatus); } else if(OPEN == currentStatus && AWAITING_PICKUP == requestedStatus) { From c5bba8526cf98e55cfcd998fe117459473a21ab6 Mon Sep 17 00:00:00 2001 From: oleksandr_vidinieiev Date: Thu, 11 Jun 2026 12:48:16 +0200 Subject: [PATCH 05/16] MODDCB-292 Extract claim returned resolution type --- .../folio/dcb/service/CirculationService.java | 5 +++-- .../impl/BorrowingLibraryServiceImpl.java | 6 +++--- .../dcb/service/impl/CirculationServiceImpl.java | 5 +++-- .../resources/swagger.api/dcb_transaction.yaml | 2 ++ .../swagger.api/schemas/CheckInRequest.yaml | 3 +-- .../schemas/ClaimReturnedResolution.yaml | 6 ++++++ .../swagger.api/schemas/transactionStatus.yaml | 8 ++------ .../org/folio/dcb/it/BorrowerTransactionIT.java | 16 ++++++++++++++-- .../dcb/service/BorrowingLibraryServiceTest.java | 9 +++++---- .../dcb/service/CirculationServiceTest.java | 5 +++-- 10 files changed, 42 insertions(+), 23 deletions(-) create mode 100644 src/main/resources/swagger.api/schemas/ClaimReturnedResolution.yaml diff --git a/src/main/java/org/folio/dcb/service/CirculationService.java b/src/main/java/org/folio/dcb/service/CirculationService.java index 6a297227..d2b8e079 100644 --- a/src/main/java/org/folio/dcb/service/CirculationService.java +++ b/src/main/java/org/folio/dcb/service/CirculationService.java @@ -1,5 +1,6 @@ package org.folio.dcb.service; +import org.folio.dcb.domain.dto.ClaimReturnedResolution; import org.folio.dcb.domain.entity.TransactionEntity; public interface CirculationService { @@ -15,9 +16,9 @@ public interface CirculationService { * Check in item by barcode with an optional claim returned resolution * @param dcbTransaction dcbTransactionEntity * @param servicePointId service point id - * @param claimReturnedResolution optional claim returned resolution value + * @param claimReturnedResolution optional claim returned resolution */ - void checkInByBarcode(TransactionEntity dcbTransaction, String servicePointId, String claimReturnedResolution); + void checkInByBarcode(TransactionEntity dcbTransaction, String servicePointId, ClaimReturnedResolution claimReturnedResolution); /** * Check out item by barcode diff --git a/src/main/java/org/folio/dcb/service/impl/BorrowingLibraryServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/BorrowingLibraryServiceImpl.java index 10816271..4e82a78b 100644 --- a/src/main/java/org/folio/dcb/service/impl/BorrowingLibraryServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/BorrowingLibraryServiceImpl.java @@ -2,6 +2,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; +import org.folio.dcb.domain.dto.ClaimReturnedResolution; import org.folio.dcb.domain.dto.DcbTransaction; import org.folio.dcb.domain.dto.ServicePointRequest; import org.folio.dcb.domain.dto.TransactionStatus; @@ -87,11 +88,10 @@ private void updateTransactionEntity(TransactionEntity transactionEntity, Transa transactionRepository.save(transactionEntity); } - private Optional extractClaimReturnedResolution(TransactionStatus transactionStatus) { + private Optional extractClaimReturnedResolution(TransactionStatus transactionStatus) { return Optional.ofNullable(transactionStatus) .map(TransactionStatus::getContext) - .map(TransactionStatusContext::getClaimReturnedResulution) - .map(TransactionStatusContext.ClaimReturnedResulutionEnum::getValue); + .map(TransactionStatusContext::getClaimReturnedResolution); } } diff --git a/src/main/java/org/folio/dcb/service/impl/CirculationServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/CirculationServiceImpl.java index 95730c13..2c029f97 100644 --- a/src/main/java/org/folio/dcb/service/impl/CirculationServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/CirculationServiceImpl.java @@ -6,6 +6,7 @@ import org.folio.dcb.domain.dto.CheckInRequest; import org.folio.dcb.domain.dto.CheckOutRequest; import org.folio.dcb.domain.dto.CirculationRequest; +import org.folio.dcb.domain.dto.ClaimReturnedResolution; import org.folio.dcb.domain.entity.TransactionEntity; import org.folio.dcb.exception.CirculationRequestException; import org.folio.dcb.service.CirculationService; @@ -35,7 +36,7 @@ public void checkInByBarcode(TransactionEntity dcbTransaction, String servicePoi } @Override - public void checkInByBarcode(TransactionEntity dcbTransaction, String servicePointId, String claimReturnedResolution) { + public void checkInByBarcode(TransactionEntity dcbTransaction, String servicePointId, ClaimReturnedResolution claimReturnedResolution) { log.debug("checkInByBarcode:: checking in item for transaction {} with claimReturnedResolution '{}'.", dcbTransaction.getId(), claimReturnedResolution); circulationClient.checkInByBarcode(createCheckInRequest(dcbTransaction.getItemBarcode(), servicePointId, claimReturnedResolution)); @@ -68,7 +69,7 @@ private CheckInRequest createCheckInRequest(String itemBarcode, String servicePo return createCheckInRequest(itemBarcode, servicePointId, null); } - private CheckInRequest createCheckInRequest(String itemBarcode, String servicePointId, String claimReturnedResolution){ + private CheckInRequest createCheckInRequest(String itemBarcode, String servicePointId, ClaimReturnedResolution claimReturnedResolution){ return CheckInRequest.builder() .itemBarcode(itemBarcode) .servicePointId(servicePointId) diff --git a/src/main/resources/swagger.api/dcb_transaction.yaml b/src/main/resources/swagger.api/dcb_transaction.yaml index 8fd22d5d..e4d48668 100644 --- a/src/main/resources/swagger.api/dcb_transaction.yaml +++ b/src/main/resources/swagger.api/dcb_transaction.yaml @@ -502,6 +502,8 @@ components: $ref: 'schemas/CirculationRequest.yaml#/CirculationRequest' CheckInRequest: $ref: 'schemas/CheckInRequest.yaml#/CheckInRequest' + ClaimReturnedResolution: + $ref: 'schemas/ClaimReturnedResolution.yaml#/ClaimReturnedResolution' CheckOutRequest: $ref: 'schemas/checkOutRequest.yaml#/CheckOutRequest' ServicePointRequest: diff --git a/src/main/resources/swagger.api/schemas/CheckInRequest.yaml b/src/main/resources/swagger.api/schemas/CheckInRequest.yaml index d19c5130..4a630b7b 100644 --- a/src/main/resources/swagger.api/schemas/CheckInRequest.yaml +++ b/src/main/resources/swagger.api/schemas/CheckInRequest.yaml @@ -14,5 +14,4 @@ CheckInRequest: type: string format: date-type claimReturnedResolution: - description: Claim returned resolution, passed when checking in a claimed returned item - type: string + $ref: 'ClaimReturnedResolution.yaml#/ClaimReturnedResolution' diff --git a/src/main/resources/swagger.api/schemas/ClaimReturnedResolution.yaml b/src/main/resources/swagger.api/schemas/ClaimReturnedResolution.yaml new file mode 100644 index 00000000..10b6761d --- /dev/null +++ b/src/main/resources/swagger.api/schemas/ClaimReturnedResolution.yaml @@ -0,0 +1,6 @@ +ClaimReturnedResolution: + type: string + description: Claim returned resolution + enum: + - Found by library + - Returned by patron diff --git a/src/main/resources/swagger.api/schemas/transactionStatus.yaml b/src/main/resources/swagger.api/schemas/transactionStatus.yaml index be14d6d8..974ef687 100644 --- a/src/main/resources/swagger.api/schemas/transactionStatus.yaml +++ b/src/main/resources/swagger.api/schemas/transactionStatus.yaml @@ -22,9 +22,5 @@ TransactionStatusContext: type: object description: Optional context for the transaction status update properties: - claimReturnedResulution: - type: string - description: Claim returned resolution value - enum: - - Found by library - - Returned by patron + claimReturnedResolution: + $ref: 'ClaimReturnedResolution.yaml#/ClaimReturnedResolution' diff --git a/src/test/java/org/folio/dcb/it/BorrowerTransactionIT.java b/src/test/java/org/folio/dcb/it/BorrowerTransactionIT.java index b9c3ce54..7456885a 100644 --- a/src/test/java/org/folio/dcb/it/BorrowerTransactionIT.java +++ b/src/test/java/org/folio/dcb/it/BorrowerTransactionIT.java @@ -45,6 +45,7 @@ import java.time.ZoneOffset; import java.util.Map; +import org.folio.dcb.domain.dto.ClaimReturnedResolution; import org.folio.dcb.domain.dto.TransactionStatus; import org.folio.dcb.domain.dto.TransactionStatus.StatusEnum; import org.folio.dcb.domain.dto.TransactionStatusContext; @@ -230,7 +231,7 @@ void updateTransactionStatus_positive_fromItemCheckedOutToItemCheckedIn() throws void updateTransactionStatus_positive_fromItemCheckedOutToItemCheckedInWithFoundByLibraryContext() throws Exception { testJdbcHelper.saveDcbTransaction(DCB_TRANSACTION_ID, ITEM_CHECKED_OUT, borrowerDcbTransaction()); var context = TransactionStatusContext.builder() - .claimReturnedResulution(TransactionStatusContext.ClaimReturnedResulutionEnum.FOUND_BY_LIBRARY) + .claimReturnedResolution(ClaimReturnedResolution.FOUND_BY_LIBRARY) .build(); var transactionStatus = TransactionStatus.builder() .status(ITEM_CHECKED_IN) @@ -248,7 +249,7 @@ void updateTransactionStatus_positive_fromItemCheckedOutToItemCheckedInWithFound void updateTransactionStatus_positive_fromItemCheckedOutToItemCheckedInWithReturnedByPatronContext() throws Exception { testJdbcHelper.saveDcbTransaction(DCB_TRANSACTION_ID, ITEM_CHECKED_OUT, borrowerDcbTransaction()); var context = TransactionStatusContext.builder() - .claimReturnedResulution(TransactionStatusContext.ClaimReturnedResulutionEnum.RETURNED_BY_PATRON) + .claimReturnedResolution(ClaimReturnedResolution.RETURNED_BY_PATRON) .build(); var transactionStatus = TransactionStatus.builder() .status(ITEM_CHECKED_IN) @@ -261,6 +262,17 @@ void updateTransactionStatus_positive_fromItemCheckedOutToItemCheckedInWithRetur .withRequestBody(matchingJsonPath("$.claimReturnedResolution", equalTo("Returned by patron")))); } + @Test + void updateTransactionStatus_negative_invalidClaimReturnedResolution() throws Exception { + testJdbcHelper.saveDcbTransaction(DCB_TRANSACTION_ID, ITEM_CHECKED_OUT, borrowerDcbTransaction()); + mockMvc.perform(put("/transactions/{id}/status", DCB_TRANSACTION_ID) + .content("{\"status\":\"ITEM_CHECKED_IN\",\"context\":{\"claimReturnedResolution\":\"INVALID_VALUE\"}}") + .headers(defaultHeaders()) + .contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isBadRequest()); + } + @Test @WireMockStub({ "/stubs/mod-circulation/check-in-by-barcode/201-post(random SP).json", diff --git a/src/test/java/org/folio/dcb/service/BorrowingLibraryServiceTest.java b/src/test/java/org/folio/dcb/service/BorrowingLibraryServiceTest.java index e4f31119..6555c8f5 100644 --- a/src/test/java/org/folio/dcb/service/BorrowingLibraryServiceTest.java +++ b/src/test/java/org/folio/dcb/service/BorrowingLibraryServiceTest.java @@ -1,5 +1,6 @@ package org.folio.dcb.service; +import org.folio.dcb.domain.dto.ClaimReturnedResolution; import org.folio.dcb.domain.dto.TransactionStatus; import org.folio.dcb.domain.dto.TransactionStatusContext; import org.folio.dcb.repository.TransactionRepository; @@ -125,7 +126,7 @@ void testTransactionStatusUpdateFromItemCheckedOutToItemCheckedInWithFoundByLibr transactionEntity.setStatus(ITEM_CHECKED_OUT); doNothing().when(circulationService).checkInByBarcode(any(), any(), any()); var context = TransactionStatusContext.builder() - .claimReturnedResulution(TransactionStatusContext.ClaimReturnedResulutionEnum.FOUND_BY_LIBRARY) + .claimReturnedResolution(ClaimReturnedResolution.FOUND_BY_LIBRARY) .build(); TransactionStatus transactionStatus = TransactionStatus.builder() .status(ITEM_CHECKED_IN) @@ -133,7 +134,7 @@ void testTransactionStatusUpdateFromItemCheckedOutToItemCheckedInWithFoundByLibr .build(); borrowingLibraryService.updateTransactionStatus(transactionEntity, transactionStatus); - verify(circulationService).checkInByBarcode(any(), any(), eq("Found by library")); + verify(circulationService).checkInByBarcode(any(), any(), eq(ClaimReturnedResolution.FOUND_BY_LIBRARY)); Assertions.assertEquals(ITEM_CHECKED_IN, transactionEntity.getStatus()); } @@ -143,7 +144,7 @@ void testTransactionStatusUpdateFromItemCheckedOutToItemCheckedInWithReturnedByP transactionEntity.setStatus(ITEM_CHECKED_OUT); doNothing().when(circulationService).checkInByBarcode(any(), any(), any()); var context = TransactionStatusContext.builder() - .claimReturnedResulution(TransactionStatusContext.ClaimReturnedResulutionEnum.RETURNED_BY_PATRON) + .claimReturnedResolution(ClaimReturnedResolution.RETURNED_BY_PATRON) .build(); TransactionStatus transactionStatus = TransactionStatus.builder() .status(ITEM_CHECKED_IN) @@ -151,7 +152,7 @@ void testTransactionStatusUpdateFromItemCheckedOutToItemCheckedInWithReturnedByP .build(); borrowingLibraryService.updateTransactionStatus(transactionEntity, transactionStatus); - verify(circulationService).checkInByBarcode(any(), any(), eq("Returned by patron")); + verify(circulationService).checkInByBarcode(any(), any(), eq(ClaimReturnedResolution.RETURNED_BY_PATRON)); Assertions.assertEquals(ITEM_CHECKED_IN, transactionEntity.getStatus()); } diff --git a/src/test/java/org/folio/dcb/service/CirculationServiceTest.java b/src/test/java/org/folio/dcb/service/CirculationServiceTest.java index 2c29c3e8..19bd502e 100644 --- a/src/test/java/org/folio/dcb/service/CirculationServiceTest.java +++ b/src/test/java/org/folio/dcb/service/CirculationServiceTest.java @@ -11,6 +11,7 @@ import java.util.UUID; +import org.folio.dcb.domain.dto.ClaimReturnedResolution; import org.folio.dcb.integration.circulation.CirculationClient; import org.folio.dcb.domain.dto.CirculationRequest; import org.folio.dcb.domain.entity.TransactionEntity; @@ -49,9 +50,9 @@ void checkInByBarcodeWithServicePointTest(){ @Test void checkInByBarcodeWithServicePointAndClaimReturnedResolutionTest() { - circulationService.checkInByBarcode(createTransactionEntity(), String.valueOf(UUID.randomUUID()), "Found by library"); + circulationService.checkInByBarcode(createTransactionEntity(), String.valueOf(UUID.randomUUID()), ClaimReturnedResolution.FOUND_BY_LIBRARY); verify(circulationClient).checkInByBarcode(argThat(req -> - "Found by library".equals(req.getClaimReturnedResolution()))); + ClaimReturnedResolution.FOUND_BY_LIBRARY.equals(req.getClaimReturnedResolution()))); } @Test From 923f071f646ac77a32da8f37f6a9aebec1368371 Mon Sep 17 00:00:00 2001 From: oleksandr_vidinieiev Date: Thu, 11 Jun 2026 13:02:28 +0200 Subject: [PATCH 06/16] MODDCB-292 Refactoring --- .../impl/BorrowingLibraryServiceImpl.java | 16 ++++++---------- .../swagger.api/schemas/transactionStatus.yaml | 13 +++++-------- 2 files changed, 11 insertions(+), 18 deletions(-) diff --git a/src/main/java/org/folio/dcb/service/impl/BorrowingLibraryServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/BorrowingLibraryServiceImpl.java index 4e82a78b..6090a336 100644 --- a/src/main/java/org/folio/dcb/service/impl/BorrowingLibraryServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/BorrowingLibraryServiceImpl.java @@ -2,7 +2,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; -import org.folio.dcb.domain.dto.ClaimReturnedResolution; + import org.folio.dcb.domain.dto.DcbTransaction; import org.folio.dcb.domain.dto.ServicePointRequest; import org.folio.dcb.domain.dto.TransactionStatus; @@ -56,9 +56,11 @@ public void updateTransactionStatus(TransactionEntity dcbTransaction, Transactio updateTransactionEntity(dcbTransaction, requestedStatus); } else if (ITEM_CHECKED_OUT == currentStatus && ITEM_CHECKED_IN == requestedStatus) { log.info("updateTransactionStatus:: Checking in item for transaction {}.", dcbTransaction.getId()); - extractClaimReturnedResolution(transactionStatus).ifPresentOrElse( - resolution -> circulationService.checkInByBarcode(dcbTransaction, randomServicePointId, resolution), - () -> circulationService.checkInByBarcode(dcbTransaction, randomServicePointId)); + Optional.ofNullable(transactionStatus.getContext()) + .map(TransactionStatusContext::getClaimReturnedResolution) + .ifPresentOrElse( + resolution -> circulationService.checkInByBarcode(dcbTransaction, randomServicePointId, resolution), + () -> circulationService.checkInByBarcode(dcbTransaction, randomServicePointId)); updateTransactionEntity(dcbTransaction, requestedStatus); } else if(OPEN == currentStatus && AWAITING_PICKUP == requestedStatus) { @@ -88,10 +90,4 @@ private void updateTransactionEntity(TransactionEntity transactionEntity, Transa transactionRepository.save(transactionEntity); } - private Optional extractClaimReturnedResolution(TransactionStatus transactionStatus) { - return Optional.ofNullable(transactionStatus) - .map(TransactionStatus::getContext) - .map(TransactionStatusContext::getClaimReturnedResolution); - } - } diff --git a/src/main/resources/swagger.api/schemas/transactionStatus.yaml b/src/main/resources/swagger.api/schemas/transactionStatus.yaml index 974ef687..8a4f3a64 100644 --- a/src/main/resources/swagger.api/schemas/transactionStatus.yaml +++ b/src/main/resources/swagger.api/schemas/transactionStatus.yaml @@ -16,11 +16,8 @@ TransactionStatus: message: type: string context: - $ref: '#/TransactionStatusContext' - -TransactionStatusContext: - type: object - description: Optional context for the transaction status update - properties: - claimReturnedResolution: - $ref: 'ClaimReturnedResolution.yaml#/ClaimReturnedResolution' + type: object + description: Optional context for the transaction status update + properties: + claimReturnedResolution: + $ref: 'ClaimReturnedResolution.yaml#/ClaimReturnedResolution' From de072893c68040435980af6e47968b2aef88fecd Mon Sep 17 00:00:00 2001 From: oleksandr_vidinieiev Date: Thu, 11 Jun 2026 13:09:58 +0200 Subject: [PATCH 07/16] MODDCB-292 Refactoring --- src/test/java/org/folio/dcb/it/BorrowerTransactionIT.java | 4 ++-- ... => 201-post(with claim returned - found by library).json} | 0 ...> 201-post(with claim returned - returned by patron).json} | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename src/test/resources/stubs/mod-circulation/check-in-by-barcode/{201-post(with claim returned found by library).json => 201-post(with claim returned - found by library).json} (100%) rename src/test/resources/stubs/mod-circulation/check-in-by-barcode/{201-post(with claim returned returned by patron).json => 201-post(with claim returned - returned by patron).json} (100%) diff --git a/src/test/java/org/folio/dcb/it/BorrowerTransactionIT.java b/src/test/java/org/folio/dcb/it/BorrowerTransactionIT.java index 7456885a..4dc44a5d 100644 --- a/src/test/java/org/folio/dcb/it/BorrowerTransactionIT.java +++ b/src/test/java/org/folio/dcb/it/BorrowerTransactionIT.java @@ -227,7 +227,7 @@ void updateTransactionStatus_positive_fromItemCheckedOutToItemCheckedIn() throws } @Test - @WireMockStub("/stubs/mod-circulation/check-in-by-barcode/201-post(with claim returned found by library).json") + @WireMockStub("/stubs/mod-circulation/check-in-by-barcode/201-post(with claim returned - found by library).json") void updateTransactionStatus_positive_fromItemCheckedOutToItemCheckedInWithFoundByLibraryContext() throws Exception { testJdbcHelper.saveDcbTransaction(DCB_TRANSACTION_ID, ITEM_CHECKED_OUT, borrowerDcbTransaction()); var context = TransactionStatusContext.builder() @@ -245,7 +245,7 @@ void updateTransactionStatus_positive_fromItemCheckedOutToItemCheckedInWithFound } @Test - @WireMockStub("/stubs/mod-circulation/check-in-by-barcode/201-post(with claim returned returned by patron).json") + @WireMockStub("/stubs/mod-circulation/check-in-by-barcode/201-post(with claim returned - returned by patron).json") void updateTransactionStatus_positive_fromItemCheckedOutToItemCheckedInWithReturnedByPatronContext() throws Exception { testJdbcHelper.saveDcbTransaction(DCB_TRANSACTION_ID, ITEM_CHECKED_OUT, borrowerDcbTransaction()); var context = TransactionStatusContext.builder() diff --git a/src/test/resources/stubs/mod-circulation/check-in-by-barcode/201-post(with claim returned found by library).json b/src/test/resources/stubs/mod-circulation/check-in-by-barcode/201-post(with claim returned - found by library).json similarity index 100% rename from src/test/resources/stubs/mod-circulation/check-in-by-barcode/201-post(with claim returned found by library).json rename to src/test/resources/stubs/mod-circulation/check-in-by-barcode/201-post(with claim returned - found by library).json diff --git a/src/test/resources/stubs/mod-circulation/check-in-by-barcode/201-post(with claim returned returned by patron).json b/src/test/resources/stubs/mod-circulation/check-in-by-barcode/201-post(with claim returned - returned by patron).json similarity index 100% rename from src/test/resources/stubs/mod-circulation/check-in-by-barcode/201-post(with claim returned returned by patron).json rename to src/test/resources/stubs/mod-circulation/check-in-by-barcode/201-post(with claim returned - returned by patron).json From 1415615a858e550cd516f08d8a8a18213ff303fd Mon Sep 17 00:00:00 2001 From: oleksandr_vidinieiev Date: Thu, 11 Jun 2026 13:14:18 +0200 Subject: [PATCH 08/16] MODDCB-292 Refactoring --- .../dcb/service/BorrowingLibraryServiceTest.java | 4 ++-- .../org/folio/dcb/service/CirculationServiceTest.java | 11 ++++++----- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/test/java/org/folio/dcb/service/BorrowingLibraryServiceTest.java b/src/test/java/org/folio/dcb/service/BorrowingLibraryServiceTest.java index 6555c8f5..932b88d3 100644 --- a/src/test/java/org/folio/dcb/service/BorrowingLibraryServiceTest.java +++ b/src/test/java/org/folio/dcb/service/BorrowingLibraryServiceTest.java @@ -121,7 +121,7 @@ void testTransactionStatusUpdateFromItemCheckedOutToItemCheckedIn() { } @Test - void testTransactionStatusUpdateFromItemCheckedOutToItemCheckedInWithFoundByLibraryContext() { + void testTransactionStatusUpdateFromItemCheckedOutToItemCheckedInWithFoundByLibrary() { var transactionEntity = createTransactionEntity(); transactionEntity.setStatus(ITEM_CHECKED_OUT); doNothing().when(circulationService).checkInByBarcode(any(), any(), any()); @@ -139,7 +139,7 @@ void testTransactionStatusUpdateFromItemCheckedOutToItemCheckedInWithFoundByLibr } @Test - void testTransactionStatusUpdateFromItemCheckedOutToItemCheckedInWithReturnedByPatronContext() { + void testTransactionStatusUpdateFromItemCheckedOutToItemCheckedInWithReturnedByPatron() { var transactionEntity = createTransactionEntity(); transactionEntity.setStatus(ITEM_CHECKED_OUT); doNothing().when(circulationService).checkInByBarcode(any(), any(), any()); diff --git a/src/test/java/org/folio/dcb/service/CirculationServiceTest.java b/src/test/java/org/folio/dcb/service/CirculationServiceTest.java index 19bd502e..facebb66 100644 --- a/src/test/java/org/folio/dcb/service/CirculationServiceTest.java +++ b/src/test/java/org/folio/dcb/service/CirculationServiceTest.java @@ -1,5 +1,6 @@ package org.folio.dcb.service; +import static java.util.UUID.randomUUID; import static org.folio.dcb.utils.EntityUtils.createCirculationRequest; import static org.folio.dcb.utils.EntityUtils.createTransactionEntity; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -44,22 +45,22 @@ void checkInByBarcodeTest(){ @Test void checkInByBarcodeWithServicePointTest(){ - circulationService.checkInByBarcode(createTransactionEntity(), String.valueOf(UUID.randomUUID())); + circulationService.checkInByBarcode(createTransactionEntity(), String.valueOf(randomUUID())); verify(circulationClient).checkInByBarcode(any()); } @Test void checkInByBarcodeWithServicePointAndClaimReturnedResolutionTest() { - circulationService.checkInByBarcode(createTransactionEntity(), String.valueOf(UUID.randomUUID()), ClaimReturnedResolution.FOUND_BY_LIBRARY); + circulationService.checkInByBarcode(createTransactionEntity(), randomUUID().toString(), + ClaimReturnedResolution.FOUND_BY_LIBRARY); verify(circulationClient).checkInByBarcode(argThat(req -> ClaimReturnedResolution.FOUND_BY_LIBRARY.equals(req.getClaimReturnedResolution()))); } @Test void checkInByBarcodeWithServicePointAndNullClaimReturnedResolutionTest() { - circulationService.checkInByBarcode(createTransactionEntity(), String.valueOf(UUID.randomUUID()), null); - verify(circulationClient).checkInByBarcode(argThat(req -> - req.getClaimReturnedResolution() == null)); + circulationService.checkInByBarcode(createTransactionEntity(), randomUUID().toString(), null); + verify(circulationClient).checkInByBarcode(argThat(req -> req.getClaimReturnedResolution() == null)); } @Test From 826f3334d015b3e09e881a38afd70790547fc75a Mon Sep 17 00:00:00 2001 From: oleksandr_vidinieiev Date: Thu, 11 Jun 2026 13:23:46 +0200 Subject: [PATCH 09/16] MODDCB-292 Remove redundant import --- src/test/java/org/folio/dcb/service/CirculationServiceTest.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/test/java/org/folio/dcb/service/CirculationServiceTest.java b/src/test/java/org/folio/dcb/service/CirculationServiceTest.java index facebb66..07f53f9a 100644 --- a/src/test/java/org/folio/dcb/service/CirculationServiceTest.java +++ b/src/test/java/org/folio/dcb/service/CirculationServiceTest.java @@ -10,8 +10,6 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import java.util.UUID; - import org.folio.dcb.domain.dto.ClaimReturnedResolution; import org.folio.dcb.integration.circulation.CirculationClient; import org.folio.dcb.domain.dto.CirculationRequest; From 33f722ebed9ddb66f02649396e731d066a42cfe5 Mon Sep 17 00:00:00 2001 From: oleksandr_vidinieiev Date: Thu, 11 Jun 2026 15:00:05 +0200 Subject: [PATCH 10/16] MODDCB-292 Fix checkstyle violations --- .../folio/dcb/service/CirculationService.java | 6 ++++-- .../impl/BorrowingLibraryServiceImpl.java | 3 +-- .../dcb/service/impl/CirculationServiceImpl.java | 16 ++++++++++------ .../org/folio/dcb/it/BorrowerTransactionIT.java | 6 +++--- .../dcb/service/BorrowingLibraryServiceTest.java | 2 -- .../dcb/service/CirculationServiceTest.java | 4 ++-- 6 files changed, 20 insertions(+), 17 deletions(-) diff --git a/src/main/java/org/folio/dcb/service/CirculationService.java b/src/main/java/org/folio/dcb/service/CirculationService.java index d1d05269..e7b0cbbd 100644 --- a/src/main/java/org/folio/dcb/service/CirculationService.java +++ b/src/main/java/org/folio/dcb/service/CirculationService.java @@ -15,12 +15,14 @@ public interface CirculationService { void checkInByBarcode(TransactionEntity dcbTransaction, String servicePointId); /** - * Check in item by barcode with an optional claim returned resolution + * Check in item by barcode with an optional claim returned resolution. + * * @param dcbTransaction dcbTransactionEntity * @param servicePointId service point id * @param claimReturnedResolution optional claim returned resolution */ - void checkInByBarcode(TransactionEntity dcbTransaction, String servicePointId, ClaimReturnedResolution claimReturnedResolution); + void checkInByBarcode(TransactionEntity dcbTransaction, String servicePointId, + ClaimReturnedResolution claimReturnedResolution); /** * Check out an item by barcode. diff --git a/src/main/java/org/folio/dcb/service/impl/BorrowingLibraryServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/BorrowingLibraryServiceImpl.java index a88ee449..3c8d6db3 100644 --- a/src/main/java/org/folio/dcb/service/impl/BorrowingLibraryServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/BorrowingLibraryServiceImpl.java @@ -13,7 +13,6 @@ import java.util.UUID; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; - import org.folio.dcb.domain.dto.DcbTransaction; import org.folio.dcb.domain.dto.ServicePointRequest; import org.folio.dcb.domain.dto.TransactionStatus; @@ -65,7 +64,7 @@ public void updateTransactionStatus(TransactionEntity dcbTransaction, Transactio () -> circulationService.checkInByBarcode(dcbTransaction, randomServicePointId)); updateTransactionEntity(dcbTransaction, newStatus); - } else if(OPEN == currStatus && AWAITING_PICKUP == newStatus) { + } else if (OPEN == currStatus && AWAITING_PICKUP == newStatus) { circulationService.checkInByBarcode(dcbTransaction); updateTransactionEntity(dcbTransaction, newStatus); } else if (AWAITING_PICKUP == currStatus && ITEM_CHECKED_OUT == newStatus) { diff --git a/src/main/java/org/folio/dcb/service/impl/CirculationServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/CirculationServiceImpl.java index eb89d38f..428ed8c0 100644 --- a/src/main/java/org/folio/dcb/service/impl/CirculationServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/CirculationServiceImpl.java @@ -5,7 +5,6 @@ import lombok.extern.log4j.Log4j2; import org.folio.dcb.domain.dto.CheckInRequest; import org.folio.dcb.domain.dto.CheckOutRequest; -import org.folio.dcb.domain.dto.CirculationRequest; import org.folio.dcb.domain.dto.ClaimReturnedResolution; import org.folio.dcb.domain.entity.TransactionEntity; import org.folio.dcb.exception.CirculationRequestException; @@ -37,10 +36,13 @@ public void checkInByBarcode(TransactionEntity dcbTransaction, String servicePoi } @Override - public void checkInByBarcode(TransactionEntity dcbTransaction, String servicePointId, ClaimReturnedResolution claimReturnedResolution) { + public void checkInByBarcode(TransactionEntity dcbTransaction, String servicePointId, + ClaimReturnedResolution claimReturnedResolution) { + log.debug("checkInByBarcode:: checking in item for transaction {} with claimReturnedResolution '{}'.", dcbTransaction.getId(), claimReturnedResolution); - circulationClient.checkInByBarcode(createCheckInRequest(dcbTransaction.getItemBarcode(), servicePointId, claimReturnedResolution)); + circulationClient.checkInByBarcode(createCheckInRequest(dcbTransaction.getItemBarcode(), servicePointId, + claimReturnedResolution)); } @Override @@ -68,11 +70,13 @@ public void cancelRequest(TransactionEntity dcbTransaction, boolean isItemUnavai } } - private CheckInRequest createCheckInRequest(String itemBarcode, String servicePointId){ + private CheckInRequest createCheckInRequest(String itemBarcode, String servicePointId) { return createCheckInRequest(itemBarcode, servicePointId, null); } - private CheckInRequest createCheckInRequest(String itemBarcode, String servicePointId, ClaimReturnedResolution claimReturnedResolution){ + private CheckInRequest createCheckInRequest(String itemBarcode, String servicePointId, + ClaimReturnedResolution claimReturnedResolution) { + return CheckInRequest.builder() .itemBarcode(itemBarcode) .servicePointId(servicePointId) @@ -81,7 +85,7 @@ private CheckInRequest createCheckInRequest(String itemBarcode, String servicePo .build(); } - private CheckOutRequest createCheckOutRequest(String itemBarcode, String userBarcode, String servicePointId){ + private CheckOutRequest createCheckOutRequest(String itemBarcode, String userBarcode, String servicePointId) { return CheckOutRequest.builder() .itemBarcode(itemBarcode) .userBarcode(userBarcode) diff --git a/src/test/java/org/folio/dcb/it/BorrowerTransactionIT.java b/src/test/java/org/folio/dcb/it/BorrowerTransactionIT.java index 745a54f0..d4c2afbd 100644 --- a/src/test/java/org/folio/dcb/it/BorrowerTransactionIT.java +++ b/src/test/java/org/folio/dcb/it/BorrowerTransactionIT.java @@ -43,7 +43,6 @@ import java.time.OffsetDateTime; import java.time.ZoneOffset; import java.util.Map; - import org.folio.dcb.domain.dto.ClaimReturnedResolution; import org.folio.dcb.domain.dto.TransactionStatus; import org.folio.dcb.domain.dto.TransactionStatus.StatusEnum; @@ -227,7 +226,7 @@ void updateTransactionStatus_positive_fromItemCheckedOutToItemCheckedIn() throws @Test @WireMockStub("/stubs/mod-circulation/check-in-by-barcode/201-post(with claim returned - found by library).json") - void updateTransactionStatus_positive_fromItemCheckedOutToItemCheckedInWithFoundByLibraryContext() throws Exception { + void updateTransactionStatus_positive_fromItemCheckedOutToItemCheckedInWithFoundByLibrary() throws Exception { testJdbcHelper.saveDcbTransaction(DCB_TRANSACTION_ID, ITEM_CHECKED_OUT, borrowerDcbTransaction()); var context = TransactionStatusContext.builder() .claimReturnedResolution(ClaimReturnedResolution.FOUND_BY_LIBRARY) @@ -245,7 +244,8 @@ void updateTransactionStatus_positive_fromItemCheckedOutToItemCheckedInWithFound @Test @WireMockStub("/stubs/mod-circulation/check-in-by-barcode/201-post(with claim returned - returned by patron).json") - void updateTransactionStatus_positive_fromItemCheckedOutToItemCheckedInWithReturnedByPatronContext() throws Exception { + void updateTransactionStatus_positive_fromItemCheckedOutToItemCheckedInWithReturnedByPatron() throws Exception { + testJdbcHelper.saveDcbTransaction(DCB_TRANSACTION_ID, ITEM_CHECKED_OUT, borrowerDcbTransaction()); var context = TransactionStatusContext.builder() .claimReturnedResolution(ClaimReturnedResolution.RETURNED_BY_PATRON) diff --git a/src/test/java/org/folio/dcb/service/BorrowingLibraryServiceTest.java b/src/test/java/org/folio/dcb/service/BorrowingLibraryServiceTest.java index 818f5616..475cfc87 100644 --- a/src/test/java/org/folio/dcb/service/BorrowingLibraryServiceTest.java +++ b/src/test/java/org/folio/dcb/service/BorrowingLibraryServiceTest.java @@ -20,7 +20,6 @@ import static org.mockito.Mockito.when; import java.util.UUID; - import org.folio.dcb.domain.dto.ClaimReturnedResolution; import org.folio.dcb.domain.dto.TransactionStatus; import org.folio.dcb.domain.dto.TransactionStatusContext; @@ -156,5 +155,4 @@ void testTransactionStatusUpdateFromItemCheckedOutToItemCheckedInWithReturnedByP verify(circulationService).checkInByBarcode(any(), any(), eq(ClaimReturnedResolution.RETURNED_BY_PATRON)); assertEquals(ITEM_CHECKED_IN, transactionEntity.getStatus()); } - } diff --git a/src/test/java/org/folio/dcb/service/CirculationServiceTest.java b/src/test/java/org/folio/dcb/service/CirculationServiceTest.java index 35819353..ef5ca0d0 100644 --- a/src/test/java/org/folio/dcb/service/CirculationServiceTest.java +++ b/src/test/java/org/folio/dcb/service/CirculationServiceTest.java @@ -11,11 +11,11 @@ import static org.mockito.Mockito.when; import java.util.UUID; -import org.folio.dcb.domain.dto.ClaimReturnedResolution; -import org.folio.dcb.integration.circulation.CirculationClient; import org.folio.dcb.domain.dto.CirculationRequest; +import org.folio.dcb.domain.dto.ClaimReturnedResolution; import org.folio.dcb.domain.entity.TransactionEntity; import org.folio.dcb.exception.CirculationRequestException; +import org.folio.dcb.integration.circulation.CirculationClient; import org.folio.dcb.service.impl.CirculationServiceImpl; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; From 729a85c038d2c178ca11524953aa7afd99ba1dcf Mon Sep 17 00:00:00 2001 From: oleksandr_vidinieiev Date: Fri, 12 Jun 2026 15:40:41 +0200 Subject: [PATCH 11/16] MODDCB-292 Debug logging --- .../org/folio/dcb/controller/ExceptionHandlingController.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/folio/dcb/controller/ExceptionHandlingController.java b/src/main/java/org/folio/dcb/controller/ExceptionHandlingController.java index 88a2bc74..7f7269fa 100644 --- a/src/main/java/org/folio/dcb/controller/ExceptionHandlingController.java +++ b/src/main/java/org/folio/dcb/controller/ExceptionHandlingController.java @@ -174,6 +174,7 @@ public ResponseEntity handleDcbHubLocationException(DcbHubLocationExcept } private void logExceptionMessage(Exception ex) { - log.warn("Exception occurred [{}]", ex.getClass().getSimpleName()); + log.warn("Exception occurred [{}]", ex.getClass().getSimpleName(), ex); + } } From 87eae984a2ec912c3a214713bb70d81d66b90298 Mon Sep 17 00:00:00 2001 From: oleksandr_vidinieiev Date: Fri, 12 Jun 2026 15:47:21 +0200 Subject: [PATCH 12/16] MODDCB-292 Debug logging --- .../org/folio/dcb/controller/ExceptionHandlingController.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/org/folio/dcb/controller/ExceptionHandlingController.java b/src/main/java/org/folio/dcb/controller/ExceptionHandlingController.java index 7f7269fa..9ccfdef9 100644 --- a/src/main/java/org/folio/dcb/controller/ExceptionHandlingController.java +++ b/src/main/java/org/folio/dcb/controller/ExceptionHandlingController.java @@ -175,6 +175,5 @@ public ResponseEntity handleDcbHubLocationException(DcbHubLocationExcept private void logExceptionMessage(Exception ex) { log.warn("Exception occurred [{}]", ex.getClass().getSimpleName(), ex); - } } From 7c4d8950c88024e70c67bd4a08925799955cc781 Mon Sep 17 00:00:00 2001 From: oleksandr_vidinieiev Date: Fri, 12 Jun 2026 16:29:18 +0200 Subject: [PATCH 13/16] MODDCB-292 Debug logging --- .../dcb/controller/TransactionApiController.java | 1 + .../dcb/service/impl/BorrowingLibraryServiceImpl.java | 11 +++++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/folio/dcb/controller/TransactionApiController.java b/src/main/java/org/folio/dcb/controller/TransactionApiController.java index 00da0072..8dc6319c 100644 --- a/src/main/java/org/folio/dcb/controller/TransactionApiController.java +++ b/src/main/java/org/folio/dcb/controller/TransactionApiController.java @@ -56,6 +56,7 @@ public ResponseEntity createCirculationRequest(String @Override public ResponseEntity updateTransactionStatus(String id, TransactionStatus status) { log.info("updateTransactionStatus:: updating dcbTransaction with id {} to status {} ", id, status.getStatus()); + log.info("updateTransactionStatus:: status={}", status); try { var transactionStatusResponse = transactionsService.updateTransactionStatus(id, status); return ResponseEntity.status(HttpStatus.OK).body(transactionStatusResponse); diff --git a/src/main/java/org/folio/dcb/service/impl/BorrowingLibraryServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/BorrowingLibraryServiceImpl.java index 3c8d6db3..20b011f7 100644 --- a/src/main/java/org/folio/dcb/service/impl/BorrowingLibraryServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/BorrowingLibraryServiceImpl.java @@ -47,6 +47,7 @@ public TransactionStatusResponse createCirculation(String dcbTransactionId, DcbT public void updateTransactionStatus(TransactionEntity dcbTransaction, TransactionStatus transactionStatus) { log.debug("updateTransactionStatus:: Updating transaction {} from {} to {}.", dcbTransaction.getId(), dcbTransaction.getStatus(), transactionStatus.getStatus()); + log.info("updateTransactionStatus:: transactionStatus={}", transactionStatus); var currStatus = dcbTransaction.getStatus(); var newStatus = transactionStatus.getStatus(); String randomServicePointId = UUID.randomUUID().toString(); @@ -60,8 +61,14 @@ public void updateTransactionStatus(TransactionEntity dcbTransaction, Transactio Optional.ofNullable(transactionStatus.getContext()) .map(TransactionStatusContext::getClaimReturnedResolution) .ifPresentOrElse( - resolution -> circulationService.checkInByBarcode(dcbTransaction, randomServicePointId, resolution), - () -> circulationService.checkInByBarcode(dcbTransaction, randomServicePointId)); + resolution -> { + log.info("updateTransactionStatus:: resolution={}", resolution); + circulationService.checkInByBarcode(dcbTransaction, randomServicePointId, resolution); + }, + () -> { + log.info("updateTransactionStatus:: no resolution"); + circulationService.checkInByBarcode(dcbTransaction, randomServicePointId); + }); updateTransactionEntity(dcbTransaction, newStatus); } else if (OPEN == currStatus && AWAITING_PICKUP == newStatus) { From df5d12d038586fb6febad7450821766dbb0a87db Mon Sep 17 00:00:00 2001 From: oleksandr_vidinieiev Date: Fri, 12 Jun 2026 16:58:19 +0200 Subject: [PATCH 14/16] MODDCB-292 Debug logging --- .../folio/dcb/service/impl/CirculationServiceImpl.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/folio/dcb/service/impl/CirculationServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/CirculationServiceImpl.java index 428ed8c0..973a73e8 100644 --- a/src/main/java/org/folio/dcb/service/impl/CirculationServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/CirculationServiceImpl.java @@ -39,10 +39,12 @@ public void checkInByBarcode(TransactionEntity dcbTransaction, String servicePoi public void checkInByBarcode(TransactionEntity dcbTransaction, String servicePointId, ClaimReturnedResolution claimReturnedResolution) { - log.debug("checkInByBarcode:: checking in item for transaction {} with claimReturnedResolution '{}'.", + log.info("checkInByBarcode:: checking in item for transaction {} with claimReturnedResolution '{}'.", dcbTransaction.getId(), claimReturnedResolution); - circulationClient.checkInByBarcode(createCheckInRequest(dcbTransaction.getItemBarcode(), servicePointId, - claimReturnedResolution)); + CheckInRequest checkInRequest = createCheckInRequest(dcbTransaction.getItemBarcode(), servicePointId, + claimReturnedResolution); + log.info("checkInByBarcode:: request={}", checkInRequest); + circulationClient.checkInByBarcode(checkInRequest); } @Override From 073fa15834509f3b7f3bd8e04df489bddc1bd55e Mon Sep 17 00:00:00 2001 From: oleksandr_vidinieiev Date: Fri, 12 Jun 2026 22:10:57 +0200 Subject: [PATCH 15/16] MODDCB-292 Fix incorrect naming --- .../org/folio/dcb/service/CirculationService.java | 6 +++--- .../service/impl/BorrowingLibraryServiceImpl.java | 2 +- .../dcb/service/impl/CirculationServiceImpl.java | 14 +++++++------- .../resources/swagger.api/dcb_transaction.yaml | 4 ++-- .../swagger.api/schemas/CheckInRequest.yaml | 4 ++-- ...olution.yaml => claimedReturnedResolution.yaml} | 4 ++-- .../swagger.api/schemas/transactionStatus.yaml | 4 ++-- .../org/folio/dcb/it/BorrowerTransactionIT.java | 14 +++++++------- .../dcb/service/BorrowingLibraryServiceTest.java | 10 +++++----- .../folio/dcb/service/CirculationServiceTest.java | 12 ++++++------ ...st(with claim returned - found by library).json | 2 +- ...(with claim returned - returned by patron).json | 2 +- 12 files changed, 39 insertions(+), 39 deletions(-) rename src/main/resources/swagger.api/schemas/{ClaimReturnedResolution.yaml => claimedReturnedResolution.yaml} (50%) diff --git a/src/main/java/org/folio/dcb/service/CirculationService.java b/src/main/java/org/folio/dcb/service/CirculationService.java index e7b0cbbd..4dac85ff 100644 --- a/src/main/java/org/folio/dcb/service/CirculationService.java +++ b/src/main/java/org/folio/dcb/service/CirculationService.java @@ -1,6 +1,6 @@ package org.folio.dcb.service; -import org.folio.dcb.domain.dto.ClaimReturnedResolution; +import org.folio.dcb.domain.dto.ClaimedReturnedResolution; import org.folio.dcb.domain.entity.TransactionEntity; public interface CirculationService { @@ -19,10 +19,10 @@ public interface CirculationService { * * @param dcbTransaction dcbTransactionEntity * @param servicePointId service point id - * @param claimReturnedResolution optional claim returned resolution + * @param claimedReturnedResolution optional claim returned resolution */ void checkInByBarcode(TransactionEntity dcbTransaction, String servicePointId, - ClaimReturnedResolution claimReturnedResolution); + ClaimedReturnedResolution claimedReturnedResolution); /** * Check out an item by barcode. diff --git a/src/main/java/org/folio/dcb/service/impl/BorrowingLibraryServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/BorrowingLibraryServiceImpl.java index 20b011f7..b706aa43 100644 --- a/src/main/java/org/folio/dcb/service/impl/BorrowingLibraryServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/BorrowingLibraryServiceImpl.java @@ -59,7 +59,7 @@ public void updateTransactionStatus(TransactionEntity dcbTransaction, Transactio } else if (ITEM_CHECKED_OUT == currStatus && ITEM_CHECKED_IN == newStatus) { log.info("updateTransactionStatus:: Checking in item for transaction {}.", dcbTransaction.getId()); Optional.ofNullable(transactionStatus.getContext()) - .map(TransactionStatusContext::getClaimReturnedResolution) + .map(TransactionStatusContext::getClaimedReturnedResolution) .ifPresentOrElse( resolution -> { log.info("updateTransactionStatus:: resolution={}", resolution); diff --git a/src/main/java/org/folio/dcb/service/impl/CirculationServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/CirculationServiceImpl.java index 973a73e8..dcb38916 100644 --- a/src/main/java/org/folio/dcb/service/impl/CirculationServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/CirculationServiceImpl.java @@ -5,7 +5,7 @@ import lombok.extern.log4j.Log4j2; import org.folio.dcb.domain.dto.CheckInRequest; import org.folio.dcb.domain.dto.CheckOutRequest; -import org.folio.dcb.domain.dto.ClaimReturnedResolution; +import org.folio.dcb.domain.dto.ClaimedReturnedResolution; import org.folio.dcb.domain.entity.TransactionEntity; import org.folio.dcb.exception.CirculationRequestException; import org.folio.dcb.integration.circulation.CirculationClient; @@ -37,12 +37,12 @@ public void checkInByBarcode(TransactionEntity dcbTransaction, String servicePoi @Override public void checkInByBarcode(TransactionEntity dcbTransaction, String servicePointId, - ClaimReturnedResolution claimReturnedResolution) { + ClaimedReturnedResolution claimedReturnedResolution) { - log.info("checkInByBarcode:: checking in item for transaction {} with claimReturnedResolution '{}'.", - dcbTransaction.getId(), claimReturnedResolution); + log.info("checkInByBarcode:: checking in item for transaction {} with claimedReturnedResolution '{}'.", + dcbTransaction.getId(), claimedReturnedResolution); CheckInRequest checkInRequest = createCheckInRequest(dcbTransaction.getItemBarcode(), servicePointId, - claimReturnedResolution); + claimedReturnedResolution); log.info("checkInByBarcode:: request={}", checkInRequest); circulationClient.checkInByBarcode(checkInRequest); } @@ -77,13 +77,13 @@ private CheckInRequest createCheckInRequest(String itemBarcode, String servicePo } private CheckInRequest createCheckInRequest(String itemBarcode, String servicePointId, - ClaimReturnedResolution claimReturnedResolution) { + ClaimedReturnedResolution claimedReturnedResolution) { return CheckInRequest.builder() .itemBarcode(itemBarcode) .servicePointId(servicePointId) .checkInDate(OffsetDateTime.now().toString()) - .claimReturnedResolution(claimReturnedResolution) + .claimedReturnedResolution(claimedReturnedResolution) .build(); } diff --git a/src/main/resources/swagger.api/dcb_transaction.yaml b/src/main/resources/swagger.api/dcb_transaction.yaml index e4d48668..32830538 100644 --- a/src/main/resources/swagger.api/dcb_transaction.yaml +++ b/src/main/resources/swagger.api/dcb_transaction.yaml @@ -502,8 +502,8 @@ components: $ref: 'schemas/CirculationRequest.yaml#/CirculationRequest' CheckInRequest: $ref: 'schemas/CheckInRequest.yaml#/CheckInRequest' - ClaimReturnedResolution: - $ref: 'schemas/ClaimReturnedResolution.yaml#/ClaimReturnedResolution' + ClaimedReturnedResolution: + $ref: 'schemas/claimedReturnedResolution.yaml#/ClaimedReturnedResolution' CheckOutRequest: $ref: 'schemas/checkOutRequest.yaml#/CheckOutRequest' ServicePointRequest: diff --git a/src/main/resources/swagger.api/schemas/CheckInRequest.yaml b/src/main/resources/swagger.api/schemas/CheckInRequest.yaml index 4a630b7b..4ad48968 100644 --- a/src/main/resources/swagger.api/schemas/CheckInRequest.yaml +++ b/src/main/resources/swagger.api/schemas/CheckInRequest.yaml @@ -13,5 +13,5 @@ CheckInRequest: description: When the item was checked in type: string format: date-type - claimReturnedResolution: - $ref: 'ClaimReturnedResolution.yaml#/ClaimReturnedResolution' + claimedReturnedResolution: + $ref: 'claimedReturnedResolution.yaml#/ClaimedReturnedResolution' diff --git a/src/main/resources/swagger.api/schemas/ClaimReturnedResolution.yaml b/src/main/resources/swagger.api/schemas/claimedReturnedResolution.yaml similarity index 50% rename from src/main/resources/swagger.api/schemas/ClaimReturnedResolution.yaml rename to src/main/resources/swagger.api/schemas/claimedReturnedResolution.yaml index 10b6761d..780ce1db 100644 --- a/src/main/resources/swagger.api/schemas/ClaimReturnedResolution.yaml +++ b/src/main/resources/swagger.api/schemas/claimedReturnedResolution.yaml @@ -1,6 +1,6 @@ -ClaimReturnedResolution: +ClaimedReturnedResolution: type: string - description: Claim returned resolution + description: Claimed returned resolution enum: - Found by library - Returned by patron diff --git a/src/main/resources/swagger.api/schemas/transactionStatus.yaml b/src/main/resources/swagger.api/schemas/transactionStatus.yaml index 8a4f3a64..6dc9423c 100644 --- a/src/main/resources/swagger.api/schemas/transactionStatus.yaml +++ b/src/main/resources/swagger.api/schemas/transactionStatus.yaml @@ -19,5 +19,5 @@ TransactionStatus: type: object description: Optional context for the transaction status update properties: - claimReturnedResolution: - $ref: 'ClaimReturnedResolution.yaml#/ClaimReturnedResolution' + claimedReturnedResolution: + $ref: 'claimedReturnedResolution.yaml#/ClaimedReturnedResolution' diff --git a/src/test/java/org/folio/dcb/it/BorrowerTransactionIT.java b/src/test/java/org/folio/dcb/it/BorrowerTransactionIT.java index d4c2afbd..d99fbb62 100644 --- a/src/test/java/org/folio/dcb/it/BorrowerTransactionIT.java +++ b/src/test/java/org/folio/dcb/it/BorrowerTransactionIT.java @@ -43,7 +43,7 @@ import java.time.OffsetDateTime; import java.time.ZoneOffset; import java.util.Map; -import org.folio.dcb.domain.dto.ClaimReturnedResolution; +import org.folio.dcb.domain.dto.ClaimedReturnedResolution; import org.folio.dcb.domain.dto.TransactionStatus; import org.folio.dcb.domain.dto.TransactionStatus.StatusEnum; import org.folio.dcb.domain.dto.TransactionStatusContext; @@ -229,7 +229,7 @@ void updateTransactionStatus_positive_fromItemCheckedOutToItemCheckedIn() throws void updateTransactionStatus_positive_fromItemCheckedOutToItemCheckedInWithFoundByLibrary() throws Exception { testJdbcHelper.saveDcbTransaction(DCB_TRANSACTION_ID, ITEM_CHECKED_OUT, borrowerDcbTransaction()); var context = TransactionStatusContext.builder() - .claimReturnedResolution(ClaimReturnedResolution.FOUND_BY_LIBRARY) + .claimedReturnedResolution(ClaimedReturnedResolution.FOUND_BY_LIBRARY) .build(); var transactionStatus = TransactionStatus.builder() .status(ITEM_CHECKED_IN) @@ -239,7 +239,7 @@ void updateTransactionStatus_positive_fromItemCheckedOutToItemCheckedInWithFound .andExpect(jsonPath("$.status").value("ITEM_CHECKED_IN")); wiremock.verifyThat(1, postRequestedFor(urlPathEqualTo("/circulation/check-in-by-barcode")) - .withRequestBody(matchingJsonPath("$.claimReturnedResolution", equalTo("Found by library")))); + .withRequestBody(matchingJsonPath("$.claimedReturnedResolution", equalTo("Found by library")))); } @Test @@ -248,7 +248,7 @@ void updateTransactionStatus_positive_fromItemCheckedOutToItemCheckedInWithRetur testJdbcHelper.saveDcbTransaction(DCB_TRANSACTION_ID, ITEM_CHECKED_OUT, borrowerDcbTransaction()); var context = TransactionStatusContext.builder() - .claimReturnedResolution(ClaimReturnedResolution.RETURNED_BY_PATRON) + .claimedReturnedResolution(ClaimedReturnedResolution.RETURNED_BY_PATRON) .build(); var transactionStatus = TransactionStatus.builder() .status(ITEM_CHECKED_IN) @@ -258,14 +258,14 @@ void updateTransactionStatus_positive_fromItemCheckedOutToItemCheckedInWithRetur .andExpect(jsonPath("$.status").value("ITEM_CHECKED_IN")); wiremock.verifyThat(1, postRequestedFor(urlPathEqualTo("/circulation/check-in-by-barcode")) - .withRequestBody(matchingJsonPath("$.claimReturnedResolution", equalTo("Returned by patron")))); + .withRequestBody(matchingJsonPath("$.claimedReturnedResolution", equalTo("Returned by patron")))); } @Test - void updateTransactionStatus_negative_invalidClaimReturnedResolution() throws Exception { + void updateTransactionStatus_negative_invalidClaimedReturnedResolution() throws Exception { testJdbcHelper.saveDcbTransaction(DCB_TRANSACTION_ID, ITEM_CHECKED_OUT, borrowerDcbTransaction()); mockMvc.perform(put("/transactions/{id}/status", DCB_TRANSACTION_ID) - .content("{\"status\":\"ITEM_CHECKED_IN\",\"context\":{\"claimReturnedResolution\":\"INVALID_VALUE\"}}") + .content("{\"status\":\"ITEM_CHECKED_IN\",\"context\":{\"claimedReturnedResolution\":\"INVALID_VALUE\"}}") .headers(defaultHeaders()) .contentType(MediaType.APPLICATION_JSON) .accept(MediaType.APPLICATION_JSON)) diff --git a/src/test/java/org/folio/dcb/service/BorrowingLibraryServiceTest.java b/src/test/java/org/folio/dcb/service/BorrowingLibraryServiceTest.java index 475cfc87..248eed46 100644 --- a/src/test/java/org/folio/dcb/service/BorrowingLibraryServiceTest.java +++ b/src/test/java/org/folio/dcb/service/BorrowingLibraryServiceTest.java @@ -20,7 +20,7 @@ import static org.mockito.Mockito.when; import java.util.UUID; -import org.folio.dcb.domain.dto.ClaimReturnedResolution; +import org.folio.dcb.domain.dto.ClaimedReturnedResolution; import org.folio.dcb.domain.dto.TransactionStatus; import org.folio.dcb.domain.dto.TransactionStatusContext; import org.folio.dcb.repository.TransactionRepository; @@ -126,7 +126,7 @@ void testTransactionStatusUpdateFromItemCheckedOutToItemCheckedInWithFoundByLibr transactionEntity.setStatus(ITEM_CHECKED_OUT); doNothing().when(circulationService).checkInByBarcode(any(), any(), any()); var context = TransactionStatusContext.builder() - .claimReturnedResolution(ClaimReturnedResolution.FOUND_BY_LIBRARY) + .claimedReturnedResolution(ClaimedReturnedResolution.FOUND_BY_LIBRARY) .build(); TransactionStatus transactionStatus = TransactionStatus.builder() .status(ITEM_CHECKED_IN) @@ -134,7 +134,7 @@ void testTransactionStatusUpdateFromItemCheckedOutToItemCheckedInWithFoundByLibr .build(); borrowingLibraryService.updateTransactionStatus(transactionEntity, transactionStatus); - verify(circulationService).checkInByBarcode(any(), any(), eq(ClaimReturnedResolution.FOUND_BY_LIBRARY)); + verify(circulationService).checkInByBarcode(any(), any(), eq(ClaimedReturnedResolution.FOUND_BY_LIBRARY)); assertEquals(ITEM_CHECKED_IN, transactionEntity.getStatus()); } @@ -144,7 +144,7 @@ void testTransactionStatusUpdateFromItemCheckedOutToItemCheckedInWithReturnedByP transactionEntity.setStatus(ITEM_CHECKED_OUT); doNothing().when(circulationService).checkInByBarcode(any(), any(), any()); var context = TransactionStatusContext.builder() - .claimReturnedResolution(ClaimReturnedResolution.RETURNED_BY_PATRON) + .claimedReturnedResolution(ClaimedReturnedResolution.RETURNED_BY_PATRON) .build(); TransactionStatus transactionStatus = TransactionStatus.builder() .status(ITEM_CHECKED_IN) @@ -152,7 +152,7 @@ void testTransactionStatusUpdateFromItemCheckedOutToItemCheckedInWithReturnedByP .build(); borrowingLibraryService.updateTransactionStatus(transactionEntity, transactionStatus); - verify(circulationService).checkInByBarcode(any(), any(), eq(ClaimReturnedResolution.RETURNED_BY_PATRON)); + verify(circulationService).checkInByBarcode(any(), any(), eq(ClaimedReturnedResolution.RETURNED_BY_PATRON)); assertEquals(ITEM_CHECKED_IN, transactionEntity.getStatus()); } } diff --git a/src/test/java/org/folio/dcb/service/CirculationServiceTest.java b/src/test/java/org/folio/dcb/service/CirculationServiceTest.java index ef5ca0d0..332785d6 100644 --- a/src/test/java/org/folio/dcb/service/CirculationServiceTest.java +++ b/src/test/java/org/folio/dcb/service/CirculationServiceTest.java @@ -12,7 +12,7 @@ import java.util.UUID; import org.folio.dcb.domain.dto.CirculationRequest; -import org.folio.dcb.domain.dto.ClaimReturnedResolution; +import org.folio.dcb.domain.dto.ClaimedReturnedResolution; import org.folio.dcb.domain.entity.TransactionEntity; import org.folio.dcb.exception.CirculationRequestException; import org.folio.dcb.integration.circulation.CirculationClient; @@ -46,17 +46,17 @@ void checkInByBarcodeWithServicePointTest() { } @Test - void checkInByBarcodeWithServicePointAndClaimReturnedResolutionTest() { + void checkInByBarcodeWithServicePointAndClaimedReturnedResolutionTest() { circulationService.checkInByBarcode(createTransactionEntity(), randomUUID().toString(), - ClaimReturnedResolution.FOUND_BY_LIBRARY); + ClaimedReturnedResolution.FOUND_BY_LIBRARY); verify(circulationClient).checkInByBarcode(argThat(req -> - ClaimReturnedResolution.FOUND_BY_LIBRARY.equals(req.getClaimReturnedResolution()))); + ClaimedReturnedResolution.FOUND_BY_LIBRARY.equals(req.getClaimedReturnedResolution()))); } @Test - void checkInByBarcodeWithServicePointAndNullClaimReturnedResolutionTest() { + void checkInByBarcodeWithServicePointAndNullClaimedReturnedResolutionTest() { circulationService.checkInByBarcode(createTransactionEntity(), randomUUID().toString(), null); - verify(circulationClient).checkInByBarcode(argThat(req -> req.getClaimReturnedResolution() == null)); + verify(circulationClient).checkInByBarcode(argThat(req -> req.getClaimedReturnedResolution() == null)); } @Test diff --git a/src/test/resources/stubs/mod-circulation/check-in-by-barcode/201-post(with claim returned - found by library).json b/src/test/resources/stubs/mod-circulation/check-in-by-barcode/201-post(with claim returned - found by library).json index 9f7c6e62..294f3b22 100644 --- a/src/test/resources/stubs/mod-circulation/check-in-by-barcode/201-post(with claim returned - found by library).json +++ b/src/test/resources/stubs/mod-circulation/check-in-by-barcode/201-post(with claim returned - found by library).json @@ -6,7 +6,7 @@ { "equalToJson": { "itemBarcode": "DCB_ITEM", - "claimReturnedResolution": "Found by library" + "claimedReturnedResolution": "Found by library" }, "ignoreExtraElements": true }, diff --git a/src/test/resources/stubs/mod-circulation/check-in-by-barcode/201-post(with claim returned - returned by patron).json b/src/test/resources/stubs/mod-circulation/check-in-by-barcode/201-post(with claim returned - returned by patron).json index ec1029d1..ef5f718e 100644 --- a/src/test/resources/stubs/mod-circulation/check-in-by-barcode/201-post(with claim returned - returned by patron).json +++ b/src/test/resources/stubs/mod-circulation/check-in-by-barcode/201-post(with claim returned - returned by patron).json @@ -6,7 +6,7 @@ { "equalToJson": { "itemBarcode": "DCB_ITEM", - "claimReturnedResolution": "Returned by patron" + "claimedReturnedResolution": "Returned by patron" }, "ignoreExtraElements": true }, From 9c49ec5e384b5db7d7cb57af795bc0389e5e404d Mon Sep 17 00:00:00 2001 From: oleksandr_vidinieiev Date: Mon, 15 Jun 2026 11:28:34 +0200 Subject: [PATCH 16/16] MODDCB-292 Remove debug logging --- .../dcb/controller/TransactionApiController.java | 1 - .../dcb/service/impl/BorrowingLibraryServiceImpl.java | 11 ++--------- .../dcb/service/impl/CirculationServiceImpl.java | 6 ++---- 3 files changed, 4 insertions(+), 14 deletions(-) diff --git a/src/main/java/org/folio/dcb/controller/TransactionApiController.java b/src/main/java/org/folio/dcb/controller/TransactionApiController.java index 8dc6319c..00da0072 100644 --- a/src/main/java/org/folio/dcb/controller/TransactionApiController.java +++ b/src/main/java/org/folio/dcb/controller/TransactionApiController.java @@ -56,7 +56,6 @@ public ResponseEntity createCirculationRequest(String @Override public ResponseEntity updateTransactionStatus(String id, TransactionStatus status) { log.info("updateTransactionStatus:: updating dcbTransaction with id {} to status {} ", id, status.getStatus()); - log.info("updateTransactionStatus:: status={}", status); try { var transactionStatusResponse = transactionsService.updateTransactionStatus(id, status); return ResponseEntity.status(HttpStatus.OK).body(transactionStatusResponse); diff --git a/src/main/java/org/folio/dcb/service/impl/BorrowingLibraryServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/BorrowingLibraryServiceImpl.java index b706aa43..d8d0d7e6 100644 --- a/src/main/java/org/folio/dcb/service/impl/BorrowingLibraryServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/BorrowingLibraryServiceImpl.java @@ -47,7 +47,6 @@ public TransactionStatusResponse createCirculation(String dcbTransactionId, DcbT public void updateTransactionStatus(TransactionEntity dcbTransaction, TransactionStatus transactionStatus) { log.debug("updateTransactionStatus:: Updating transaction {} from {} to {}.", dcbTransaction.getId(), dcbTransaction.getStatus(), transactionStatus.getStatus()); - log.info("updateTransactionStatus:: transactionStatus={}", transactionStatus); var currStatus = dcbTransaction.getStatus(); var newStatus = transactionStatus.getStatus(); String randomServicePointId = UUID.randomUUID().toString(); @@ -61,14 +60,8 @@ public void updateTransactionStatus(TransactionEntity dcbTransaction, Transactio Optional.ofNullable(transactionStatus.getContext()) .map(TransactionStatusContext::getClaimedReturnedResolution) .ifPresentOrElse( - resolution -> { - log.info("updateTransactionStatus:: resolution={}", resolution); - circulationService.checkInByBarcode(dcbTransaction, randomServicePointId, resolution); - }, - () -> { - log.info("updateTransactionStatus:: no resolution"); - circulationService.checkInByBarcode(dcbTransaction, randomServicePointId); - }); + resolution -> circulationService.checkInByBarcode(dcbTransaction, randomServicePointId, resolution), + () -> circulationService.checkInByBarcode(dcbTransaction, randomServicePointId)); updateTransactionEntity(dcbTransaction, newStatus); } else if (OPEN == currStatus && AWAITING_PICKUP == newStatus) { diff --git a/src/main/java/org/folio/dcb/service/impl/CirculationServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/CirculationServiceImpl.java index dcb38916..c6f663ee 100644 --- a/src/main/java/org/folio/dcb/service/impl/CirculationServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/CirculationServiceImpl.java @@ -41,10 +41,8 @@ public void checkInByBarcode(TransactionEntity dcbTransaction, String servicePoi log.info("checkInByBarcode:: checking in item for transaction {} with claimedReturnedResolution '{}'.", dcbTransaction.getId(), claimedReturnedResolution); - CheckInRequest checkInRequest = createCheckInRequest(dcbTransaction.getItemBarcode(), servicePointId, - claimedReturnedResolution); - log.info("checkInByBarcode:: request={}", checkInRequest); - circulationClient.checkInByBarcode(checkInRequest); + circulationClient.checkInByBarcode(createCheckInRequest(dcbTransaction.getItemBarcode(), servicePointId, + claimedReturnedResolution)); } @Override