From b727da78a7c78013d5bf4e4abb2d83b12e8379f9 Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Sun, 18 Feb 2024 05:12:50 +0200 Subject: [PATCH 01/40] MODDCB-90 Accept existing circulation request ID (cherry picked from commit 137f270280081cf0c44a4f4af6d6c6fd2dd149c2) --- .../EcsTlrTransactionApiController.java | 34 +++++++++++++++++ .../service/EcsTlrTransactionsService.java | 8 ++++ .../service/impl/BaseTransactionsService.java | 21 +++++++++++ .../impl/EcsTlrTransactionsServiceImpl.java | 37 +++++++++++++++++++ .../service/impl/TransactionsServiceImpl.java | 9 +---- .../swagger.api/dcb_transaction.yaml | 20 ++++++++++ .../swagger.api/schemas/dcbTransaction.yaml | 3 ++ 7 files changed, 125 insertions(+), 7 deletions(-) create mode 100644 src/main/java/org/folio/dcb/controller/EcsTlrTransactionApiController.java create mode 100644 src/main/java/org/folio/dcb/service/EcsTlrTransactionsService.java create mode 100644 src/main/java/org/folio/dcb/service/impl/BaseTransactionsService.java create mode 100644 src/main/java/org/folio/dcb/service/impl/EcsTlrTransactionsServiceImpl.java diff --git a/src/main/java/org/folio/dcb/controller/EcsTlrTransactionApiController.java b/src/main/java/org/folio/dcb/controller/EcsTlrTransactionApiController.java new file mode 100644 index 00000000..ae25cef7 --- /dev/null +++ b/src/main/java/org/folio/dcb/controller/EcsTlrTransactionApiController.java @@ -0,0 +1,34 @@ +package org.folio.dcb.controller; + +import lombok.AllArgsConstructor; +import lombok.extern.log4j.Log4j2; +import org.folio.dcb.domain.dto.DcbTransaction; +import org.folio.dcb.domain.dto.TransactionStatusResponse; +import org.folio.dcb.rest.resource.EcsTlrTransactionApi; +import org.folio.dcb.service.EcsTlrTransactionsService; +import org.folio.dcb.service.TransactionAuditService; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@Log4j2 +@AllArgsConstructor +public class EcsTlrTransactionApiController implements EcsTlrTransactionApi { + private final EcsTlrTransactionsService ecsTlrTransactionsService; + private final TransactionAuditService transactionAuditService; + + @Override + public ResponseEntity createEcsTlrTransaction(String dcbTransactionId, DcbTransaction dcbTransaction) { + log.info("createEcsTlrTransaction:: creating ECS TLR Transaction {} with id {} ", dcbTransaction, dcbTransactionId); + TransactionStatusResponse transactionStatusResponse; + try { + transactionStatusResponse = ecsTlrTransactionsService.createEcsTlrTransaction(dcbTransactionId, dcbTransaction); + } catch (Exception ex) { + transactionAuditService.logErrorIfTransactionAuditNotExists(dcbTransactionId, dcbTransaction, ex.getMessage()); + throw ex; + } + return ResponseEntity.status(HttpStatus.CREATED) + .body(transactionStatusResponse); + } +} diff --git a/src/main/java/org/folio/dcb/service/EcsTlrTransactionsService.java b/src/main/java/org/folio/dcb/service/EcsTlrTransactionsService.java new file mode 100644 index 00000000..6faabbea --- /dev/null +++ b/src/main/java/org/folio/dcb/service/EcsTlrTransactionsService.java @@ -0,0 +1,8 @@ +package org.folio.dcb.service; + +import org.folio.dcb.domain.dto.DcbTransaction; +import org.folio.dcb.domain.dto.TransactionStatusResponse; + +public interface EcsTlrTransactionsService { + TransactionStatusResponse createEcsTlrTransaction(String dcbTransactionId, DcbTransaction dcbTransaction); +} diff --git a/src/main/java/org/folio/dcb/service/impl/BaseTransactionsService.java b/src/main/java/org/folio/dcb/service/impl/BaseTransactionsService.java new file mode 100644 index 00000000..b5703188 --- /dev/null +++ b/src/main/java/org/folio/dcb/service/impl/BaseTransactionsService.java @@ -0,0 +1,21 @@ +package org.folio.dcb.service.impl; + +import lombok.AllArgsConstructor; +import lombok.extern.log4j.Log4j2; +import org.folio.dcb.exception.ResourceAlreadyExistException; +import org.folio.dcb.repository.TransactionRepository; +import org.springframework.stereotype.Service; + +@Service +@AllArgsConstructor +@Log4j2 +public class BaseTransactionsService { + private final TransactionRepository transactionRepository; + + public void checkTransactionExistsAndThrow(String dcbTransactionId) { + if(transactionRepository.existsById(dcbTransactionId)) { + throw new ResourceAlreadyExistException( + String.format("unable to create transaction with id %s as it already exists", dcbTransactionId)); + } + } +} diff --git a/src/main/java/org/folio/dcb/service/impl/EcsTlrTransactionsServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/EcsTlrTransactionsServiceImpl.java new file mode 100644 index 00000000..796a6c3b --- /dev/null +++ b/src/main/java/org/folio/dcb/service/impl/EcsTlrTransactionsServiceImpl.java @@ -0,0 +1,37 @@ +package org.folio.dcb.service.impl; + +import lombok.RequiredArgsConstructor; +import lombok.extern.log4j.Log4j2; +import org.folio.dcb.domain.dto.DcbTransaction; +import org.folio.dcb.domain.dto.TransactionStatusResponse; +import org.folio.dcb.service.EcsTlrTransactionsService; +import org.springframework.stereotype.Service; +import static org.folio.dcb.domain.dto.DcbTransaction.RoleEnum.BORROWER; +import static org.folio.dcb.domain.dto.DcbTransaction.RoleEnum.LENDER; + +@Service +@RequiredArgsConstructor +@Log4j2 +public class EcsTlrTransactionsServiceImpl implements EcsTlrTransactionsService { + + private final BaseTransactionsService baseTransactionsService; + private final BaseLibraryService baseLibraryService; + + @Override + public TransactionStatusResponse createEcsTlrTransaction(String dcbTransactionId, DcbTransaction dcbTransaction) { + log.debug("createCirculationRequest:: creating new transaction request for role {} ", dcbTransaction.getRole()); + baseTransactionsService.checkTransactionExistsAndThrow(dcbTransactionId); + if (dcbTransaction.getRole() == LENDER) { + baseLibraryService.saveDcbTransaction(dcbTransactionId, dcbTransaction, dcbTransaction.getRequestId()); + } else if (dcbTransaction.getRole() == BORROWER) { + baseLibraryService.saveDcbTransaction(dcbTransactionId, dcbTransaction, dcbTransaction.getRequestId()); + } else { + throw new IllegalArgumentException("Unimplemented role: " + dcbTransaction.getRole()); + } + return TransactionStatusResponse.builder() + .status(TransactionStatusResponse.StatusEnum.CREATED) + .item(dcbTransaction.getItem()) + .patron(dcbTransaction.getPatron()) + .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 d697931a..4440529f 100644 --- a/src/main/java/org/folio/dcb/service/impl/TransactionsServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/TransactionsServiceImpl.java @@ -39,11 +39,12 @@ public class TransactionsServiceImpl implements TransactionsService { private final StatusProcessorService statusProcessorService; private final TransactionMapper transactionMapper; private final TransactionAuditRepository transactionAuditRepository; + private final BaseTransactionsService baseTransactionsService; @Override public TransactionStatusResponse createCirculationRequest(String dcbTransactionId, DcbTransaction dcbTransaction) { log.debug("createCirculationRequest:: creating new transaction request for role {} ", dcbTransaction.getRole()); - checkTransactionExistsAndThrow(dcbTransactionId); + baseTransactionsService.checkTransactionExistsAndThrow(dcbTransactionId); return switch (dcbTransaction.getRole()) { case LENDER -> lendingLibraryService.createCirculation(dcbTransactionId, dcbTransaction); @@ -125,10 +126,4 @@ public TransactionEntity getTransactionEntityOrThrow(String dcbTransactionId) { .orElseThrow(() -> new NotFoundException(String.format("DCB Transaction was not found by id= %s ", dcbTransactionId))); } - private void checkTransactionExistsAndThrow(String dcbTransactionId) { - if(transactionRepository.existsById(dcbTransactionId)) { - throw new ResourceAlreadyExistException( - String.format("unable to create transaction with id %s as it already exists", dcbTransactionId)); - } - } } diff --git a/src/main/resources/swagger.api/dcb_transaction.yaml b/src/main/resources/swagger.api/dcb_transaction.yaml index 21c3d176..7aa14412 100644 --- a/src/main/resources/swagger.api/dcb_transaction.yaml +++ b/src/main/resources/swagger.api/dcb_transaction.yaml @@ -57,6 +57,26 @@ paths: $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' + /ecs-tlr-transaction/{dcbTransactionId}: + description: ECS TLR Transaction endpoint + post: + description: Create transaction for existing circulation TLR + operationId: createEcsTlrTransaction + tags: + - ecs-tlr-transaction + parameters: + - $ref: '#/components/parameters/dcbTransactionId' + requestBody: + $ref: "#/components/requestBodies/DCBTransaction" + responses: + '201': + $ref: '#/components/responses/TransactionStatusResponse' + '400': + $ref: '#/components/responses/BadRequest' + '409': + $ref: '#/components/responses/Conflict' + '500': + $ref: '#/components/responses/InternalServerError' /transactions/status: parameters: - $ref: '#/components/parameters/fromDate' diff --git a/src/main/resources/swagger.api/schemas/dcbTransaction.yaml b/src/main/resources/swagger.api/schemas/dcbTransaction.yaml index 02d16935..8c6be9c2 100644 --- a/src/main/resources/swagger.api/schemas/dcbTransaction.yaml +++ b/src/main/resources/swagger.api/schemas/dcbTransaction.yaml @@ -7,6 +7,9 @@ DcbTransaction: $ref: 'dcbPatron.yaml#/DcbPatron' pickup: $ref: 'dcbPickup.yaml#/DcbPickup' + requestId: + description: ID of the existing circulation TLR + type: string role: type: string enum: From 240830ad7bde6895242d420484f441cf4fb6ebc6 Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Tue, 20 Feb 2024 15:11:59 +0200 Subject: [PATCH 02/40] MODDCB-90 Accept existing circulation request ID (cherry picked from commit 70c5f5e6c28fbe0160079fa04a2bbbc4dff4c192) --- descriptors/ModuleDescriptor-template.json | 11 +++++++++++ .../controller/EcsTlrTransactionApiController.java | 13 +++++++------ .../dcb/service/impl/BaseTransactionsService.java | 1 + src/main/resources/swagger.api/dcb_transaction.yaml | 10 ++++++++-- 4 files changed, 27 insertions(+), 8 deletions(-) diff --git a/descriptors/ModuleDescriptor-template.json b/descriptors/ModuleDescriptor-template.json index a103410c..5de0b481 100644 --- a/descriptors/ModuleDescriptor-template.json +++ b/descriptors/ModuleDescriptor-template.json @@ -141,6 +141,17 @@ "dcb.transactions.collection.get" ], "modulePermissions": [] + }, + { + "methods": [ + "POST" + ], + "pathPattern": "/ecs-tlr-transaction/{ecsTlrTransactionId}", + "permissionsRequired": [ + "dcb.transactions.post" + ], + "modulePermissions": [ + ] } ] }, diff --git a/src/main/java/org/folio/dcb/controller/EcsTlrTransactionApiController.java b/src/main/java/org/folio/dcb/controller/EcsTlrTransactionApiController.java index ae25cef7..d77fd8e1 100644 --- a/src/main/java/org/folio/dcb/controller/EcsTlrTransactionApiController.java +++ b/src/main/java/org/folio/dcb/controller/EcsTlrTransactionApiController.java @@ -1,6 +1,6 @@ package org.folio.dcb.controller; -import lombok.AllArgsConstructor; +import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; import org.folio.dcb.domain.dto.DcbTransaction; import org.folio.dcb.domain.dto.TransactionStatusResponse; @@ -13,19 +13,20 @@ @RestController @Log4j2 -@AllArgsConstructor +@RequiredArgsConstructor public class EcsTlrTransactionApiController implements EcsTlrTransactionApi { + private final EcsTlrTransactionsService ecsTlrTransactionsService; private final TransactionAuditService transactionAuditService; @Override - public ResponseEntity createEcsTlrTransaction(String dcbTransactionId, DcbTransaction dcbTransaction) { - log.info("createEcsTlrTransaction:: creating ECS TLR Transaction {} with id {} ", dcbTransaction, dcbTransactionId); + public ResponseEntity createEcsTlrTransaction(String ecsTlrTransactionId, DcbTransaction dcbTransaction) { + log.info("createEcsTlrTransaction:: creating ECS TLR Transaction {} with id {} ", dcbTransaction, ecsTlrTransactionId); TransactionStatusResponse transactionStatusResponse; try { - transactionStatusResponse = ecsTlrTransactionsService.createEcsTlrTransaction(dcbTransactionId, dcbTransaction); + transactionStatusResponse = ecsTlrTransactionsService.createEcsTlrTransaction(ecsTlrTransactionId, dcbTransaction); } catch (Exception ex) { - transactionAuditService.logErrorIfTransactionAuditNotExists(dcbTransactionId, dcbTransaction, ex.getMessage()); + transactionAuditService.logErrorIfTransactionAuditNotExists(ecsTlrTransactionId, dcbTransaction, ex.getMessage()); throw ex; } return ResponseEntity.status(HttpStatus.CREATED) diff --git a/src/main/java/org/folio/dcb/service/impl/BaseTransactionsService.java b/src/main/java/org/folio/dcb/service/impl/BaseTransactionsService.java index b5703188..102627af 100644 --- a/src/main/java/org/folio/dcb/service/impl/BaseTransactionsService.java +++ b/src/main/java/org/folio/dcb/service/impl/BaseTransactionsService.java @@ -10,6 +10,7 @@ @AllArgsConstructor @Log4j2 public class BaseTransactionsService { + private final TransactionRepository transactionRepository; public void checkTransactionExistsAndThrow(String dcbTransactionId) { diff --git a/src/main/resources/swagger.api/dcb_transaction.yaml b/src/main/resources/swagger.api/dcb_transaction.yaml index 7aa14412..912ab2ff 100644 --- a/src/main/resources/swagger.api/dcb_transaction.yaml +++ b/src/main/resources/swagger.api/dcb_transaction.yaml @@ -57,7 +57,7 @@ paths: $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' - /ecs-tlr-transaction/{dcbTransactionId}: + /ecs-tlr-transaction/{ecsTlrTransactionId}: description: ECS TLR Transaction endpoint post: description: Create transaction for existing circulation TLR @@ -65,7 +65,7 @@ paths: tags: - ecs-tlr-transaction parameters: - - $ref: '#/components/parameters/dcbTransactionId' + - $ref: '#/components/parameters/ecsTlrTransactionId' requestBody: $ref: "#/components/requestBodies/DCBTransaction" responses: @@ -171,6 +171,12 @@ components: schema: type: string required: true + ecsTlrTransactionId: + in: path + name: ecsTlrTransactionId + schema: + type: string + required: true fromDate: in: query name: fromDate From 6f456c2c70a13c0838400dac3f41dd4d2cb93aed Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Fri, 23 Feb 2024 13:12:19 +0200 Subject: [PATCH 03/40] MODDCB-90 Accept existing circulation request ID (cherry picked from commit 62094faf8ea3f869368d361bd51e5304e9facbf6) --- .../EcsTlrTransactionApiController.java | 6 ++--- .../service/impl/BaseTransactionsService.java | 22 ------------------- .../impl/EcsTlrTransactionsServiceImpl.java | 13 +++++++++-- .../service/impl/TransactionsServiceImpl.java | 10 ++++++++- .../swagger.api/dcb_transaction.yaml | 4 ++-- 5 files changed, 25 insertions(+), 30 deletions(-) delete mode 100644 src/main/java/org/folio/dcb/service/impl/BaseTransactionsService.java diff --git a/src/main/java/org/folio/dcb/controller/EcsTlrTransactionApiController.java b/src/main/java/org/folio/dcb/controller/EcsTlrTransactionApiController.java index d77fd8e1..ad9eecf4 100644 --- a/src/main/java/org/folio/dcb/controller/EcsTlrTransactionApiController.java +++ b/src/main/java/org/folio/dcb/controller/EcsTlrTransactionApiController.java @@ -4,7 +4,7 @@ import lombok.extern.log4j.Log4j2; import org.folio.dcb.domain.dto.DcbTransaction; import org.folio.dcb.domain.dto.TransactionStatusResponse; -import org.folio.dcb.rest.resource.EcsTlrTransactionApi; +import org.folio.dcb.rest.resource.EcsRequestTransactionsApi; import org.folio.dcb.service.EcsTlrTransactionsService; import org.folio.dcb.service.TransactionAuditService; import org.springframework.http.HttpStatus; @@ -14,13 +14,13 @@ @RestController @Log4j2 @RequiredArgsConstructor -public class EcsTlrTransactionApiController implements EcsTlrTransactionApi { +public class EcsTlrTransactionApiController implements EcsRequestTransactionsApi { private final EcsTlrTransactionsService ecsTlrTransactionsService; private final TransactionAuditService transactionAuditService; @Override - public ResponseEntity createEcsTlrTransaction(String ecsTlrTransactionId, DcbTransaction dcbTransaction) { + public ResponseEntity createEcsRequestTransactions(String ecsTlrTransactionId, DcbTransaction dcbTransaction) { log.info("createEcsTlrTransaction:: creating ECS TLR Transaction {} with id {} ", dcbTransaction, ecsTlrTransactionId); TransactionStatusResponse transactionStatusResponse; try { diff --git a/src/main/java/org/folio/dcb/service/impl/BaseTransactionsService.java b/src/main/java/org/folio/dcb/service/impl/BaseTransactionsService.java deleted file mode 100644 index 102627af..00000000 --- a/src/main/java/org/folio/dcb/service/impl/BaseTransactionsService.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.folio.dcb.service.impl; - -import lombok.AllArgsConstructor; -import lombok.extern.log4j.Log4j2; -import org.folio.dcb.exception.ResourceAlreadyExistException; -import org.folio.dcb.repository.TransactionRepository; -import org.springframework.stereotype.Service; - -@Service -@AllArgsConstructor -@Log4j2 -public class BaseTransactionsService { - - private final TransactionRepository transactionRepository; - - public void checkTransactionExistsAndThrow(String dcbTransactionId) { - if(transactionRepository.existsById(dcbTransactionId)) { - throw new ResourceAlreadyExistException( - String.format("unable to create transaction with id %s as it already exists", dcbTransactionId)); - } - } -} diff --git a/src/main/java/org/folio/dcb/service/impl/EcsTlrTransactionsServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/EcsTlrTransactionsServiceImpl.java index 796a6c3b..a91855d4 100644 --- a/src/main/java/org/folio/dcb/service/impl/EcsTlrTransactionsServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/EcsTlrTransactionsServiceImpl.java @@ -4,6 +4,8 @@ import lombok.extern.log4j.Log4j2; import org.folio.dcb.domain.dto.DcbTransaction; import org.folio.dcb.domain.dto.TransactionStatusResponse; +import org.folio.dcb.exception.ResourceAlreadyExistException; +import org.folio.dcb.repository.TransactionRepository; import org.folio.dcb.service.EcsTlrTransactionsService; import org.springframework.stereotype.Service; import static org.folio.dcb.domain.dto.DcbTransaction.RoleEnum.BORROWER; @@ -14,13 +16,13 @@ @Log4j2 public class EcsTlrTransactionsServiceImpl implements EcsTlrTransactionsService { - private final BaseTransactionsService baseTransactionsService; private final BaseLibraryService baseLibraryService; + private final TransactionRepository transactionRepository; @Override public TransactionStatusResponse createEcsTlrTransaction(String dcbTransactionId, DcbTransaction dcbTransaction) { log.debug("createCirculationRequest:: creating new transaction request for role {} ", dcbTransaction.getRole()); - baseTransactionsService.checkTransactionExistsAndThrow(dcbTransactionId); + checkEcsTransactionExistsAndThrow(dcbTransactionId); if (dcbTransaction.getRole() == LENDER) { baseLibraryService.saveDcbTransaction(dcbTransactionId, dcbTransaction, dcbTransaction.getRequestId()); } else if (dcbTransaction.getRole() == BORROWER) { @@ -34,4 +36,11 @@ public TransactionStatusResponse createEcsTlrTransaction(String dcbTransactionId .patron(dcbTransaction.getPatron()) .build(); } + + private void checkEcsTransactionExistsAndThrow(String dcbTransactionId) { + if(transactionRepository.existsById(dcbTransactionId)) { + throw new ResourceAlreadyExistException( + String.format("unable to create ecs transaction with id %s as it already exists", dcbTransactionId)); + } + } } 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 4440529f..d4a748bd 100644 --- a/src/main/java/org/folio/dcb/service/impl/TransactionsServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/TransactionsServiceImpl.java @@ -9,6 +9,7 @@ import org.folio.dcb.domain.entity.TransactionEntity; import org.folio.dcb.domain.mapper.TransactionMapper; import org.folio.dcb.exception.ResourceAlreadyExistException; +import org.folio.dcb.exception.ResourceAlreadyExistException; import org.folio.dcb.exception.StatusException; import org.folio.dcb.repository.TransactionAuditRepository; import org.folio.dcb.repository.TransactionRepository; @@ -44,7 +45,7 @@ public class TransactionsServiceImpl implements TransactionsService { @Override public TransactionStatusResponse createCirculationRequest(String dcbTransactionId, DcbTransaction dcbTransaction) { log.debug("createCirculationRequest:: creating new transaction request for role {} ", dcbTransaction.getRole()); - baseTransactionsService.checkTransactionExistsAndThrow(dcbTransactionId); + checkTransactionExistsAndThrow(dcbTransactionId); return switch (dcbTransaction.getRole()) { case LENDER -> lendingLibraryService.createCirculation(dcbTransactionId, dcbTransaction); @@ -126,4 +127,11 @@ public TransactionEntity getTransactionEntityOrThrow(String dcbTransactionId) { .orElseThrow(() -> new NotFoundException(String.format("DCB Transaction was not found by id= %s ", dcbTransactionId))); } + private void checkTransactionExistsAndThrow(String dcbTransactionId) { + if(transactionRepository.existsById(dcbTransactionId)) { + throw new ResourceAlreadyExistException( + String.format("unable to create transaction with id %s as it already exists", dcbTransactionId)); + } + } + } diff --git a/src/main/resources/swagger.api/dcb_transaction.yaml b/src/main/resources/swagger.api/dcb_transaction.yaml index 912ab2ff..26692c1d 100644 --- a/src/main/resources/swagger.api/dcb_transaction.yaml +++ b/src/main/resources/swagger.api/dcb_transaction.yaml @@ -57,11 +57,11 @@ paths: $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' - /ecs-tlr-transaction/{ecsTlrTransactionId}: + /ecs-request-transactions/{ecsTlrTransactionId}: description: ECS TLR Transaction endpoint post: description: Create transaction for existing circulation TLR - operationId: createEcsTlrTransaction + operationId: createEcsRequestTransactions tags: - ecs-tlr-transaction parameters: From 94868701ec5d0e79964174c76e69007c70526a02 Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Mon, 4 Mar 2024 17:59:51 +0600 Subject: [PATCH 04/40] MODDCB-90 Accept existing circulation request ID (cherry picked from commit c4c8a669d85960e49157d6a14e9d7f50d588f72a) --- descriptors/ModuleDescriptor-template.json | 4 +- .../EcsTlrTransactionApiController.java | 15 +++--- .../service/CirculationRequestService.java | 1 + .../impl/CirculationRequestServiceImpl.java | 2 +- .../impl/EcsTlrTransactionsServiceImpl.java | 48 ++++++++++++++----- 5 files changed, 48 insertions(+), 22 deletions(-) diff --git a/descriptors/ModuleDescriptor-template.json b/descriptors/ModuleDescriptor-template.json index 5de0b481..71febff0 100644 --- a/descriptors/ModuleDescriptor-template.json +++ b/descriptors/ModuleDescriptor-template.json @@ -146,9 +146,9 @@ "methods": [ "POST" ], - "pathPattern": "/ecs-tlr-transaction/{ecsTlrTransactionId}", + "pathPattern": "/ecs-tlr-transactions/{ecsTlrTransactionId}", "permissionsRequired": [ - "dcb.transactions.post" + "ecs-tlr.transactions.post" ], "modulePermissions": [ ] diff --git a/src/main/java/org/folio/dcb/controller/EcsTlrTransactionApiController.java b/src/main/java/org/folio/dcb/controller/EcsTlrTransactionApiController.java index ad9eecf4..edad69f2 100644 --- a/src/main/java/org/folio/dcb/controller/EcsTlrTransactionApiController.java +++ b/src/main/java/org/folio/dcb/controller/EcsTlrTransactionApiController.java @@ -20,16 +20,19 @@ public class EcsTlrTransactionApiController implements EcsRequestTransactionsApi private final TransactionAuditService transactionAuditService; @Override - public ResponseEntity createEcsRequestTransactions(String ecsTlrTransactionId, DcbTransaction dcbTransaction) { - log.info("createEcsTlrTransaction:: creating ECS TLR Transaction {} with id {} ", dcbTransaction, ecsTlrTransactionId); + public ResponseEntity createEcsRequestTransactions( + String ecsTlrTransactionId, DcbTransaction dcbTransaction) { + log.info("createEcsTlrTransaction:: creating ECS TLR Transaction {} with id {} ", + dcbTransaction, ecsTlrTransactionId); TransactionStatusResponse transactionStatusResponse; try { - transactionStatusResponse = ecsTlrTransactionsService.createEcsTlrTransaction(ecsTlrTransactionId, dcbTransaction); + transactionStatusResponse = ecsTlrTransactionsService.createEcsTlrTransaction( + ecsTlrTransactionId, dcbTransaction); } catch (Exception ex) { - transactionAuditService.logErrorIfTransactionAuditNotExists(ecsTlrTransactionId, dcbTransaction, ex.getMessage()); + transactionAuditService.logErrorIfTransactionAuditNotExists(ecsTlrTransactionId, + dcbTransaction, ex.getMessage()); throw ex; } - return ResponseEntity.status(HttpStatus.CREATED) - .body(transactionStatusResponse); + return ResponseEntity.status(HttpStatus.CREATED).body(transactionStatusResponse); } } diff --git a/src/main/java/org/folio/dcb/service/CirculationRequestService.java b/src/main/java/org/folio/dcb/service/CirculationRequestService.java index d4624e78..6cfde41f 100644 --- a/src/main/java/org/folio/dcb/service/CirculationRequestService.java +++ b/src/main/java/org/folio/dcb/service/CirculationRequestService.java @@ -4,4 +4,5 @@ public interface CirculationRequestService { CirculationRequest getCancellationRequestIfOpenOrNull(String requestId); + CirculationRequest fetchRequestById(String requestId); } diff --git a/src/main/java/org/folio/dcb/service/impl/CirculationRequestServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/CirculationRequestServiceImpl.java index 64700355..51410422 100644 --- a/src/main/java/org/folio/dcb/service/impl/CirculationRequestServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/CirculationRequestServiceImpl.java @@ -22,7 +22,7 @@ public class CirculationRequestServiceImpl implements CirculationRequestService private final CirculationRequestClient circulationRequestClient; private final FolioExecutionContext folioExecutionContext; - private CirculationRequest fetchRequestById(String requestId) { + public CirculationRequest fetchRequestById(String requestId) { log.info("fetchRequestById:: fetching request for id {} ", requestId); try { return circulationRequestClient.fetchRequestById(requestId); diff --git a/src/main/java/org/folio/dcb/service/impl/EcsTlrTransactionsServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/EcsTlrTransactionsServiceImpl.java index a91855d4..30937c48 100644 --- a/src/main/java/org/folio/dcb/service/impl/EcsTlrTransactionsServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/EcsTlrTransactionsServiceImpl.java @@ -2,13 +2,18 @@ import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; +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.TransactionStatusResponse; import org.folio.dcb.exception.ResourceAlreadyExistException; import org.folio.dcb.repository.TransactionRepository; +import org.folio.dcb.service.CirculationRequestService; import org.folio.dcb.service.EcsTlrTransactionsService; +import org.folio.dcb.utils.RequestStatus; import org.springframework.stereotype.Service; -import static org.folio.dcb.domain.dto.DcbTransaction.RoleEnum.BORROWER; import static org.folio.dcb.domain.dto.DcbTransaction.RoleEnum.LENDER; @Service @@ -18,29 +23,46 @@ public class EcsTlrTransactionsServiceImpl implements EcsTlrTransactionsService private final BaseLibraryService baseLibraryService; private final TransactionRepository transactionRepository; + private final CirculationRequestService circulationRequestService; @Override public TransactionStatusResponse createEcsTlrTransaction(String dcbTransactionId, DcbTransaction dcbTransaction) { - log.debug("createCirculationRequest:: creating new transaction request for role {} ", dcbTransaction.getRole()); + log.info("createCirculationRequest:: creating new transaction request for role {} ", + dcbTransaction.getRole()); checkEcsTransactionExistsAndThrow(dcbTransactionId); - if (dcbTransaction.getRole() == LENDER) { - baseLibraryService.saveDcbTransaction(dcbTransactionId, dcbTransaction, dcbTransaction.getRequestId()); - } else if (dcbTransaction.getRole() == BORROWER) { - baseLibraryService.saveDcbTransaction(dcbTransactionId, dcbTransaction, dcbTransaction.getRequestId()); + CirculationRequest circulationRequest = circulationRequestService.fetchRequestById(dcbTransaction.getRequestId()); + if(circulationRequest != null && RequestStatus.isRequestOpen(RequestStatus.from(circulationRequest.getStatus()))) { + if (dcbTransaction.getRole() == LENDER) { + dcbTransaction.setItem(DcbItem.builder() + .id(String.valueOf(circulationRequest.getItemId())) + .barcode(circulationRequest.getItem().getBarcode()) + .build()); + 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(dcbTransactionId, dcbTransaction, dcbTransaction.getRequestId()); + } else { + throw new IllegalArgumentException("Unimplemented role: " + dcbTransaction.getRole()); + } + return TransactionStatusResponse.builder() + .status(TransactionStatusResponse.StatusEnum.CREATED) + .item(dcbTransaction.getItem()) + .patron(dcbTransaction.getPatron()) + .build(); } else { - throw new IllegalArgumentException("Unimplemented role: " + dcbTransaction.getRole()); + throw new IllegalArgumentException("Unable to create ecs transaction as could not find open request"); } - return TransactionStatusResponse.builder() - .status(TransactionStatusResponse.StatusEnum.CREATED) - .item(dcbTransaction.getItem()) - .patron(dcbTransaction.getPatron()) - .build(); } private void checkEcsTransactionExistsAndThrow(String dcbTransactionId) { if(transactionRepository.existsById(dcbTransactionId)) { throw new ResourceAlreadyExistException( - String.format("unable to create ecs transaction with id %s as it already exists", dcbTransactionId)); + String.format("unable to create ECS transaction with ID %s as it already exists", + dcbTransactionId)); } } } From 3f9d4c44b4a776f4a51c8fd1b0f6b2d0a21c705e Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Mon, 4 Mar 2024 18:07:42 +0600 Subject: [PATCH 05/40] MODDCB-90 Accept existing circulation request ID (cherry picked from commit 121427f52e403b6b937e4cc6e1d21e0b51f7dba2) --- .../folio/dcb/service/impl/EcsTlrTransactionsServiceImpl.java | 2 +- .../org/folio/dcb/service/impl/TransactionsServiceImpl.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/folio/dcb/service/impl/EcsTlrTransactionsServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/EcsTlrTransactionsServiceImpl.java index 30937c48..c92d4869 100644 --- a/src/main/java/org/folio/dcb/service/impl/EcsTlrTransactionsServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/EcsTlrTransactionsServiceImpl.java @@ -59,7 +59,7 @@ public TransactionStatusResponse createEcsTlrTransaction(String dcbTransactionId } private void checkEcsTransactionExistsAndThrow(String dcbTransactionId) { - if(transactionRepository.existsById(dcbTransactionId)) { + if (transactionRepository.existsById(dcbTransactionId)) { throw new ResourceAlreadyExistException( String.format("unable to create ECS transaction with ID %s as it already exists", dcbTransactionId)); 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 d4a748bd..abd1ab3f 100644 --- a/src/main/java/org/folio/dcb/service/impl/TransactionsServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/TransactionsServiceImpl.java @@ -128,7 +128,7 @@ public TransactionEntity getTransactionEntityOrThrow(String dcbTransactionId) { } private void checkTransactionExistsAndThrow(String dcbTransactionId) { - if(transactionRepository.existsById(dcbTransactionId)) { + if (transactionRepository.existsById(dcbTransactionId)) { throw new ResourceAlreadyExistException( String.format("unable to create transaction with id %s as it already exists", dcbTransactionId)); } From 2f2a8ca7640d3751e81b9cbd2081e74d5d300bb0 Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Mon, 4 Mar 2024 18:36:49 +0600 Subject: [PATCH 06/40] MODDCB-90 Accept existing circulation request ID (cherry picked from commit 287d7504a93417d646c6c8e499b1fe0ef3941986) --- .../controller/EcsTlrTransactionApiController.java | 10 +++++----- .../dcb/service/EcsTlrTransactionsService.java | 2 +- .../impl/EcsTlrTransactionsServiceImpl.java | 14 +++++++++----- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/main/java/org/folio/dcb/controller/EcsTlrTransactionApiController.java b/src/main/java/org/folio/dcb/controller/EcsTlrTransactionApiController.java index edad69f2..f6b42a40 100644 --- a/src/main/java/org/folio/dcb/controller/EcsTlrTransactionApiController.java +++ b/src/main/java/org/folio/dcb/controller/EcsTlrTransactionApiController.java @@ -21,15 +21,15 @@ public class EcsTlrTransactionApiController implements EcsRequestTransactionsApi @Override public ResponseEntity createEcsRequestTransactions( - String ecsTlrTransactionId, DcbTransaction dcbTransaction) { + String ecsTlrTransactionsId, DcbTransaction dcbTransaction) { log.info("createEcsTlrTransaction:: creating ECS TLR Transaction {} with id {} ", - dcbTransaction, ecsTlrTransactionId); + dcbTransaction, ecsTlrTransactionsId); TransactionStatusResponse transactionStatusResponse; try { - transactionStatusResponse = ecsTlrTransactionsService.createEcsTlrTransaction( - ecsTlrTransactionId, dcbTransaction); + transactionStatusResponse = ecsTlrTransactionsService.createEcsTlrTransactions( + ecsTlrTransactionsId, dcbTransaction); } catch (Exception ex) { - transactionAuditService.logErrorIfTransactionAuditNotExists(ecsTlrTransactionId, + transactionAuditService.logErrorIfTransactionAuditNotExists(ecsTlrTransactionsId, dcbTransaction, ex.getMessage()); throw ex; } diff --git a/src/main/java/org/folio/dcb/service/EcsTlrTransactionsService.java b/src/main/java/org/folio/dcb/service/EcsTlrTransactionsService.java index 6faabbea..3ec8059a 100644 --- a/src/main/java/org/folio/dcb/service/EcsTlrTransactionsService.java +++ b/src/main/java/org/folio/dcb/service/EcsTlrTransactionsService.java @@ -4,5 +4,5 @@ import org.folio.dcb.domain.dto.TransactionStatusResponse; public interface EcsTlrTransactionsService { - TransactionStatusResponse createEcsTlrTransaction(String dcbTransactionId, DcbTransaction dcbTransaction); + TransactionStatusResponse createEcsTlrTransactions(String ecsTlrTransactionsId, DcbTransaction dcbTransaction); } diff --git a/src/main/java/org/folio/dcb/service/impl/EcsTlrTransactionsServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/EcsTlrTransactionsServiceImpl.java index c92d4869..930b2593 100644 --- a/src/main/java/org/folio/dcb/service/impl/EcsTlrTransactionsServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/EcsTlrTransactionsServiceImpl.java @@ -26,12 +26,15 @@ public class EcsTlrTransactionsServiceImpl implements EcsTlrTransactionsService private final CirculationRequestService circulationRequestService; @Override - public TransactionStatusResponse createEcsTlrTransaction(String dcbTransactionId, DcbTransaction dcbTransaction) { + public TransactionStatusResponse createEcsTlrTransactions(String ecsTlrTransactionsId, + DcbTransaction dcbTransaction) { log.info("createCirculationRequest:: creating new transaction request for role {} ", dcbTransaction.getRole()); - checkEcsTransactionExistsAndThrow(dcbTransactionId); - CirculationRequest circulationRequest = circulationRequestService.fetchRequestById(dcbTransaction.getRequestId()); - if(circulationRequest != null && RequestStatus.isRequestOpen(RequestStatus.from(circulationRequest.getStatus()))) { + checkEcsTransactionExistsAndThrow(ecsTlrTransactionsId); + CirculationRequest circulationRequest = circulationRequestService.fetchRequestById( + dcbTransaction.getRequestId()); + if(circulationRequest != null && RequestStatus.isRequestOpen( + RequestStatus.from(circulationRequest.getStatus()))) { if (dcbTransaction.getRole() == LENDER) { dcbTransaction.setItem(DcbItem.builder() .id(String.valueOf(circulationRequest.getItemId())) @@ -44,7 +47,8 @@ public TransactionStatusResponse createEcsTlrTransaction(String dcbTransactionId dcbTransaction.setPickup(DcbPickup.builder() .servicePointId(String.valueOf(circulationRequest.getPickupServicePointId())) .build()); - baseLibraryService.saveDcbTransaction(dcbTransactionId, dcbTransaction, dcbTransaction.getRequestId()); + baseLibraryService.saveDcbTransaction(ecsTlrTransactionsId, dcbTransaction, + dcbTransaction.getRequestId()); } else { throw new IllegalArgumentException("Unimplemented role: " + dcbTransaction.getRole()); } From 67d5ddddcfbd1617c632bd76b9ce7a95009604d7 Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Mon, 4 Mar 2024 19:43:09 +0600 Subject: [PATCH 07/40] MODDCB-90 Accept existing circulation request ID (cherry picked from commit 25ceb19ce5de40f3c15f0b5828aa959b0faaa206) --- ...> EcsRequestTransactionsApiController.java} | 18 +++++++++--------- .../service/EcsRequestTransactionsService.java | 9 +++++++++ .../dcb/service/EcsTlrTransactionsService.java | 8 -------- ... => EcsRequestTransactionsServiceImpl.java} | 16 ++++++++-------- .../resources/swagger.api/dcb_transaction.yaml | 8 ++++---- 5 files changed, 30 insertions(+), 29 deletions(-) rename src/main/java/org/folio/dcb/controller/{EcsTlrTransactionApiController.java => EcsRequestTransactionsApiController.java} (62%) create mode 100644 src/main/java/org/folio/dcb/service/EcsRequestTransactionsService.java delete mode 100644 src/main/java/org/folio/dcb/service/EcsTlrTransactionsService.java rename src/main/java/org/folio/dcb/service/impl/{EcsTlrTransactionsServiceImpl.java => EcsRequestTransactionsServiceImpl.java} (79%) diff --git a/src/main/java/org/folio/dcb/controller/EcsTlrTransactionApiController.java b/src/main/java/org/folio/dcb/controller/EcsRequestTransactionsApiController.java similarity index 62% rename from src/main/java/org/folio/dcb/controller/EcsTlrTransactionApiController.java rename to src/main/java/org/folio/dcb/controller/EcsRequestTransactionsApiController.java index f6b42a40..7b54beff 100644 --- a/src/main/java/org/folio/dcb/controller/EcsTlrTransactionApiController.java +++ b/src/main/java/org/folio/dcb/controller/EcsRequestTransactionsApiController.java @@ -5,7 +5,7 @@ import org.folio.dcb.domain.dto.DcbTransaction; import org.folio.dcb.domain.dto.TransactionStatusResponse; import org.folio.dcb.rest.resource.EcsRequestTransactionsApi; -import org.folio.dcb.service.EcsTlrTransactionsService; +import org.folio.dcb.service.EcsRequestTransactionsService; import org.folio.dcb.service.TransactionAuditService; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -14,22 +14,22 @@ @RestController @Log4j2 @RequiredArgsConstructor -public class EcsTlrTransactionApiController implements EcsRequestTransactionsApi { +public class EcsRequestTransactionsApiController implements EcsRequestTransactionsApi { - private final EcsTlrTransactionsService ecsTlrTransactionsService; + private final EcsRequestTransactionsService ecsRequestTransactionsService; private final TransactionAuditService transactionAuditService; @Override public ResponseEntity createEcsRequestTransactions( - String ecsTlrTransactionsId, DcbTransaction dcbTransaction) { - log.info("createEcsTlrTransaction:: creating ECS TLR Transaction {} with id {} ", - dcbTransaction, ecsTlrTransactionsId); + String ecsRequestTransactionId, DcbTransaction dcbTransaction) { + log.info("createEcsRequestTransactions:: creating ECS Request Transaction {} with ID {}", + dcbTransaction, ecsRequestTransactionId); TransactionStatusResponse transactionStatusResponse; try { - transactionStatusResponse = ecsTlrTransactionsService.createEcsTlrTransactions( - ecsTlrTransactionsId, dcbTransaction); + transactionStatusResponse = ecsRequestTransactionsService.createEcsRequestTransactions( + ecsRequestTransactionId, dcbTransaction); } catch (Exception ex) { - transactionAuditService.logErrorIfTransactionAuditNotExists(ecsTlrTransactionsId, + transactionAuditService.logErrorIfTransactionAuditNotExists(ecsRequestTransactionId, dcbTransaction, ex.getMessage()); throw ex; } diff --git a/src/main/java/org/folio/dcb/service/EcsRequestTransactionsService.java b/src/main/java/org/folio/dcb/service/EcsRequestTransactionsService.java new file mode 100644 index 00000000..aeaa3b82 --- /dev/null +++ b/src/main/java/org/folio/dcb/service/EcsRequestTransactionsService.java @@ -0,0 +1,9 @@ +package org.folio.dcb.service; + +import org.folio.dcb.domain.dto.DcbTransaction; +import org.folio.dcb.domain.dto.TransactionStatusResponse; + +public interface EcsRequestTransactionsService { + TransactionStatusResponse createEcsRequestTransactions(String ecsRequestTransactionsId, + DcbTransaction dcbTransaction); +} diff --git a/src/main/java/org/folio/dcb/service/EcsTlrTransactionsService.java b/src/main/java/org/folio/dcb/service/EcsTlrTransactionsService.java deleted file mode 100644 index 3ec8059a..00000000 --- a/src/main/java/org/folio/dcb/service/EcsTlrTransactionsService.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.folio.dcb.service; - -import org.folio.dcb.domain.dto.DcbTransaction; -import org.folio.dcb.domain.dto.TransactionStatusResponse; - -public interface EcsTlrTransactionsService { - TransactionStatusResponse createEcsTlrTransactions(String ecsTlrTransactionsId, DcbTransaction dcbTransaction); -} diff --git a/src/main/java/org/folio/dcb/service/impl/EcsTlrTransactionsServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/EcsRequestTransactionsServiceImpl.java similarity index 79% rename from src/main/java/org/folio/dcb/service/impl/EcsTlrTransactionsServiceImpl.java rename to src/main/java/org/folio/dcb/service/impl/EcsRequestTransactionsServiceImpl.java index 930b2593..a0e9a76c 100644 --- a/src/main/java/org/folio/dcb/service/impl/EcsTlrTransactionsServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/EcsRequestTransactionsServiceImpl.java @@ -11,7 +11,7 @@ import org.folio.dcb.exception.ResourceAlreadyExistException; import org.folio.dcb.repository.TransactionRepository; import org.folio.dcb.service.CirculationRequestService; -import org.folio.dcb.service.EcsTlrTransactionsService; +import org.folio.dcb.service.EcsRequestTransactionsService; import org.folio.dcb.utils.RequestStatus; import org.springframework.stereotype.Service; import static org.folio.dcb.domain.dto.DcbTransaction.RoleEnum.LENDER; @@ -19,18 +19,18 @@ @Service @RequiredArgsConstructor @Log4j2 -public class EcsTlrTransactionsServiceImpl implements EcsTlrTransactionsService { +public class EcsRequestTransactionsServiceImpl implements EcsRequestTransactionsService { private final BaseLibraryService baseLibraryService; private final TransactionRepository transactionRepository; private final CirculationRequestService circulationRequestService; @Override - public TransactionStatusResponse createEcsTlrTransactions(String ecsTlrTransactionsId, - DcbTransaction dcbTransaction) { - log.info("createCirculationRequest:: creating new transaction request for role {} ", + public TransactionStatusResponse createEcsRequestTransactions(String ecsRequestTransactionsId, + DcbTransaction dcbTransaction) { + log.info("createEcsRequestTransactions:: creating new transaction request for role {} ", dcbTransaction.getRole()); - checkEcsTransactionExistsAndThrow(ecsTlrTransactionsId); + checkEcsRequestTransactionExistsAndThrow(ecsRequestTransactionsId); CirculationRequest circulationRequest = circulationRequestService.fetchRequestById( dcbTransaction.getRequestId()); if(circulationRequest != null && RequestStatus.isRequestOpen( @@ -47,7 +47,7 @@ public TransactionStatusResponse createEcsTlrTransactions(String ecsTlrTransacti dcbTransaction.setPickup(DcbPickup.builder() .servicePointId(String.valueOf(circulationRequest.getPickupServicePointId())) .build()); - baseLibraryService.saveDcbTransaction(ecsTlrTransactionsId, dcbTransaction, + baseLibraryService.saveDcbTransaction(ecsRequestTransactionsId, dcbTransaction, dcbTransaction.getRequestId()); } else { throw new IllegalArgumentException("Unimplemented role: " + dcbTransaction.getRole()); @@ -62,7 +62,7 @@ public TransactionStatusResponse createEcsTlrTransactions(String ecsTlrTransacti } } - private void checkEcsTransactionExistsAndThrow(String dcbTransactionId) { + private void checkEcsRequestTransactionExistsAndThrow(String dcbTransactionId) { if (transactionRepository.existsById(dcbTransactionId)) { throw new ResourceAlreadyExistException( String.format("unable to create ECS transaction with ID %s as it already exists", diff --git a/src/main/resources/swagger.api/dcb_transaction.yaml b/src/main/resources/swagger.api/dcb_transaction.yaml index 26692c1d..5871cfa8 100644 --- a/src/main/resources/swagger.api/dcb_transaction.yaml +++ b/src/main/resources/swagger.api/dcb_transaction.yaml @@ -57,7 +57,7 @@ paths: $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' - /ecs-request-transactions/{ecsTlrTransactionId}: + /ecs-request-transactions/{ecsRequestTransactionId}: description: ECS TLR Transaction endpoint post: description: Create transaction for existing circulation TLR @@ -65,7 +65,7 @@ paths: tags: - ecs-tlr-transaction parameters: - - $ref: '#/components/parameters/ecsTlrTransactionId' + - $ref: '#/components/parameters/ecsRequestTransactionId' requestBody: $ref: "#/components/requestBodies/DCBTransaction" responses: @@ -171,9 +171,9 @@ components: schema: type: string required: true - ecsTlrTransactionId: + ecsRequestTransactionId: in: path - name: ecsTlrTransactionId + name: ecsRequestTransactionId schema: type: string required: true From 308262c6963e3d69d6114d5bf13a82ce9b723094 Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Thu, 7 Mar 2024 23:35:00 +0600 Subject: [PATCH 08/40] MODDCB-90 Accept existing circulation request ID (cherry picked from commit 3ad31891601c866ce74ee8591fff17d8c6d685ad) --- .../impl/TransactionAuditServiceImpl.java | 8 +- ...sRequestTransactionsApiControllerTest.java | 73 +++++++++++++++++++ .../java/org/folio/dcb/utils/EntityUtils.java | 9 +++ src/test/resources/mappings/requests.json | 17 +++++ 4 files changed, 101 insertions(+), 6 deletions(-) create mode 100644 src/test/java/org/folio/dcb/controller/EcsRequestTransactionsApiControllerTest.java create mode 100644 src/test/resources/mappings/requests.json diff --git a/src/main/java/org/folio/dcb/service/impl/TransactionAuditServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/TransactionAuditServiceImpl.java index 5b6a64b1..ba2a9888 100644 --- a/src/main/java/org/folio/dcb/service/impl/TransactionAuditServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/TransactionAuditServiceImpl.java @@ -4,8 +4,6 @@ import lombok.extern.log4j.Log4j2; import org.folio.dcb.domain.dto.DcbTransaction; import org.folio.dcb.domain.entity.TransactionAuditEntity; -import org.folio.dcb.domain.entity.TransactionEntity; -import org.folio.dcb.domain.mapper.TransactionMapper; import org.folio.dcb.repository.TransactionAuditRepository; import org.folio.dcb.service.TransactionAuditService; import org.springframework.stereotype.Service; @@ -20,7 +18,6 @@ public class TransactionAuditServiceImpl implements TransactionAuditService { private static final String DUPLICATE_ERROR_ACTION = "DUPLICATE_ERROR"; private static final String DUPLICATE_ERROR_TRANSACTION_ID = "-1"; - private final TransactionMapper transactionMapper; private final TransactionAuditRepository transactionAuditRepository; @Override public void logErrorIfTransactionAuditExists(String dcbTransactionId, String errorMsg) { @@ -44,8 +41,7 @@ public void logErrorIfTransactionAuditExists(String dcbTransactionId, String err @Override public void logErrorIfTransactionAuditNotExists(String dcbTransactionId, DcbTransaction dcbTransaction, String errorMsg) { TransactionAuditEntity auditExisting = transactionAuditRepository.findLatestTransactionAuditEntityByDcbTransactionId(dcbTransactionId).orElse(null); - TransactionEntity transactionMapped = transactionMapper.mapToEntity(dcbTransactionId, dcbTransaction); - TransactionAuditEntity auditError = generateTrnAuditEntityByTrnEntityWithError(dcbTransactionId, transactionMapped, errorMsg); + TransactionAuditEntity auditError = generateTrnAuditEntityByTrnEntityWithError(dcbTransactionId, dcbTransaction, errorMsg); if (auditExisting != null) { log.debug("logTheErrorForNotExistedTransactionAudit:: dcbTransactionId = {}, dcbTransaction = {}, err = {}", dcbTransactionId, dcbTransaction, errorMsg); @@ -68,7 +64,7 @@ private TransactionAuditEntity generateTrnAuditEntityFromTheFoundOneWithError(Tr return auditError; } - private TransactionAuditEntity generateTrnAuditEntityByTrnEntityWithError(String dcbTransactionId, TransactionEntity trnE, String errorMsg) { + private TransactionAuditEntity generateTrnAuditEntityByTrnEntityWithError(String dcbTransactionId, DcbTransaction trnE, String errorMsg) { String errorMessage = String.format("dcbTransactionId = %s; dcb transaction content = %s; error message = %s.", dcbTransactionId, trnE.toString(), errorMsg); TransactionAuditEntity auditError = new TransactionAuditEntity(); diff --git a/src/test/java/org/folio/dcb/controller/EcsRequestTransactionsApiControllerTest.java b/src/test/java/org/folio/dcb/controller/EcsRequestTransactionsApiControllerTest.java new file mode 100644 index 00000000..313f6993 --- /dev/null +++ b/src/test/java/org/folio/dcb/controller/EcsRequestTransactionsApiControllerTest.java @@ -0,0 +1,73 @@ +package org.folio.dcb.controller; + +import org.folio.dcb.domain.entity.TransactionAuditEntity; +import org.folio.dcb.repository.TransactionAuditRepository; +import org.folio.dcb.repository.TransactionRepository; +import org.folio.spring.service.SystemUserScopedExecutionService; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import static org.folio.dcb.domain.dto.DcbTransaction.RoleEnum.LENDER; +import static org.folio.dcb.utils.EntityUtils.DCB_TRANSACTION_ID; +import static org.folio.dcb.utils.EntityUtils.createEcsRequestTransactionByRole; +import static org.hamcrest.Matchers.is; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +public class EcsRequestTransactionsApiControllerTest extends BaseIT { + + private static final String TRANSACTION_AUDIT_DUPLICATE_ERROR_ACTION = "DUPLICATE_ERROR"; + private static final String DUPLICATE_ERROR_TRANSACTION_ID = "-1"; + + @Autowired + private TransactionRepository transactionRepository; + @Autowired + private TransactionAuditRepository transactionAuditRepository; + @Autowired + private SystemUserScopedExecutionService systemUserScopedExecutionService; + + @Test + void createLendingEcsRequestTest() throws Exception { + removeExistedTransactionFromDbIfSoExists(); + + this.mockMvc.perform( + post("/ecs-request-transactions/" + DCB_TRANSACTION_ID) + .content(asJsonString(createEcsRequestTransactionByRole(LENDER))) + .headers(defaultHeaders()) + .contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isCreated()); + + //Trying to create another transaction with same transaction id + this.mockMvc.perform( + post("/ecs-request-transactions/" + DCB_TRANSACTION_ID) + .content(asJsonString(createEcsRequestTransactionByRole(LENDER))) + .headers(defaultHeaders()) + .contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON)) + .andExpectAll(status().is4xxClientError(), + jsonPath("$.errors[0].code", is("DUPLICATE_ERROR"))); + + // check for DUPLICATE_ERROR propagated into transactions_audit. + systemUserScopedExecutionService.executeAsyncSystemUserScoped( + TENANT, + () -> { + TransactionAuditEntity auditExisting = transactionAuditRepository + .findLatestTransactionAuditEntityByDcbTransactionId(DCB_TRANSACTION_ID) + .orElse(null); + Assertions.assertNotNull(auditExisting); + Assertions.assertNotEquals(TRANSACTION_AUDIT_DUPLICATE_ERROR_ACTION, auditExisting.getAction()); + Assertions.assertNotEquals(DUPLICATE_ERROR_TRANSACTION_ID, auditExisting.getTransactionId()); } + ); + } + + private void removeExistedTransactionFromDbIfSoExists() { + systemUserScopedExecutionService.executeAsyncSystemUserScoped(TENANT, () -> { + if (transactionRepository.existsById(DCB_TRANSACTION_ID)){ + transactionRepository.deleteById(DCB_TRANSACTION_ID); + } + }); + } +} diff --git a/src/test/java/org/folio/dcb/utils/EntityUtils.java b/src/test/java/org/folio/dcb/utils/EntityUtils.java index e27985c4..bd484f02 100644 --- a/src/test/java/org/folio/dcb/utils/EntityUtils.java +++ b/src/test/java/org/folio/dcb/utils/EntityUtils.java @@ -60,6 +60,7 @@ public class EntityUtils { public static String DCB_TYPE_USER_ID = "910c512c-ebc5-40c6-96a5-a20bfd81e154"; public static String EXISTED_INVENTORY_ITEM_BARCODE = "INVENTORY_ITEM"; public static String PATRON_TYPE_USER_ID = "18c1741d-e678-4c8e-9fe7-cfaeefab5eea"; + public static String REQUEST_ID = "398501a2-5c97-4ba6-9ee7-d1cd6433cb98"; public static DcbTransaction createDcbTransactionByRole(DcbTransaction.RoleEnum role) { return DcbTransaction.builder() @@ -74,6 +75,14 @@ public static DcbTransaction createDcbTransactionByRole(DcbTransaction.RoleEnum .build(); } + public static DcbTransaction createEcsRequestTransactionByRole(DcbTransaction.RoleEnum role) { + return DcbTransaction.builder() + .requestId(REQUEST_ID) + .role(role) + .pickup(createDcbPickup()) + .build(); + } + public static org.folio.dcb.domain.dto.ServicePointRequest createServicePointRequest() { return org.folio.dcb.domain.dto.ServicePointRequest.builder() .id(PICKUP_SERVICE_POINT_ID) diff --git a/src/test/resources/mappings/requests.json b/src/test/resources/mappings/requests.json new file mode 100644 index 00000000..dfc5f9ec --- /dev/null +++ b/src/test/resources/mappings/requests.json @@ -0,0 +1,17 @@ +{ + "mappings": [ + { + "request": { + "method": "GET", + "url": "/request-storage/requests/398501a2-5c97-4ba6-9ee7-d1cd6433cb98" + }, + "response": { + "status": 200, + "body": "{\n \"id\" : \"05f09b87-9022-4036-a94b-3dca1bc11f70\",\n \"requestLevel\" : \"Item\",\n \"requestType\" : \"Page\",\n \"requestDate\" : \"2024-03-07T13:54:08.655+00:00\",\n \"requesterId\" : \"2205005b-ca51-4a04-87fd-938eefa8f6de\",\n \"instanceId\" : \"5bf370e0-8cca-4d9c-82e4-5170ab2a0a39\",\n \"holdingsRecordId\" : \"e3ff6133-b9a2-4d4c-a1c9-dc1867d4df19\",\n \"itemId\" : \"100d10bf-2f06-4aa0-be15-0b95b2d9f9e3\",\n \"status\" : \"Open - Not yet filled\",\n \"position\" : 1,\n \"instance\" : {\n \"title\" : \"A semantic web primer\",\n \"identifiers\" : [ {\n \"identifierTypeId\" : \"8261054f-be78-422d-bd51-4ed9f33c3422\",\n \"value\" : \"0262012103\"\n }, {\n \"identifierTypeId\" : \"8261054f-be78-422d-bd51-4ed9f33c3422\",\n \"value\" : \"9780262012102\"\n }, {\n \"identifierTypeId\" : \"c858e4f2-2b6b-4385-842b-60732ee14abb\",\n \"value\" : \"2003065165\"\n } ],\n \"contributorNames\" : [ {\n \"name\" : \"Antoniou, Grigoris\"\n }, {\n \"name\" : \"Van Harmelen, Frank\"\n } ],\n \"publication\" : [ {\n \"publisher\" : \"MIT Press\",\n \"place\" : \"Cambridge, Mass. \",\n \"dateOfPublication\" : \"c2004\",\n \"role\" : \"Publisher\"\n } ]\n },\n \"item\" : {\n \"barcode\" : \"90000\",\n \"location\" : {\n \"name\" : \"Annex\",\n \"libraryName\" : \"Datalogisk Institut\",\n \"code\" : \"KU/CC/DI/A\"\n },\n \"enumeration\" : \"\",\n \"status\" : \"Paged\",\n \"callNumber\" : \"TK5105.88815 . A58 2004 FT MEADE\",\n \"callNumberComponents\" : {\n \"callNumber\" : \"TK5105.88815 . A58 2004 FT MEADE\"\n }\n },\n \"requester\" : {\n \"lastName\" : \"rick\",\n \"firstName\" : \"psych\",\n \"barcode\" : \"123\",\n \"patronGroup\" : {\n \"id\" : \"3684a786-6671-4268-8ed0-9db82ebca60b\",\n \"group\" : \"staff\",\n \"desc\" : \"Staff Member\"\n },\n \"patronGroupId\" : \"3684a786-6671-4268-8ed0-9db82ebca60b\"\n },\n \"fulfillmentPreference\" : \"Hold Shelf\",\n \"pickupServicePointId\" : \"3a40852d-49fd-4df2-a1f9-6e2641a6e91f\",\n \"metadata\" : {\n \"createdDate\" : \"2024-03-07T13:54:13.484+00:00\",\n \"createdByUserId\" : \"5600bae3-4ca8-42dd-bef5-4502aaea6dc7\",\n \"updatedDate\" : \"2024-03-07T13:54:14.768+00:00\",\n \"updatedByUserId\" : \"5600bae3-4ca8-42dd-bef5-4502aaea6dc7\"\n },\n \"pickupServicePoint\" : {\n \"name\" : \"Circ Desk 1\",\n \"code\" : \"cd1\",\n \"discoveryDisplayName\" : \"Circulation Desk -- Hallway\",\n \"description\" : null,\n \"shelvingLagTime\" : null,\n \"pickupLocation\" : true\n }\n }", + "headers": { + "Content-Type": "application/json" + } + } + } + ] +} From ae1c381c3137c209f32aee9cc376f4125eb92f87 Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Fri, 8 Mar 2024 00:32:02 +0600 Subject: [PATCH 09/40] MODDCB-90 Accept existing circulation request ID (cherry picked from commit 0020e5263723a676dfb889ee8abef7026b7da73f) --- .../controller/EcsRequestTransactionsApiControllerTest.java | 5 +++-- .../org/folio/dcb/service/TransactionAuditServiceTest.java | 3 --- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/test/java/org/folio/dcb/controller/EcsRequestTransactionsApiControllerTest.java b/src/test/java/org/folio/dcb/controller/EcsRequestTransactionsApiControllerTest.java index 313f6993..273d2936 100644 --- a/src/test/java/org/folio/dcb/controller/EcsRequestTransactionsApiControllerTest.java +++ b/src/test/java/org/folio/dcb/controller/EcsRequestTransactionsApiControllerTest.java @@ -9,6 +9,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import static org.folio.dcb.domain.dto.DcbTransaction.RoleEnum.LENDER; +import static org.folio.dcb.utils.EntityUtils.CIRCULATION_REQUEST_ID; import static org.folio.dcb.utils.EntityUtils.DCB_TRANSACTION_ID; import static org.folio.dcb.utils.EntityUtils.createEcsRequestTransactionByRole; import static org.hamcrest.Matchers.is; @@ -33,7 +34,7 @@ void createLendingEcsRequestTest() throws Exception { removeExistedTransactionFromDbIfSoExists(); this.mockMvc.perform( - post("/ecs-request-transactions/" + DCB_TRANSACTION_ID) + post("/ecs-request-transactions/" + CIRCULATION_REQUEST_ID) .content(asJsonString(createEcsRequestTransactionByRole(LENDER))) .headers(defaultHeaders()) .contentType(MediaType.APPLICATION_JSON) @@ -42,7 +43,7 @@ void createLendingEcsRequestTest() throws Exception { //Trying to create another transaction with same transaction id this.mockMvc.perform( - post("/ecs-request-transactions/" + DCB_TRANSACTION_ID) + post("/ecs-request-transactions/" + CIRCULATION_REQUEST_ID) .content(asJsonString(createEcsRequestTransactionByRole(LENDER))) .headers(defaultHeaders()) .contentType(MediaType.APPLICATION_JSON) diff --git a/src/test/java/org/folio/dcb/service/TransactionAuditServiceTest.java b/src/test/java/org/folio/dcb/service/TransactionAuditServiceTest.java index 0f285daa..48606e31 100644 --- a/src/test/java/org/folio/dcb/service/TransactionAuditServiceTest.java +++ b/src/test/java/org/folio/dcb/service/TransactionAuditServiceTest.java @@ -15,7 +15,6 @@ import static org.folio.dcb.domain.dto.DcbTransaction.RoleEnum.LENDER; import static org.folio.dcb.utils.EntityUtils.DCB_TRANSACTION_ID; import static org.folio.dcb.utils.EntityUtils.createDcbTransactionByRole; -import static org.folio.dcb.utils.EntityUtils.createTransactionEntity; import static org.folio.dcb.utils.EntityUtils.createTransactionAuditEntity; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.times; @@ -41,11 +40,9 @@ void logTheErrorForExistedTransactionAuditTest() { } @Test void logTheErrorForNotExistedTransactionAuditTest() { - when(transactionMapper.mapToEntity(any(), any())).thenReturn(createTransactionEntity()); when(transactionAuditRepository.findLatestTransactionAuditEntityByDcbTransactionId(any())) .thenReturn(Optional.empty()); transactionAuditService.logErrorIfTransactionAuditNotExists(DCB_TRANSACTION_ID, createDcbTransactionByRole(LENDER), "error_message"); - Mockito.verify(transactionMapper, times(1)).mapToEntity(any(), any()); Mockito.verify(transactionAuditRepository, times(1)).save(any()); } From a8c3f843732f2730f1ebe4e6f34cda74a958204e Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Fri, 8 Mar 2024 00:50:14 +0600 Subject: [PATCH 10/40] MODDCB-90 Accept existing circulation request ID (cherry picked from commit 38a34b571393d6576f7cfbe5bed9867bd6190d25) --- .../EcsRequestTransactionsApiControllerTest.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/test/java/org/folio/dcb/controller/EcsRequestTransactionsApiControllerTest.java b/src/test/java/org/folio/dcb/controller/EcsRequestTransactionsApiControllerTest.java index 273d2936..d93eaf92 100644 --- a/src/test/java/org/folio/dcb/controller/EcsRequestTransactionsApiControllerTest.java +++ b/src/test/java/org/folio/dcb/controller/EcsRequestTransactionsApiControllerTest.java @@ -10,7 +10,6 @@ import org.springframework.http.MediaType; import static org.folio.dcb.domain.dto.DcbTransaction.RoleEnum.LENDER; import static org.folio.dcb.utils.EntityUtils.CIRCULATION_REQUEST_ID; -import static org.folio.dcb.utils.EntityUtils.DCB_TRANSACTION_ID; import static org.folio.dcb.utils.EntityUtils.createEcsRequestTransactionByRole; import static org.hamcrest.Matchers.is; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; @@ -56,7 +55,7 @@ void createLendingEcsRequestTest() throws Exception { TENANT, () -> { TransactionAuditEntity auditExisting = transactionAuditRepository - .findLatestTransactionAuditEntityByDcbTransactionId(DCB_TRANSACTION_ID) + .findLatestTransactionAuditEntityByDcbTransactionId(CIRCULATION_REQUEST_ID) .orElse(null); Assertions.assertNotNull(auditExisting); Assertions.assertNotEquals(TRANSACTION_AUDIT_DUPLICATE_ERROR_ACTION, auditExisting.getAction()); @@ -66,8 +65,8 @@ void createLendingEcsRequestTest() throws Exception { private void removeExistedTransactionFromDbIfSoExists() { systemUserScopedExecutionService.executeAsyncSystemUserScoped(TENANT, () -> { - if (transactionRepository.existsById(DCB_TRANSACTION_ID)){ - transactionRepository.deleteById(DCB_TRANSACTION_ID); + if (transactionRepository.existsById(CIRCULATION_REQUEST_ID)){ + transactionRepository.deleteById(CIRCULATION_REQUEST_ID); } }); } From 0ff140d2fc9ca9ae269021b66e38a4774257827c Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Fri, 8 Mar 2024 01:18:46 +0600 Subject: [PATCH 11/40] MODDCB-90 Accept existing circulation request ID (cherry picked from commit 0fef6f2734d956e9cb99295fb26bd2cc7c5c9b59) --- ...EcsRequestTransactionsApiControllerTest.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/test/java/org/folio/dcb/controller/EcsRequestTransactionsApiControllerTest.java b/src/test/java/org/folio/dcb/controller/EcsRequestTransactionsApiControllerTest.java index d93eaf92..f2a43854 100644 --- a/src/test/java/org/folio/dcb/controller/EcsRequestTransactionsApiControllerTest.java +++ b/src/test/java/org/folio/dcb/controller/EcsRequestTransactionsApiControllerTest.java @@ -1,5 +1,6 @@ package org.folio.dcb.controller; +import org.folio.dcb.domain.dto.DcbTransaction; import org.folio.dcb.domain.entity.TransactionAuditEntity; import org.folio.dcb.repository.TransactionAuditRepository; import org.folio.dcb.repository.TransactionRepository; @@ -8,6 +9,9 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; + +import java.util.UUID; + import static org.folio.dcb.domain.dto.DcbTransaction.RoleEnum.LENDER; import static org.folio.dcb.utils.EntityUtils.CIRCULATION_REQUEST_ID; import static org.folio.dcb.utils.EntityUtils.createEcsRequestTransactionByRole; @@ -63,6 +67,19 @@ void createLendingEcsRequestTest() throws Exception { ); } + @Test + void checkErrorStatusForInvalidRequest() throws Exception { + DcbTransaction dcbTransaction = createEcsRequestTransactionByRole(LENDER); + dcbTransaction.setRequestId(UUID.randomUUID().toString()); + this.mockMvc.perform( + post("/ecs-request-transactions/" + CIRCULATION_REQUEST_ID) + .content(asJsonString(dcbTransaction)) + .headers(defaultHeaders()) + .contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON)) + .andExpectAll(status().is4xxClientError()); + } + private void removeExistedTransactionFromDbIfSoExists() { systemUserScopedExecutionService.executeAsyncSystemUserScoped(TENANT, () -> { if (transactionRepository.existsById(CIRCULATION_REQUEST_ID)){ From 3f9d6ff495f44f7da98e1069e983cefe14a91317 Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Mon, 11 Mar 2024 13:41:55 +0600 Subject: [PATCH 12/40] MODDCB-90 Accept existing circulation request ID (cherry picked from commit c386a751c97e2db9a4151d6749a3470ffb22e17d) --- .../dcb/controller/EcsRequestTransactionsApiControllerTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/org/folio/dcb/controller/EcsRequestTransactionsApiControllerTest.java b/src/test/java/org/folio/dcb/controller/EcsRequestTransactionsApiControllerTest.java index f2a43854..1990958c 100644 --- a/src/test/java/org/folio/dcb/controller/EcsRequestTransactionsApiControllerTest.java +++ b/src/test/java/org/folio/dcb/controller/EcsRequestTransactionsApiControllerTest.java @@ -20,7 +20,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; -public class EcsRequestTransactionsApiControllerTest extends BaseIT { +class EcsRequestTransactionsApiControllerTest extends BaseIT { private static final String TRANSACTION_AUDIT_DUPLICATE_ERROR_ACTION = "DUPLICATE_ERROR"; private static final String DUPLICATE_ERROR_TRANSACTION_ID = "-1"; From 4ca665ce42606e9d3d0c2d3d5aeec6071c9acbcf Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Tue, 12 Mar 2024 16:32:44 +0500 Subject: [PATCH 13/40] MODDCB-90 Accept existing circulation request ID (cherry picked from commit a67298d651f4c30e93896c125cddff53bed791b5) --- .../dcb/controller/EcsRequestTransactionsApiController.java | 2 +- .../org/folio/dcb/service/EcsRequestTransactionsService.java | 2 +- .../dcb/service/impl/EcsRequestTransactionsServiceImpl.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/folio/dcb/controller/EcsRequestTransactionsApiController.java b/src/main/java/org/folio/dcb/controller/EcsRequestTransactionsApiController.java index 7b54beff..8b86c9f7 100644 --- a/src/main/java/org/folio/dcb/controller/EcsRequestTransactionsApiController.java +++ b/src/main/java/org/folio/dcb/controller/EcsRequestTransactionsApiController.java @@ -21,7 +21,7 @@ public class EcsRequestTransactionsApiController implements EcsRequestTransactio @Override public ResponseEntity createEcsRequestTransactions( - String ecsRequestTransactionId, DcbTransaction dcbTransaction) { + String ecsRequestTransactionId, DcbTransaction dcbTransaction) { log.info("createEcsRequestTransactions:: creating ECS Request Transaction {} with ID {}", dcbTransaction, ecsRequestTransactionId); TransactionStatusResponse transactionStatusResponse; diff --git a/src/main/java/org/folio/dcb/service/EcsRequestTransactionsService.java b/src/main/java/org/folio/dcb/service/EcsRequestTransactionsService.java index aeaa3b82..dcb44c41 100644 --- a/src/main/java/org/folio/dcb/service/EcsRequestTransactionsService.java +++ b/src/main/java/org/folio/dcb/service/EcsRequestTransactionsService.java @@ -5,5 +5,5 @@ public interface EcsRequestTransactionsService { TransactionStatusResponse createEcsRequestTransactions(String ecsRequestTransactionsId, - DcbTransaction dcbTransaction); + DcbTransaction dcbTransaction); } diff --git a/src/main/java/org/folio/dcb/service/impl/EcsRequestTransactionsServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/EcsRequestTransactionsServiceImpl.java index a0e9a76c..b17025d6 100644 --- a/src/main/java/org/folio/dcb/service/impl/EcsRequestTransactionsServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/EcsRequestTransactionsServiceImpl.java @@ -27,7 +27,7 @@ public class EcsRequestTransactionsServiceImpl implements EcsRequestTransactions @Override public TransactionStatusResponse createEcsRequestTransactions(String ecsRequestTransactionsId, - DcbTransaction dcbTransaction) { + DcbTransaction dcbTransaction) { log.info("createEcsRequestTransactions:: creating new transaction request for role {} ", dcbTransaction.getRole()); checkEcsRequestTransactionExistsAndThrow(ecsRequestTransactionsId); From 758246a71fa8cb1572003d115882436b1be33e1b Mon Sep 17 00:00:00 2001 From: Magzhan Date: Wed, 13 Mar 2024 17:46:40 +0500 Subject: [PATCH 14/40] Update src/main/java/org/folio/dcb/service/impl/EcsRequestTransactionsServiceImpl.java Co-authored-by: Roman Barannyk <53909129+roman-barannyk@users.noreply.github.com> (cherry picked from commit 29e9d8e8a2f06917f2f6db61876897531daa794f) --- .../dcb/service/impl/EcsRequestTransactionsServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/folio/dcb/service/impl/EcsRequestTransactionsServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/EcsRequestTransactionsServiceImpl.java index b17025d6..cae37a2b 100644 --- a/src/main/java/org/folio/dcb/service/impl/EcsRequestTransactionsServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/EcsRequestTransactionsServiceImpl.java @@ -33,7 +33,7 @@ public TransactionStatusResponse createEcsRequestTransactions(String ecsRequestT checkEcsRequestTransactionExistsAndThrow(ecsRequestTransactionsId); CirculationRequest circulationRequest = circulationRequestService.fetchRequestById( dcbTransaction.getRequestId()); - if(circulationRequest != null && RequestStatus.isRequestOpen( + if (circulationRequest != null && RequestStatus.isRequestOpen( RequestStatus.from(circulationRequest.getStatus()))) { if (dcbTransaction.getRole() == LENDER) { dcbTransaction.setItem(DcbItem.builder() From 242614791c8f1dabe5b8f3098832a5cf7cd244cc Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Fri, 15 Mar 2024 14:48:54 +0200 Subject: [PATCH 15/40] MODDCB-90 Accept existing circulation request ID (cherry picked from commit f2958bcba1dec23dedfa4c37fa94b339920fc999) --- descriptors/ModuleDescriptor-template.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/descriptors/ModuleDescriptor-template.json b/descriptors/ModuleDescriptor-template.json index 71febff0..11035c35 100644 --- a/descriptors/ModuleDescriptor-template.json +++ b/descriptors/ModuleDescriptor-template.json @@ -215,7 +215,8 @@ "dcb.transactions.post", "dcb.transactions.put", "dcb.transactions.get", - "dcb.transactions.collection.get" + "dcb.transactions.collection.get", + "ecs-tlr.transactions.post" ] }, { @@ -237,6 +238,11 @@ "permissionName": "dcb.transactions.collection.get", "displayName": "get updated transaction detail list", "description": "get list of transaction updated between a given query range" + }, + { + "permissionName": "ecs-tlr.transactions.post", + "displayName": "creates new ecs request transaction", + "description": "creates new ecs request transaction" } ], "metadata": { From aea378c6b2343edca07fbb4c88937d49d663f121 Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Fri, 15 Mar 2024 15:05:44 +0200 Subject: [PATCH 16/40] MODDCB-90 Accept existing circulation request ID (cherry picked from commit da347fea080406ca1b97a44b8e737580b51ec808) --- descriptors/ModuleDescriptor-template.json | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/descriptors/ModuleDescriptor-template.json b/descriptors/ModuleDescriptor-template.json index 11035c35..800c4de5 100644 --- a/descriptors/ModuleDescriptor-template.json +++ b/descriptors/ModuleDescriptor-template.json @@ -141,16 +141,24 @@ "dcb.transactions.collection.get" ], "modulePermissions": [] - }, + } + ] + }, + { + "id": "ecs-request-transactions", + "version": "1.0", + "handlers": [ { "methods": [ "POST" ], - "pathPattern": "/ecs-tlr-transactions/{ecsTlrTransactionId}", + "pathPattern": "/ecs-request-transactions/{ecsRequestTransactionId}", "permissionsRequired": [ "ecs-tlr.transactions.post" ], "modulePermissions": [ + "circulation-storage.requests.item.get", + "circulation-storage.requests.collection.get" ] } ] @@ -240,7 +248,15 @@ "description": "get list of transaction updated between a given query range" }, { - "permissionName": "ecs-tlr.transactions.post", + "permissionName": "ecs-request.all", + "displayName": "ECS request - all permissions", + "description": "All permissions for ECS request module", + "subPermissions": [ + "ecs-request.transactions.post" + ] + }, + { + "permissionName": "ecs-request.transactions.post", "displayName": "creates new ecs request transaction", "description": "creates new ecs request transaction" } From 97644bb0635ff61ca7cba3185f6997cf18f4cd07 Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Fri, 15 Mar 2024 15:19:16 +0200 Subject: [PATCH 17/40] MODDCB-90 Accept existing circulation request ID (cherry picked from commit 0f45a099903282488afb27ba9640dea08f8562f5) --- descriptors/ModuleDescriptor-template.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/descriptors/ModuleDescriptor-template.json b/descriptors/ModuleDescriptor-template.json index 800c4de5..93833a30 100644 --- a/descriptors/ModuleDescriptor-template.json +++ b/descriptors/ModuleDescriptor-template.json @@ -224,7 +224,8 @@ "dcb.transactions.put", "dcb.transactions.get", "dcb.transactions.collection.get", - "ecs-tlr.transactions.post" + "dcb.transactions.get", + "ecs-request.transactions.post" ] }, { @@ -257,8 +258,8 @@ }, { "permissionName": "ecs-request.transactions.post", - "displayName": "creates new ecs request transaction", - "description": "creates new ecs request transaction" + "displayName": "creates new ECS request transaction", + "description": "creates new ECS request transaction" } ], "metadata": { From a04fc141fd1412afedb4e473989b58ccee27c633 Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Mon, 18 Mar 2024 13:00:45 +0600 Subject: [PATCH 18/40] MODDCB-90 Accept existing circulation request ID (cherry picked from commit 4663816ce95c4a62b08dbe72e130ea243ebcbc07) --- .../EcsRequestTransactionsServiceImpl.java | 31 +++++++++++-------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/src/main/java/org/folio/dcb/service/impl/EcsRequestTransactionsServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/EcsRequestTransactionsServiceImpl.java index cae37a2b..46ea4950 100644 --- a/src/main/java/org/folio/dcb/service/impl/EcsRequestTransactionsServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/EcsRequestTransactionsServiceImpl.java @@ -36,19 +36,7 @@ public TransactionStatusResponse createEcsRequestTransactions(String ecsRequestT if (circulationRequest != null && RequestStatus.isRequestOpen( RequestStatus.from(circulationRequest.getStatus()))) { if (dcbTransaction.getRole() == LENDER) { - dcbTransaction.setItem(DcbItem.builder() - .id(String.valueOf(circulationRequest.getItemId())) - .barcode(circulationRequest.getItem().getBarcode()) - .build()); - 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()); + createLenderEcsRequestTransactions(ecsRequestTransactionsId, dcbTransaction, circulationRequest); } else { throw new IllegalArgumentException("Unimplemented role: " + dcbTransaction.getRole()); } @@ -69,4 +57,21 @@ private void checkEcsRequestTransactionExistsAndThrow(String dcbTransactionId) { dcbTransactionId)); } } + + private void createLenderEcsRequestTransactions(String ecsRequestTransactionsId, + DcbTransaction dcbTransaction, CirculationRequest circulationRequest) { + dcbTransaction.setItem(DcbItem.builder() + .id(String.valueOf(circulationRequest.getItemId())) + .barcode(circulationRequest.getItem().getBarcode()) + .build()); + 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()); + } } From 2c0e912fb3d196812fa175f817a9f126711dd1d3 Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Mon, 18 Mar 2024 16:27:35 +0600 Subject: [PATCH 19/40] MODDCB-90 Accept existing circulation request ID (cherry picked from commit 4483aced6f2012c8a8171f273491665fe368bece) --- descriptors/ModuleDescriptor-template.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/descriptors/ModuleDescriptor-template.json b/descriptors/ModuleDescriptor-template.json index 93833a30..7c0a12a8 100644 --- a/descriptors/ModuleDescriptor-template.json +++ b/descriptors/ModuleDescriptor-template.json @@ -154,7 +154,7 @@ ], "pathPattern": "/ecs-request-transactions/{ecsRequestTransactionId}", "permissionsRequired": [ - "ecs-tlr.transactions.post" + "ecs-request.transactions.post" ], "modulePermissions": [ "circulation-storage.requests.item.get", From 44fb716c4771ba56d86d623c8f1a8e6bb7609180 Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Mon, 18 Mar 2024 16:31:44 +0600 Subject: [PATCH 20/40] MODDCB-90 Accept existing circulation request ID (cherry picked from commit 33d7ae01d338e8311242a6e6c70bd6bdc6b670f4) --- descriptors/ModuleDescriptor-template.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/descriptors/ModuleDescriptor-template.json b/descriptors/ModuleDescriptor-template.json index 7c0a12a8..0dcbcfce 100644 --- a/descriptors/ModuleDescriptor-template.json +++ b/descriptors/ModuleDescriptor-template.json @@ -154,7 +154,7 @@ ], "pathPattern": "/ecs-request-transactions/{ecsRequestTransactionId}", "permissionsRequired": [ - "ecs-request.transactions.post" + "dcb.ecs-request-transactions.post" ], "modulePermissions": [ "circulation-storage.requests.item.get", From d293c442d36280fe6cc77cccf3ba1d24f4363615 Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Mon, 18 Mar 2024 16:36:10 +0600 Subject: [PATCH 21/40] MODDCB-90 Accept existing circulation request ID (cherry picked from commit 357a1dc390aad86afb296fba258788da9af4d973) --- descriptors/ModuleDescriptor-template.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/descriptors/ModuleDescriptor-template.json b/descriptors/ModuleDescriptor-template.json index 0dcbcfce..31a0ccb0 100644 --- a/descriptors/ModuleDescriptor-template.json +++ b/descriptors/ModuleDescriptor-template.json @@ -154,7 +154,7 @@ ], "pathPattern": "/ecs-request-transactions/{ecsRequestTransactionId}", "permissionsRequired": [ - "dcb.ecs-request-transactions.post" + "dcb.ecs-request.transactions.post" ], "modulePermissions": [ "circulation-storage.requests.item.get", From 4785c928a9da2ffa79f6a1b8706fcfbef3a4dd64 Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Mon, 18 Mar 2024 12:39:17 +0200 Subject: [PATCH 22/40] MODDCB-90 Accept existing circulation request ID (cherry picked from commit fff2f756f5967764b7a2629ef8a4d87080f3e52d) --- descriptors/ModuleDescriptor-template.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/descriptors/ModuleDescriptor-template.json b/descriptors/ModuleDescriptor-template.json index 31a0ccb0..bf873044 100644 --- a/descriptors/ModuleDescriptor-template.json +++ b/descriptors/ModuleDescriptor-template.json @@ -225,7 +225,7 @@ "dcb.transactions.get", "dcb.transactions.collection.get", "dcb.transactions.get", - "ecs-request.transactions.post" + "dcb.ecs-request.transactions.post" ] }, { @@ -257,7 +257,7 @@ ] }, { - "permissionName": "ecs-request.transactions.post", + "permissionName": "dcb.ecs-request.transactions.post", "displayName": "creates new ECS request transaction", "description": "creates new ECS request transaction" } From dce3ca04e2a051368b1c7d063b08af5f33232659 Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Mon, 18 Mar 2024 22:08:29 +0600 Subject: [PATCH 23/40] MODDCB-90 Accept existing circulation request ID (cherry picked from commit bcdc3a456516a98b8be6c961ec2b1d87f3bd2fc9) --- src/main/resources/swagger.api/schemas/CirculationRequest.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/resources/swagger.api/schemas/CirculationRequest.yaml b/src/main/resources/swagger.api/schemas/CirculationRequest.yaml index 8634f6b0..d8f437d1 100644 --- a/src/main/resources/swagger.api/schemas/CirculationRequest.yaml +++ b/src/main/resources/swagger.api/schemas/CirculationRequest.yaml @@ -17,6 +17,7 @@ CirculationRequest: type: string enum: - Item + - Title requestDate: description: Date the request was made type: string From 3851b693eed15fd2f609f40927e965d17a2155d1 Mon Sep 17 00:00:00 2001 From: Magzhan Date: Fri, 5 Jul 2024 19:04:41 +0500 Subject: [PATCH 24/40] [MODDCB-105] Accept existing circulation request ID (borrowing transaction) (#82) * MODDCB-105 Accept existing circulation request ID (borrowing transaction) * MODDCB-105 Accept existing circulation request ID (borrowing transaction) * MODDCB-105 Accept existing circulation request ID (borrowing transaction) * MODDCB-105 Accept existing circulation request ID (borrowing transaction) * MODDCB-105 Accept existing circulation request ID (borrowing transaction) (cherry picked from commit 1b5a8e9ebf18c1689136eb4eacefb2c6328b6ad1) --- descriptors/ModuleDescriptor-template.json | 10 ++++- .../dcb/client/feign/CirculationClient.java | 3 +- .../org/folio/dcb/service/RequestService.java | 1 + .../service/impl/CirculationServiceImpl.java | 2 +- .../EcsRequestTransactionsServiceImpl.java | 45 +++++++++++++++++-- .../dcb/service/impl/RequestServiceImpl.java | 7 +++ ...sRequestTransactionsApiControllerTest.java | 39 ++++++++++------ .../dcb/service/CirculationServiceTest.java | 4 +- .../java/org/folio/dcb/utils/EntityUtils.java | 13 +++++- src/test/resources/mappings/circulation.json | 12 +++++ src/test/resources/mappings/requests.json | 14 +++++- 11 files changed, 126 insertions(+), 24 deletions(-) diff --git a/descriptors/ModuleDescriptor-template.json b/descriptors/ModuleDescriptor-template.json index bf873044..77aa1efd 100644 --- a/descriptors/ModuleDescriptor-template.json +++ b/descriptors/ModuleDescriptor-template.json @@ -158,7 +158,15 @@ ], "modulePermissions": [ "circulation-storage.requests.item.get", - "circulation-storage.requests.collection.get" + "circulation-storage.requests.collection.get", + "circulation.requests.item.put", + "inventory-storage.items.item.get", + "inventory-storage.items.collection.get", + "circulation-item.item.post", + "circulation-item.collection.get", + "circulation-item.item.get", + "inventory-storage.material-types.collection.get", + "inventory-storage.loan-types.collection.get" ] } ] diff --git a/src/main/java/org/folio/dcb/client/feign/CirculationClient.java b/src/main/java/org/folio/dcb/client/feign/CirculationClient.java index 40340069..8b21366f 100644 --- a/src/main/java/org/folio/dcb/client/feign/CirculationClient.java +++ b/src/main/java/org/folio/dcb/client/feign/CirculationClient.java @@ -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); } diff --git a/src/main/java/org/folio/dcb/service/RequestService.java b/src/main/java/org/folio/dcb/service/RequestService.java index 0ac6842f..49358cb8 100644 --- a/src/main/java/org/folio/dcb/service/RequestService.java +++ b/src/main/java/org/folio/dcb/service/RequestService.java @@ -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); } 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 9c88acd2..9934385f 100644 --- a/src/main/java/org/folio/dcb/service/impl/CirculationServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/CirculationServiceImpl.java @@ -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())); diff --git a/src/main/java/org/folio/dcb/service/impl/EcsRequestTransactionsServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/EcsRequestTransactionsServiceImpl.java index 46ea4950..0b6daacd 100644 --- a/src/main/java/org/folio/dcb/service/impl/EcsRequestTransactionsServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/EcsRequestTransactionsServiceImpl.java @@ -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 @@ -23,7 +32,9 @@ 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, @@ -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()); } @@ -74,4 +88,29 @@ private void createLenderEcsRequestTransactions(String ecsRequestTransactionsId, baseLibraryService.saveDcbTransaction(ecsRequestTransactionsId, dcbTransaction, dcbTransaction.getRequestId()); } + + private void createBorrowerEcsRequestTransactions(String ecsRequestTransactionsId, + DcbTransaction dcbTransaction, CirculationRequest circulationRequest) { + var itemVirtual = dcbTransaction.getItem(); + if (itemVirtual == null) { + throw new IllegalArgumentException("Item is required for borrower transaction"); + } + 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()); + } } diff --git a/src/main/java/org/folio/dcb/service/impl/RequestServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/RequestServiceImpl.java index 65c1f8a3..f8fe764f 100644 --- a/src/main/java/org/folio/dcb/service/impl/RequestServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/RequestServiceImpl.java @@ -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()) diff --git a/src/test/java/org/folio/dcb/controller/EcsRequestTransactionsApiControllerTest.java b/src/test/java/org/folio/dcb/controller/EcsRequestTransactionsApiControllerTest.java index 1990958c..bb55b672 100644 --- a/src/test/java/org/folio/dcb/controller/EcsRequestTransactionsApiControllerTest.java +++ b/src/test/java/org/folio/dcb/controller/EcsRequestTransactionsApiControllerTest.java @@ -1,5 +1,15 @@ package org.folio.dcb.controller; +import static org.folio.dcb.utils.EntityUtils.CIRCULATION_REQUEST_ID; +import static org.folio.dcb.utils.EntityUtils.createBorrowingEcsRequestTransactionByRole; +import static org.folio.dcb.utils.EntityUtils.createLendingEcsRequestTransactionByRole; +import static org.hamcrest.Matchers.is; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +import java.util.UUID; + import org.folio.dcb.domain.dto.DcbTransaction; import org.folio.dcb.domain.entity.TransactionAuditEntity; import org.folio.dcb.repository.TransactionAuditRepository; @@ -10,16 +20,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; -import java.util.UUID; - -import static org.folio.dcb.domain.dto.DcbTransaction.RoleEnum.LENDER; -import static org.folio.dcb.utils.EntityUtils.CIRCULATION_REQUEST_ID; -import static org.folio.dcb.utils.EntityUtils.createEcsRequestTransactionByRole; -import static org.hamcrest.Matchers.is; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - class EcsRequestTransactionsApiControllerTest extends BaseIT { private static final String TRANSACTION_AUDIT_DUPLICATE_ERROR_ACTION = "DUPLICATE_ERROR"; @@ -38,7 +38,7 @@ void createLendingEcsRequestTest() throws Exception { this.mockMvc.perform( post("/ecs-request-transactions/" + CIRCULATION_REQUEST_ID) - .content(asJsonString(createEcsRequestTransactionByRole(LENDER))) + .content(asJsonString(createLendingEcsRequestTransactionByRole())) .headers(defaultHeaders()) .contentType(MediaType.APPLICATION_JSON) .accept(MediaType.APPLICATION_JSON)) @@ -47,7 +47,7 @@ void createLendingEcsRequestTest() throws Exception { //Trying to create another transaction with same transaction id this.mockMvc.perform( post("/ecs-request-transactions/" + CIRCULATION_REQUEST_ID) - .content(asJsonString(createEcsRequestTransactionByRole(LENDER))) + .content(asJsonString(createLendingEcsRequestTransactionByRole())) .headers(defaultHeaders()) .contentType(MediaType.APPLICATION_JSON) .accept(MediaType.APPLICATION_JSON)) @@ -67,9 +67,22 @@ void createLendingEcsRequestTest() throws Exception { ); } + @Test + void createBorrowingEcsRequestTest() throws Exception { + removeExistedTransactionFromDbIfSoExists(); + + this.mockMvc.perform( + post("/ecs-request-transactions/" + CIRCULATION_REQUEST_ID) + .content(asJsonString(createBorrowingEcsRequestTransactionByRole())) + .headers(defaultHeaders()) + .contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isCreated()); + } + @Test void checkErrorStatusForInvalidRequest() throws Exception { - DcbTransaction dcbTransaction = createEcsRequestTransactionByRole(LENDER); + DcbTransaction dcbTransaction = createLendingEcsRequestTransactionByRole(); dcbTransaction.setRequestId(UUID.randomUUID().toString()); this.mockMvc.perform( post("/ecs-request-transactions/" + CIRCULATION_REQUEST_ID) diff --git a/src/test/java/org/folio/dcb/service/CirculationServiceTest.java b/src/test/java/org/folio/dcb/service/CirculationServiceTest.java index 59c2a93f..eb461539 100644 --- a/src/test/java/org/folio/dcb/service/CirculationServiceTest.java +++ b/src/test/java/org/folio/dcb/service/CirculationServiceTest.java @@ -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())); } diff --git a/src/test/java/org/folio/dcb/utils/EntityUtils.java b/src/test/java/org/folio/dcb/utils/EntityUtils.java index bd484f02..48d1b1e1 100644 --- a/src/test/java/org/folio/dcb/utils/EntityUtils.java +++ b/src/test/java/org/folio/dcb/utils/EntityUtils.java @@ -75,10 +75,19 @@ public static DcbTransaction createDcbTransactionByRole(DcbTransaction.RoleEnum .build(); } - public static DcbTransaction createEcsRequestTransactionByRole(DcbTransaction.RoleEnum role) { + public static DcbTransaction createLendingEcsRequestTransactionByRole() { return DcbTransaction.builder() .requestId(REQUEST_ID) - .role(role) + .role(DcbTransaction.RoleEnum.LENDER) + .pickup(createDcbPickup()) + .build(); + } + + public static DcbTransaction createBorrowingEcsRequestTransactionByRole() { + return DcbTransaction.builder() + .requestId(REQUEST_ID) + .item(createDcbItem()) + .role(DcbTransaction.RoleEnum.BORROWER) .pickup(createDcbPickup()) .build(); } diff --git a/src/test/resources/mappings/circulation.json b/src/test/resources/mappings/circulation.json index ac492f17..00ec8fc2 100644 --- a/src/test/resources/mappings/circulation.json +++ b/src/test/resources/mappings/circulation.json @@ -13,6 +13,18 @@ } } }, + { + "request": { + "method": "PUT", + "url": "/circulation/requests/398501a2-5c97-4ba6-9ee7-d1cd6433cb98" + }, + "response": { + "status": 204, + "headers": { + "Content-Type": "application/json" + } + } + }, { "request": { "method": "POST", diff --git a/src/test/resources/mappings/requests.json b/src/test/resources/mappings/requests.json index dfc5f9ec..c981dff1 100644 --- a/src/test/resources/mappings/requests.json +++ b/src/test/resources/mappings/requests.json @@ -7,7 +7,19 @@ }, "response": { "status": 200, - "body": "{\n \"id\" : \"05f09b87-9022-4036-a94b-3dca1bc11f70\",\n \"requestLevel\" : \"Item\",\n \"requestType\" : \"Page\",\n \"requestDate\" : \"2024-03-07T13:54:08.655+00:00\",\n \"requesterId\" : \"2205005b-ca51-4a04-87fd-938eefa8f6de\",\n \"instanceId\" : \"5bf370e0-8cca-4d9c-82e4-5170ab2a0a39\",\n \"holdingsRecordId\" : \"e3ff6133-b9a2-4d4c-a1c9-dc1867d4df19\",\n \"itemId\" : \"100d10bf-2f06-4aa0-be15-0b95b2d9f9e3\",\n \"status\" : \"Open - Not yet filled\",\n \"position\" : 1,\n \"instance\" : {\n \"title\" : \"A semantic web primer\",\n \"identifiers\" : [ {\n \"identifierTypeId\" : \"8261054f-be78-422d-bd51-4ed9f33c3422\",\n \"value\" : \"0262012103\"\n }, {\n \"identifierTypeId\" : \"8261054f-be78-422d-bd51-4ed9f33c3422\",\n \"value\" : \"9780262012102\"\n }, {\n \"identifierTypeId\" : \"c858e4f2-2b6b-4385-842b-60732ee14abb\",\n \"value\" : \"2003065165\"\n } ],\n \"contributorNames\" : [ {\n \"name\" : \"Antoniou, Grigoris\"\n }, {\n \"name\" : \"Van Harmelen, Frank\"\n } ],\n \"publication\" : [ {\n \"publisher\" : \"MIT Press\",\n \"place\" : \"Cambridge, Mass. \",\n \"dateOfPublication\" : \"c2004\",\n \"role\" : \"Publisher\"\n } ]\n },\n \"item\" : {\n \"barcode\" : \"90000\",\n \"location\" : {\n \"name\" : \"Annex\",\n \"libraryName\" : \"Datalogisk Institut\",\n \"code\" : \"KU/CC/DI/A\"\n },\n \"enumeration\" : \"\",\n \"status\" : \"Paged\",\n \"callNumber\" : \"TK5105.88815 . A58 2004 FT MEADE\",\n \"callNumberComponents\" : {\n \"callNumber\" : \"TK5105.88815 . A58 2004 FT MEADE\"\n }\n },\n \"requester\" : {\n \"lastName\" : \"rick\",\n \"firstName\" : \"psych\",\n \"barcode\" : \"123\",\n \"patronGroup\" : {\n \"id\" : \"3684a786-6671-4268-8ed0-9db82ebca60b\",\n \"group\" : \"staff\",\n \"desc\" : \"Staff Member\"\n },\n \"patronGroupId\" : \"3684a786-6671-4268-8ed0-9db82ebca60b\"\n },\n \"fulfillmentPreference\" : \"Hold Shelf\",\n \"pickupServicePointId\" : \"3a40852d-49fd-4df2-a1f9-6e2641a6e91f\",\n \"metadata\" : {\n \"createdDate\" : \"2024-03-07T13:54:13.484+00:00\",\n \"createdByUserId\" : \"5600bae3-4ca8-42dd-bef5-4502aaea6dc7\",\n \"updatedDate\" : \"2024-03-07T13:54:14.768+00:00\",\n \"updatedByUserId\" : \"5600bae3-4ca8-42dd-bef5-4502aaea6dc7\"\n },\n \"pickupServicePoint\" : {\n \"name\" : \"Circ Desk 1\",\n \"code\" : \"cd1\",\n \"discoveryDisplayName\" : \"Circulation Desk -- Hallway\",\n \"description\" : null,\n \"shelvingLagTime\" : null,\n \"pickupLocation\" : true\n }\n }", + "body": "{\n \"id\" : \"398501a2-5c97-4ba6-9ee7-d1cd6433cb98\",\n \"requestLevel\" : \"Item\",\n \"requestType\" : \"Page\",\n \"requestDate\" : \"2024-03-07T13:54:08.655+00:00\",\n \"requesterId\" : \"2205005b-ca51-4a04-87fd-938eefa8f6de\",\n \"instanceId\" : \"5bf370e0-8cca-4d9c-82e4-5170ab2a0a39\",\n \"holdingsRecordId\" : \"e3ff6133-b9a2-4d4c-a1c9-dc1867d4df19\",\n \"itemId\" : \"100d10bf-2f06-4aa0-be15-0b95b2d9f9e3\",\n \"status\" : \"Open - Not yet filled\",\n \"position\" : 1,\n \"instance\" : {\n \"title\" : \"A semantic web primer\",\n \"identifiers\" : [ {\n \"identifierTypeId\" : \"8261054f-be78-422d-bd51-4ed9f33c3422\",\n \"value\" : \"0262012103\"\n }, {\n \"identifierTypeId\" : \"8261054f-be78-422d-bd51-4ed9f33c3422\",\n \"value\" : \"9780262012102\"\n }, {\n \"identifierTypeId\" : \"c858e4f2-2b6b-4385-842b-60732ee14abb\",\n \"value\" : \"2003065165\"\n } ],\n \"contributorNames\" : [ {\n \"name\" : \"Antoniou, Grigoris\"\n }, {\n \"name\" : \"Van Harmelen, Frank\"\n } ],\n \"publication\" : [ {\n \"publisher\" : \"MIT Press\",\n \"place\" : \"Cambridge, Mass. \",\n \"dateOfPublication\" : \"c2004\",\n \"role\" : \"Publisher\"\n } ]\n },\n \"item\" : {\n \"barcode\" : \"90000\",\n \"location\" : {\n \"name\" : \"Annex\",\n \"libraryName\" : \"Datalogisk Institut\",\n \"code\" : \"KU/CC/DI/A\"\n },\n \"enumeration\" : \"\",\n \"status\" : \"Paged\",\n \"callNumber\" : \"TK5105.88815 . A58 2004 FT MEADE\",\n \"callNumberComponents\" : {\n \"callNumber\" : \"TK5105.88815 . A58 2004 FT MEADE\"\n }\n },\n \"requester\" : {\n \"lastName\" : \"rick\",\n \"firstName\" : \"psych\",\n \"barcode\" : \"123\",\n \"patronGroup\" : {\n \"id\" : \"3684a786-6671-4268-8ed0-9db82ebca60b\",\n \"group\" : \"staff\",\n \"desc\" : \"Staff Member\"\n },\n \"patronGroupId\" : \"3684a786-6671-4268-8ed0-9db82ebca60b\"\n },\n \"fulfillmentPreference\" : \"Hold Shelf\",\n \"pickupServicePointId\" : \"3a40852d-49fd-4df2-a1f9-6e2641a6e91f\",\n \"metadata\" : {\n \"createdDate\" : \"2024-03-07T13:54:13.484+00:00\",\n \"createdByUserId\" : \"5600bae3-4ca8-42dd-bef5-4502aaea6dc7\",\n \"updatedDate\" : \"2024-03-07T13:54:14.768+00:00\",\n \"updatedByUserId\" : \"5600bae3-4ca8-42dd-bef5-4502aaea6dc7\"\n },\n \"pickupServicePoint\" : {\n \"name\" : \"Circ Desk 1\",\n \"code\" : \"cd1\",\n \"discoveryDisplayName\" : \"Circulation Desk -- Hallway\",\n \"description\" : null,\n \"shelvingLagTime\" : null,\n \"pickupLocation\" : true\n }\n }", + "headers": { + "Content-Type": "application/json" + } + } + }, + { + "request": { + "method": "PUT", + "url": "/request-storage/requests/398501a2-5c97-4ba6-9ee7-d1cd6433cb98" + }, + "response": { + "status": 204, "headers": { "Content-Type": "application/json" } From 3c7e748535dd0b5da72bdfda79ecb2345b94f7f9 Mon Sep 17 00:00:00 2001 From: OleksandrVidinieiev <56632770+OleksandrVidinieiev@users.noreply.github.com> Date: Mon, 8 Jul 2024 11:18:24 +0300 Subject: [PATCH 25/40] MODDCB-111: Allow manual transaction status change CREATED -> OPEN (#85) * Lender transaction CREATED -> OPEN * MODDCB-111 Remove redundant test case (cherry picked from commit f3995021566e7b78cf619172df80a7cdf23ee26f) --- .../dcb/service/StatusProcessorService.java | 2 +- .../impl/LendingLibraryServiceImpl.java | 5 ++++- .../TransactionApiControllerTest.java | 20 +++++++++++++++++++ .../service/StatusProcessorServiceTest.java | 8 -------- 4 files changed, 25 insertions(+), 10 deletions(-) diff --git a/src/main/java/org/folio/dcb/service/StatusProcessorService.java b/src/main/java/org/folio/dcb/service/StatusProcessorService.java index f76b6f4c..583a1b6a 100644 --- a/src/main/java/org/folio/dcb/service/StatusProcessorService.java +++ b/src/main/java/org/folio/dcb/service/StatusProcessorService.java @@ -28,7 +28,7 @@ public List lendingChainProcessor(TransactionStatu StatusProcessor checkInProcessor = new StatusProcessor(ITEM_CHECKED_OUT, ITEM_CHECKED_IN, false, closeProcessor); StatusProcessor checkoutProcessor = new StatusProcessor(AWAITING_PICKUP, ITEM_CHECKED_OUT, false, checkInProcessor); StatusProcessor awaitingPickupProcessor = new StatusProcessor(OPEN, AWAITING_PICKUP, false, checkoutProcessor); - StatusProcessor openProcessor = new StatusProcessor(CREATED, OPEN, true, awaitingPickupProcessor); + StatusProcessor openProcessor = new StatusProcessor(CREATED, OPEN, false, awaitingPickupProcessor); startChain.setChain(openProcessor); var statuses = process(startChain, fromStatus, toStatus); log.info("lendingChainProcessor:: Following statuses needs to be transitioned {} ", statuses); diff --git a/src/main/java/org/folio/dcb/service/impl/LendingLibraryServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/LendingLibraryServiceImpl.java index 56d38bff..de65af3e 100644 --- a/src/main/java/org/folio/dcb/service/impl/LendingLibraryServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/LendingLibraryServiceImpl.java @@ -17,6 +17,7 @@ import org.springframework.stereotype.Service; import static org.folio.dcb.domain.dto.TransactionStatus.StatusEnum.AWAITING_PICKUP; +import static org.folio.dcb.domain.dto.TransactionStatus.StatusEnum.CREATED; import static org.folio.dcb.domain.dto.TransactionStatus.StatusEnum.ITEM_CHECKED_IN; import static org.folio.dcb.domain.dto.TransactionStatus.StatusEnum.ITEM_CHECKED_OUT; import static org.folio.dcb.domain.dto.TransactionStatus.StatusEnum.OPEN; @@ -61,7 +62,9 @@ public void updateTransactionStatus(TransactionEntity dcbTransaction, Transactio log.debug("updateTransactionStatus:: Updating dcbTransaction {} to status {} ", dcbTransaction, transactionStatus); var currentStatus = dcbTransaction.getStatus(); var requestedStatus = transactionStatus.getStatus(); - if (OPEN == currentStatus && AWAITING_PICKUP == requestedStatus) { + if (CREATED == currentStatus && OPEN == requestedStatus) { + updateTransactionEntity(dcbTransaction, requestedStatus); + } else if (OPEN == currentStatus && AWAITING_PICKUP == requestedStatus) { log.info("updateTransactionStatus:: Checking in item by barcode: {} ", dcbTransaction.getItemBarcode()); circulationService.checkInByBarcode(dcbTransaction); updateTransactionEntity(dcbTransaction, requestedStatus); diff --git a/src/test/java/org/folio/dcb/controller/TransactionApiControllerTest.java b/src/test/java/org/folio/dcb/controller/TransactionApiControllerTest.java index 029db24a..59cbbbc2 100644 --- a/src/test/java/org/folio/dcb/controller/TransactionApiControllerTest.java +++ b/src/test/java/org/folio/dcb/controller/TransactionApiControllerTest.java @@ -591,6 +591,26 @@ void transactionStatusUpdateFromCreatedToItemClosed() throws Exception { .andExpect(jsonPath("$.status").value("CLOSED")); } + @Test + void lenderTransactionStatusUpdateFromCreatedToOpen() throws Exception { + var transactionID = UUID.randomUUID().toString(); + var dcbTransaction = createTransactionEntity(); + dcbTransaction.setStatus(TransactionStatus.StatusEnum.CREATED); + dcbTransaction.setRole(LENDER); + dcbTransaction.setId(transactionID); + + systemUserScopedExecutionService.executeAsyncSystemUserScoped(TENANT, () -> transactionRepository.save(dcbTransaction)); + + this.mockMvc.perform( + put("/transactions/" + transactionID + "/status") + .content(asJsonString(createTransactionStatus(TransactionStatus.StatusEnum.OPEN))) + .headers(defaultHeaders()) + .contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.status").value("OPEN")); + } + @Test void transactionStatusUpdateFromItemCheckedOutToItemCheckedIn() throws Exception { var transactionID = UUID.randomUUID().toString(); diff --git a/src/test/java/org/folio/dcb/service/StatusProcessorServiceTest.java b/src/test/java/org/folio/dcb/service/StatusProcessorServiceTest.java index 30a527a9..8b9d2bb1 100644 --- a/src/test/java/org/folio/dcb/service/StatusProcessorServiceTest.java +++ b/src/test/java/org/folio/dcb/service/StatusProcessorServiceTest.java @@ -45,14 +45,6 @@ void lendingChainProcessorTest() { @Test void lendingChainProcessorErrorTest() { - assertThrows(StatusException.class, () -> statusProcessorService.lendingChainProcessor(TransactionStatus.StatusEnum.CREATED, TransactionStatus.StatusEnum.OPEN)); - - assertThrows(StatusException.class, () -> statusProcessorService.lendingChainProcessor(TransactionStatus.StatusEnum.CREATED, TransactionStatus.StatusEnum.AWAITING_PICKUP)); - - assertThrows(StatusException.class, () -> statusProcessorService.lendingChainProcessor(TransactionStatus.StatusEnum.CREATED, TransactionStatus.StatusEnum.ITEM_CHECKED_OUT)); - - assertThrows(StatusException.class, () -> statusProcessorService.lendingChainProcessor(TransactionStatus.StatusEnum.CREATED, TransactionStatus.StatusEnum.ITEM_CHECKED_IN)); - assertThrows(StatusException.class, () -> statusProcessorService.lendingChainProcessor(TransactionStatus.StatusEnum.CREATED, TransactionStatus.StatusEnum.CLOSED)); assertThrows(StatusException.class, () -> statusProcessorService.lendingChainProcessor(TransactionStatus.StatusEnum.CREATED, TransactionStatus.StatusEnum.CREATED)); From 73436cc1f25cb6f83ee38e422328c6c526bcffe3 Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Wed, 7 Aug 2024 15:31:08 +0500 Subject: [PATCH 26/40] MODDCB-117 ecsRequestPhase to moddcb circulation request schema (cherry picked from commit 13a6f72160ea1db3d088b06aba4a1b03beac3f6d) --- .../dcb/service/impl/EcsRequestTransactionsServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/folio/dcb/service/impl/EcsRequestTransactionsServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/EcsRequestTransactionsServiceImpl.java index 0b6daacd..b2ace3d9 100644 --- a/src/main/java/org/folio/dcb/service/impl/EcsRequestTransactionsServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/EcsRequestTransactionsServiceImpl.java @@ -102,7 +102,7 @@ private void createBorrowerEcsRequestTransactions(String ecsRequestTransactionsI .barcode(item.getBarcode()) .build()); circulationRequest.setHoldingsRecordId(UUID.fromString(item.getHoldingsRecordId())); - requestService.updateCirculationRequest(circulationRequest); + //requestService.updateCirculationRequest(circulationRequest); dcbTransaction.setPatron(DcbPatron.builder() .id(String.valueOf(circulationRequest.getRequesterId())) .barcode(circulationRequest.getRequester().getBarcode()) From 4ff843bb4cdb7e76947d674039b27e38038091f6 Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Wed, 7 Aug 2024 19:18:10 +0500 Subject: [PATCH 27/40] MODDCB-117 ecsRequestPhase to moddcb circulation request schema (cherry picked from commit 4b22c5e12a8f581c04c726f07c161c3686a664ec) --- .../dcb/service/impl/EcsRequestTransactionsServiceImpl.java | 2 +- .../resources/swagger.api/schemas/CirculationRequest.yaml | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/folio/dcb/service/impl/EcsRequestTransactionsServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/EcsRequestTransactionsServiceImpl.java index b2ace3d9..0b6daacd 100644 --- a/src/main/java/org/folio/dcb/service/impl/EcsRequestTransactionsServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/EcsRequestTransactionsServiceImpl.java @@ -102,7 +102,7 @@ private void createBorrowerEcsRequestTransactions(String ecsRequestTransactionsI .barcode(item.getBarcode()) .build()); circulationRequest.setHoldingsRecordId(UUID.fromString(item.getHoldingsRecordId())); - //requestService.updateCirculationRequest(circulationRequest); + requestService.updateCirculationRequest(circulationRequest); dcbTransaction.setPatron(DcbPatron.builder() .id(String.valueOf(circulationRequest.getRequesterId())) .barcode(circulationRequest.getRequester().getBarcode()) diff --git a/src/main/resources/swagger.api/schemas/CirculationRequest.yaml b/src/main/resources/swagger.api/schemas/CirculationRequest.yaml index d8f437d1..65f9f18a 100644 --- a/src/main/resources/swagger.api/schemas/CirculationRequest.yaml +++ b/src/main/resources/swagger.api/schemas/CirculationRequest.yaml @@ -12,6 +12,12 @@ CirculationRequest: - Hold - Recall - Page + ecsRequestPhase: + description: Stage in ECS request process, absence of this field means this is a single-tenant request, + type: string, + enum: + - Primary + - Secondary requestLevel: description: Level of the request - Item or Title type: string From bed4ab835eb132e6f0654a9736a9ac205cfeb4a8 Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Thu, 8 Aug 2024 19:06:08 +0500 Subject: [PATCH 28/40] MODDCB-117 ecsRequestPhase to moddcb circulation request schema (cherry picked from commit 53423e7ea1abb6707edd553b4fb2f2291403076e) --- src/main/java/org/folio/dcb/service/impl/BaseLibraryService.java | 1 + .../org/folio/dcb/service/impl/BorrowingLibraryServiceImpl.java | 1 + .../org/folio/dcb/service/impl/LendingLibraryServiceImpl.java | 1 + 3 files changed, 3 insertions(+) diff --git a/src/main/java/org/folio/dcb/service/impl/BaseLibraryService.java b/src/main/java/org/folio/dcb/service/impl/BaseLibraryService.java index dc06a555..95a773ea 100644 --- a/src/main/java/org/folio/dcb/service/impl/BaseLibraryService.java +++ b/src/main/java/org/folio/dcb/service/impl/BaseLibraryService.java @@ -97,6 +97,7 @@ public void updateTransactionStatus(TransactionEntity dcbTransaction, Transactio } else if(CANCELLED == requestedStatus) { log.info("updateTransactionStatus:: Cancelling transaction with id: {} for Borrower/Pickup role", dcbTransaction.getId()); cancelTransactionRequest(dcbTransaction); + updateTransactionEntity(dcbTransaction, requestedStatus); } else { String errorMessage = String.format("updateTransactionStatus:: status update from %s to %s is not implemented", currentStatus, requestedStatus); log.warn(errorMessage); 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 798fea01..fb65913e 100644 --- a/src/main/java/org/folio/dcb/service/impl/BorrowingLibraryServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/BorrowingLibraryServiceImpl.java @@ -63,6 +63,7 @@ public void updateTransactionStatus(TransactionEntity dcbTransaction, Transactio } else if(CANCELLED == requestedStatus) { log.info("updateTransactionStatus:: Cancelling transaction with id: {} for Borrower role", dcbTransaction.getId()); libraryService.cancelTransactionRequest(dcbTransaction); + updateTransactionEntity(dcbTransaction, requestedStatus); } else { String error = String.format("updateTransactionStatus:: status update from %s to %s is not implemented", currentStatus, requestedStatus); log.warn(error); diff --git a/src/main/java/org/folio/dcb/service/impl/LendingLibraryServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/LendingLibraryServiceImpl.java index de65af3e..6c2bf311 100644 --- a/src/main/java/org/folio/dcb/service/impl/LendingLibraryServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/LendingLibraryServiceImpl.java @@ -77,6 +77,7 @@ public void updateTransactionStatus(TransactionEntity dcbTransaction, Transactio } else if(CANCELLED == requestedStatus) { log.info("updateTransactionStatus:: Cancelling transaction with id: {} for Lender role", dcbTransaction.getId()); baseLibraryService.cancelTransactionRequest(dcbTransaction); + updateTransactionEntity(dcbTransaction, requestedStatus); } else { String errorMessage = String.format("updateTransactionStatus:: status update from %s to %s is not implemented", currentStatus, requestedStatus); From f8618a7941d97e3ea3f948e40299e6071f88c316 Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Fri, 9 Aug 2024 16:05:06 +0500 Subject: [PATCH 29/40] MODDCB-117 ecsRequestPhase to moddcb circulation request schema (cherry picked from commit 7c6bd0667981ad7c0201f7ea7d29691c61294f0e) --- .../resources/swagger.api/schemas/CirculationRequest.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/swagger.api/schemas/CirculationRequest.yaml b/src/main/resources/swagger.api/schemas/CirculationRequest.yaml index 65f9f18a..f0aeb06d 100644 --- a/src/main/resources/swagger.api/schemas/CirculationRequest.yaml +++ b/src/main/resources/swagger.api/schemas/CirculationRequest.yaml @@ -13,8 +13,8 @@ CirculationRequest: - Recall - Page ecsRequestPhase: - description: Stage in ECS request process, absence of this field means this is a single-tenant request, - type: string, + description: Stage in ECS request process, absence of this field means this is a single-tenant request + type: string enum: - Primary - Secondary From 1d6ff53ecec963fc7762575f8da74739e0d2083f Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Fri, 9 Aug 2024 16:57:26 +0500 Subject: [PATCH 30/40] MODDCB-117 ecsRequestPhase to moddcb circulation request schema (cherry picked from commit b74b95a1a002d88f58bd0c94bd890da3312f19d3) --- .../org/folio/dcb/listener/kafka/CirculationEventListener.java | 2 +- .../java/org/folio/dcb/service/impl/BaseLibraryService.java | 1 - .../org/folio/dcb/service/impl/BorrowingLibraryServiceImpl.java | 1 - .../org/folio/dcb/service/impl/LendingLibraryServiceImpl.java | 1 - 4 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/main/java/org/folio/dcb/listener/kafka/CirculationEventListener.java b/src/main/java/org/folio/dcb/listener/kafka/CirculationEventListener.java index 0011f62d..49069a2a 100644 --- a/src/main/java/org/folio/dcb/listener/kafka/CirculationEventListener.java +++ b/src/main/java/org/folio/dcb/listener/kafka/CirculationEventListener.java @@ -71,7 +71,7 @@ public void handleLoanEvent(String data, MessageHeaders messageHeaders) { public void handleRequestEvent(String data, MessageHeaders messageHeaders) { String tenantId = getHeaderValue(messageHeaders, XOkapiHeaders.TENANT, null).get(0); var eventData = parseRequestEvent(data); - if (Objects.nonNull(eventData) && eventData.isDcb() ) { + if (Objects.nonNull(eventData)) { log.debug("dcb flow for a request event"); String requestId = eventData.getRequestId(); if (Objects.nonNull(requestId)) { diff --git a/src/main/java/org/folio/dcb/service/impl/BaseLibraryService.java b/src/main/java/org/folio/dcb/service/impl/BaseLibraryService.java index 95a773ea..dc06a555 100644 --- a/src/main/java/org/folio/dcb/service/impl/BaseLibraryService.java +++ b/src/main/java/org/folio/dcb/service/impl/BaseLibraryService.java @@ -97,7 +97,6 @@ public void updateTransactionStatus(TransactionEntity dcbTransaction, Transactio } else if(CANCELLED == requestedStatus) { log.info("updateTransactionStatus:: Cancelling transaction with id: {} for Borrower/Pickup role", dcbTransaction.getId()); cancelTransactionRequest(dcbTransaction); - updateTransactionEntity(dcbTransaction, requestedStatus); } else { String errorMessage = String.format("updateTransactionStatus:: status update from %s to %s is not implemented", currentStatus, requestedStatus); log.warn(errorMessage); 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 fb65913e..798fea01 100644 --- a/src/main/java/org/folio/dcb/service/impl/BorrowingLibraryServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/BorrowingLibraryServiceImpl.java @@ -63,7 +63,6 @@ public void updateTransactionStatus(TransactionEntity dcbTransaction, Transactio } else if(CANCELLED == requestedStatus) { log.info("updateTransactionStatus:: Cancelling transaction with id: {} for Borrower role", dcbTransaction.getId()); libraryService.cancelTransactionRequest(dcbTransaction); - updateTransactionEntity(dcbTransaction, requestedStatus); } else { String error = String.format("updateTransactionStatus:: status update from %s to %s is not implemented", currentStatus, requestedStatus); log.warn(error); diff --git a/src/main/java/org/folio/dcb/service/impl/LendingLibraryServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/LendingLibraryServiceImpl.java index 6c2bf311..de65af3e 100644 --- a/src/main/java/org/folio/dcb/service/impl/LendingLibraryServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/LendingLibraryServiceImpl.java @@ -77,7 +77,6 @@ public void updateTransactionStatus(TransactionEntity dcbTransaction, Transactio } else if(CANCELLED == requestedStatus) { log.info("updateTransactionStatus:: Cancelling transaction with id: {} for Lender role", dcbTransaction.getId()); baseLibraryService.cancelTransactionRequest(dcbTransaction); - updateTransactionEntity(dcbTransaction, requestedStatus); } else { String errorMessage = String.format("updateTransactionStatus:: status update from %s to %s is not implemented", currentStatus, requestedStatus); From 7da92e8a9239f5ee9d8bebfd4fb08f8809e653aa Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Fri, 9 Aug 2024 17:50:25 +0500 Subject: [PATCH 31/40] MODDCB-117 ecsRequestPhase to moddcb circulation request schema (cherry picked from commit ac0d88ca895ec533316a3b69234848472eb2b86c) --- .../dcb/listener/CirculationRequestEventListenerTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/org/folio/dcb/listener/CirculationRequestEventListenerTest.java b/src/test/java/org/folio/dcb/listener/CirculationRequestEventListenerTest.java index 37f1ccd1..ba2ac32f 100644 --- a/src/test/java/org/folio/dcb/listener/CirculationRequestEventListenerTest.java +++ b/src/test/java/org/folio/dcb/listener/CirculationRequestEventListenerTest.java @@ -91,7 +91,7 @@ void handleCancelRequestTest() { MessageHeaders messageHeaders = getMessageHeaders(); when(transactionRepository.findTransactionByRequestIdAndStatusNotInClosed(any())).thenReturn(Optional.of(transactionEntity)); eventListener.handleRequestEvent(REQUEST_CANCEL_EVENT_SAMPLE, messageHeaders); - Mockito.verify(transactionRepository, times(0)).save(any()); + Mockito.verify(transactionRepository, times(1)).save(any()); } @Test @@ -118,7 +118,7 @@ void handleOpenRequestTest() { when(circulationItemService.fetchItemById(anyString())).thenReturn(circulationItem); MessageHeaders messageHeaders = getMessageHeaders(); eventListener.handleRequestEvent(CHECK_IN_TRANSIT_EVENT_SAMPLE, messageHeaders); - Mockito.verify(transactionRepository, times(0)).save(any()); + Mockito.verify(transactionRepository, times(1)).save(any()); } @Test From b1d2af6fe33eb11ae849eb200dcfb3a81010a541 Mon Sep 17 00:00:00 2001 From: Roman_Barannyk Date: Fri, 30 Aug 2024 12:45:49 +0300 Subject: [PATCH 32/40] MODTLR-62 add position to request schema (cherry picked from commit 209dfb51f6f6bd3d13cdfee3e810d685b4e2af98) --- src/main/resources/swagger.api/schemas/CirculationRequest.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/resources/swagger.api/schemas/CirculationRequest.yaml b/src/main/resources/swagger.api/schemas/CirculationRequest.yaml index f0aeb06d..a8fb0c56 100644 --- a/src/main/resources/swagger.api/schemas/CirculationRequest.yaml +++ b/src/main/resources/swagger.api/schemas/CirculationRequest.yaml @@ -50,6 +50,9 @@ CirculationRequest: status: description: Status of the request type: string + position: + description: Position of the request in the queue + type: integer cancellationReasonId: description: The id of the request reason type: string From fd8d91f689fbe31048cc2310a8e1eed12e12d8a7 Mon Sep 17 00:00:00 2001 From: Oleksandr Vidinieiev Date: Mon, 4 Nov 2024 13:00:28 +0200 Subject: [PATCH 33/40] MODDCB-124 Remove duplicate permissions (cherry picked from commit 9f41d8f212c2d7b812684ffef900fe06dfc54214) --- descriptors/ModuleDescriptor-template.json | 1 - 1 file changed, 1 deletion(-) diff --git a/descriptors/ModuleDescriptor-template.json b/descriptors/ModuleDescriptor-template.json index 77aa1efd..925ca428 100644 --- a/descriptors/ModuleDescriptor-template.json +++ b/descriptors/ModuleDescriptor-template.json @@ -232,7 +232,6 @@ "dcb.transactions.put", "dcb.transactions.get", "dcb.transactions.collection.get", - "dcb.transactions.get", "dcb.ecs-request.transactions.post" ] }, From 20322f6c4504d8c66502132d1629da3614c9a7ec Mon Sep 17 00:00:00 2001 From: Oleksandr Vidinieiev Date: Mon, 4 Nov 2024 13:16:44 +0200 Subject: [PATCH 34/40] MODDCB-124 Fix indentation (cherry picked from commit 0cafe091e9aedc731eb2a5c93b46187065280d7d) --- ...sRequestTransactionsApiControllerTest.java | 49 ++++++++++--------- 1 file changed, 26 insertions(+), 23 deletions(-) diff --git a/src/test/java/org/folio/dcb/controller/EcsRequestTransactionsApiControllerTest.java b/src/test/java/org/folio/dcb/controller/EcsRequestTransactionsApiControllerTest.java index bb55b672..3b30281f 100644 --- a/src/test/java/org/folio/dcb/controller/EcsRequestTransactionsApiControllerTest.java +++ b/src/test/java/org/folio/dcb/controller/EcsRequestTransactionsApiControllerTest.java @@ -37,20 +37,20 @@ void createLendingEcsRequestTest() throws Exception { removeExistedTransactionFromDbIfSoExists(); this.mockMvc.perform( - post("/ecs-request-transactions/" + CIRCULATION_REQUEST_ID) - .content(asJsonString(createLendingEcsRequestTransactionByRole())) - .headers(defaultHeaders()) - .contentType(MediaType.APPLICATION_JSON) - .accept(MediaType.APPLICATION_JSON)) + post("/ecs-request-transactions/" + CIRCULATION_REQUEST_ID) + .content(asJsonString(createLendingEcsRequestTransactionByRole())) + .headers(defaultHeaders()) + .contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON)) .andExpect(status().isCreated()); //Trying to create another transaction with same transaction id this.mockMvc.perform( - post("/ecs-request-transactions/" + CIRCULATION_REQUEST_ID) - .content(asJsonString(createLendingEcsRequestTransactionByRole())) - .headers(defaultHeaders()) - .contentType(MediaType.APPLICATION_JSON) - .accept(MediaType.APPLICATION_JSON)) + post("/ecs-request-transactions/" + CIRCULATION_REQUEST_ID) + .content(asJsonString(createLendingEcsRequestTransactionByRole())) + .headers(defaultHeaders()) + .contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON)) .andExpectAll(status().is4xxClientError(), jsonPath("$.errors[0].code", is("DUPLICATE_ERROR"))); @@ -62,8 +62,11 @@ void createLendingEcsRequestTest() throws Exception { .findLatestTransactionAuditEntityByDcbTransactionId(CIRCULATION_REQUEST_ID) .orElse(null); Assertions.assertNotNull(auditExisting); - Assertions.assertNotEquals(TRANSACTION_AUDIT_DUPLICATE_ERROR_ACTION, auditExisting.getAction()); - Assertions.assertNotEquals(DUPLICATE_ERROR_TRANSACTION_ID, auditExisting.getTransactionId()); } + Assertions.assertNotEquals(TRANSACTION_AUDIT_DUPLICATE_ERROR_ACTION, + auditExisting.getAction()); + Assertions.assertNotEquals(DUPLICATE_ERROR_TRANSACTION_ID, + auditExisting.getTransactionId()); + } ); } @@ -72,11 +75,11 @@ void createBorrowingEcsRequestTest() throws Exception { removeExistedTransactionFromDbIfSoExists(); this.mockMvc.perform( - post("/ecs-request-transactions/" + CIRCULATION_REQUEST_ID) - .content(asJsonString(createBorrowingEcsRequestTransactionByRole())) - .headers(defaultHeaders()) - .contentType(MediaType.APPLICATION_JSON) - .accept(MediaType.APPLICATION_JSON)) + post("/ecs-request-transactions/" + CIRCULATION_REQUEST_ID) + .content(asJsonString(createBorrowingEcsRequestTransactionByRole())) + .headers(defaultHeaders()) + .contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON)) .andExpect(status().isCreated()); } @@ -85,17 +88,17 @@ void checkErrorStatusForInvalidRequest() throws Exception { DcbTransaction dcbTransaction = createLendingEcsRequestTransactionByRole(); dcbTransaction.setRequestId(UUID.randomUUID().toString()); this.mockMvc.perform( - post("/ecs-request-transactions/" + CIRCULATION_REQUEST_ID) - .content(asJsonString(dcbTransaction)) - .headers(defaultHeaders()) - .contentType(MediaType.APPLICATION_JSON) - .accept(MediaType.APPLICATION_JSON)) + post("/ecs-request-transactions/" + CIRCULATION_REQUEST_ID) + .content(asJsonString(dcbTransaction)) + .headers(defaultHeaders()) + .contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON)) .andExpectAll(status().is4xxClientError()); } private void removeExistedTransactionFromDbIfSoExists() { systemUserScopedExecutionService.executeAsyncSystemUserScoped(TENANT, () -> { - if (transactionRepository.existsById(CIRCULATION_REQUEST_ID)){ + if (transactionRepository.existsById(CIRCULATION_REQUEST_ID)) { transactionRepository.deleteById(CIRCULATION_REQUEST_ID); } }); From 7de98541be7e2611107d824287cd10cb63df140b Mon Sep 17 00:00:00 2001 From: Oleksandr Vidinieiev Date: Mon, 4 Nov 2024 13:59:21 +0200 Subject: [PATCH 35/40] MODDCB-124 Fix formatting (cherry picked from commit 77722bc3218e855809fcc8faca6bd8345d29a3a2) --- .../EcsRequestTransactionsApiController.java | 1 + .../impl/EcsRequestTransactionsServiceImpl.java | 5 ++++- .../dcb/controller/TransactionApiControllerTest.java | 10 +++++----- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/folio/dcb/controller/EcsRequestTransactionsApiController.java b/src/main/java/org/folio/dcb/controller/EcsRequestTransactionsApiController.java index 8b86c9f7..e85b53b7 100644 --- a/src/main/java/org/folio/dcb/controller/EcsRequestTransactionsApiController.java +++ b/src/main/java/org/folio/dcb/controller/EcsRequestTransactionsApiController.java @@ -22,6 +22,7 @@ public class EcsRequestTransactionsApiController implements EcsRequestTransactio @Override public ResponseEntity createEcsRequestTransactions( String ecsRequestTransactionId, DcbTransaction dcbTransaction) { + log.info("createEcsRequestTransactions:: creating ECS Request Transaction {} with ID {}", dcbTransaction, ecsRequestTransactionId); TransactionStatusResponse transactionStatusResponse; diff --git a/src/main/java/org/folio/dcb/service/impl/EcsRequestTransactionsServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/EcsRequestTransactionsServiceImpl.java index 0b6daacd..722660b2 100644 --- a/src/main/java/org/folio/dcb/service/impl/EcsRequestTransactionsServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/EcsRequestTransactionsServiceImpl.java @@ -39,6 +39,7 @@ public class EcsRequestTransactionsServiceImpl implements EcsRequestTransactions @Override public TransactionStatusResponse createEcsRequestTransactions(String ecsRequestTransactionsId, DcbTransaction dcbTransaction) { + log.info("createEcsRequestTransactions:: creating new transaction request for role {} ", dcbTransaction.getRole()); checkEcsRequestTransactionExistsAndThrow(ecsRequestTransactionsId); @@ -60,7 +61,7 @@ public TransactionStatusResponse createEcsRequestTransactions(String ecsRequestT .patron(dcbTransaction.getPatron()) .build(); } else { - throw new IllegalArgumentException("Unable to create ecs transaction as could not find open request"); + throw new IllegalArgumentException("Unable to create ECS transaction as could not find open request"); } } @@ -74,6 +75,7 @@ private void checkEcsRequestTransactionExistsAndThrow(String dcbTransactionId) { private void createLenderEcsRequestTransactions(String ecsRequestTransactionsId, DcbTransaction dcbTransaction, CirculationRequest circulationRequest) { + dcbTransaction.setItem(DcbItem.builder() .id(String.valueOf(circulationRequest.getItemId())) .barcode(circulationRequest.getItem().getBarcode()) @@ -91,6 +93,7 @@ private void createLenderEcsRequestTransactions(String ecsRequestTransactionsId, private void createBorrowerEcsRequestTransactions(String ecsRequestTransactionsId, DcbTransaction dcbTransaction, CirculationRequest circulationRequest) { + var itemVirtual = dcbTransaction.getItem(); if (itemVirtual == null) { throw new IllegalArgumentException("Item is required for borrower transaction"); diff --git a/src/test/java/org/folio/dcb/controller/TransactionApiControllerTest.java b/src/test/java/org/folio/dcb/controller/TransactionApiControllerTest.java index 59cbbbc2..5edbc7ff 100644 --- a/src/test/java/org/folio/dcb/controller/TransactionApiControllerTest.java +++ b/src/test/java/org/folio/dcb/controller/TransactionApiControllerTest.java @@ -602,11 +602,11 @@ void lenderTransactionStatusUpdateFromCreatedToOpen() throws Exception { systemUserScopedExecutionService.executeAsyncSystemUserScoped(TENANT, () -> transactionRepository.save(dcbTransaction)); this.mockMvc.perform( - put("/transactions/" + transactionID + "/status") - .content(asJsonString(createTransactionStatus(TransactionStatus.StatusEnum.OPEN))) - .headers(defaultHeaders()) - .contentType(MediaType.APPLICATION_JSON) - .accept(MediaType.APPLICATION_JSON)) + put("/transactions/" + transactionID + "/status") + .content(asJsonString(createTransactionStatus(TransactionStatus.StatusEnum.OPEN))) + .headers(defaultHeaders()) + .contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(jsonPath("$.status").value("OPEN")); } From 259c6004baaa56f450993a517550832f1df2920c Mon Sep 17 00:00:00 2001 From: alexanderkurash Date: Mon, 2 Dec 2024 13:30:27 +0200 Subject: [PATCH 36/40] MODDCB-153 Post-cherry-pick fix --- descriptors/ModuleDescriptor-template.json | 8 -------- 1 file changed, 8 deletions(-) diff --git a/descriptors/ModuleDescriptor-template.json b/descriptors/ModuleDescriptor-template.json index 925ca428..1b52f2b1 100644 --- a/descriptors/ModuleDescriptor-template.json +++ b/descriptors/ModuleDescriptor-template.json @@ -255,14 +255,6 @@ "displayName": "get updated transaction detail list", "description": "get list of transaction updated between a given query range" }, - { - "permissionName": "ecs-request.all", - "displayName": "ECS request - all permissions", - "description": "All permissions for ECS request module", - "subPermissions": [ - "ecs-request.transactions.post" - ] - }, { "permissionName": "dcb.ecs-request.transactions.post", "displayName": "creates new ECS request transaction", From 7ab54f0d2a7f8a9a8284099e76b017aaebfb0633 Mon Sep 17 00:00:00 2001 From: alexanderkurash Date: Mon, 2 Dec 2024 13:31:09 +0200 Subject: [PATCH 37/40] Update NEWS --- NEWS.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/NEWS.md b/NEWS.md index 18d5c1f0..a4ffae8b 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,10 @@ +## v1.2.3 2024-12-02 +* MODDCB-90: Accept existing circulation request ID +* MODDCB-105: Accept existing circulation request ID (borrowing transaction) +* MODDCB-111: Allow manual transaction status change from CREATED to OPEN +* MODDCB-117: Add ecsRequestPhase to the circulation request schema +* MODDCB-124: Merge esc-tlr feature branch into master + ## v1.2.2 2024-11-20 * MODDCB-145: Issue with spaces in service point name From 9b20d5a15e525017bdac8733384f3e9b397e275b Mon Sep 17 00:00:00 2001 From: alexanderkurash Date: Mon, 2 Dec 2024 13:36:58 +0200 Subject: [PATCH 38/40] MODDCB-153 Post-cherry-pick fix #2 --- .../org/folio/dcb/service/impl/TransactionsServiceImpl.java | 2 -- 1 file changed, 2 deletions(-) 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 abd1ab3f..64b41d20 100644 --- a/src/main/java/org/folio/dcb/service/impl/TransactionsServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/TransactionsServiceImpl.java @@ -9,7 +9,6 @@ import org.folio.dcb.domain.entity.TransactionEntity; import org.folio.dcb.domain.mapper.TransactionMapper; import org.folio.dcb.exception.ResourceAlreadyExistException; -import org.folio.dcb.exception.ResourceAlreadyExistException; import org.folio.dcb.exception.StatusException; import org.folio.dcb.repository.TransactionAuditRepository; import org.folio.dcb.repository.TransactionRepository; @@ -40,7 +39,6 @@ public class TransactionsServiceImpl implements TransactionsService { private final StatusProcessorService statusProcessorService; private final TransactionMapper transactionMapper; private final TransactionAuditRepository transactionAuditRepository; - private final BaseTransactionsService baseTransactionsService; @Override public TransactionStatusResponse createCirculationRequest(String dcbTransactionId, DcbTransaction dcbTransaction) { From b8ca4be2f449962d024b0e574a28e081db96b0d5 Mon Sep 17 00:00:00 2001 From: alexanderkurash Date: Mon, 2 Dec 2024 13:39:32 +0200 Subject: [PATCH 39/40] [maven-release-plugin] prepare release v1.2.3 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 54fe3d4b..dd2ccad6 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ org.folio mod-dcb mod-dcb - 1.2.3-SNAPSHOT + 1.2.3 Manage DCB related transactions in folio jar @@ -405,7 +405,7 @@ https://github.com/folio-org/${project.artifactId} scm:git:git://github.com/folio-org/${project.artifactId}.git scm:git:git@github.com:folio-org/${project.artifactId}.git - HEAD + v1.2.3 From bccd028a31688e8015739e57917ffd3f3cb1f603 Mon Sep 17 00:00:00 2001 From: alexanderkurash Date: Mon, 2 Dec 2024 13:39:32 +0200 Subject: [PATCH 40/40] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index dd2ccad6..8649c093 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ org.folio mod-dcb mod-dcb - 1.2.3 + 1.2.4-SNAPSHOT Manage DCB related transactions in folio jar @@ -405,7 +405,7 @@ https://github.com/folio-org/${project.artifactId} scm:git:git://github.com/folio-org/${project.artifactId}.git scm:git:git@github.com:folio-org/${project.artifactId}.git - v1.2.3 + HEAD