From 137f270280081cf0c44a4f4af6d6c6fd2dd149c2 Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Sun, 18 Feb 2024 09:12:50 +0600 Subject: [PATCH 01/23] MODDCB-90 Accept existing circulation request ID --- .../EcsTlrTransactionApiController.java | 34 +++++++++++++++++ .../service/EcsTlrTransactionsService.java | 8 ++++ .../service/impl/BaseTransactionsService.java | 21 +++++++++++ .../impl/EcsTlrTransactionsServiceImpl.java | 37 +++++++++++++++++++ .../service/impl/TransactionsServiceImpl.java | 10 +---- .../swagger.api/dcb_transaction.yaml | 21 +++++++++++ .../swagger.api/schemas/dcbTransaction.yaml | 3 ++ 7 files changed, 126 insertions(+), 8 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 6282aefb..eaf1f9c5 100644 --- a/src/main/java/org/folio/dcb/service/impl/TransactionsServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/TransactionsServiceImpl.java @@ -6,7 +6,6 @@ import org.folio.dcb.domain.dto.TransactionStatus; import org.folio.dcb.domain.dto.TransactionStatusResponse; import org.folio.dcb.domain.entity.TransactionEntity; -import org.folio.dcb.exception.ResourceAlreadyExistException; import org.folio.dcb.exception.StatusException; import org.folio.dcb.repository.TransactionRepository; import org.folio.dcb.service.LibraryService; @@ -31,11 +30,12 @@ public class TransactionsServiceImpl implements TransactionsService { private final LibraryService borrowingLibraryService; private final TransactionRepository transactionRepository; private final StatusProcessorService statusProcessorService; + 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); @@ -98,10 +98,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 3a6c44a5..27b21fec 100644 --- a/src/main/resources/swagger.api/dcb_transaction.yaml +++ b/src/main/resources/swagger.api/dcb_transaction.yaml @@ -57,6 +57,27 @@ 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' + components: requestBodies: TransactionStatusBody: 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 70c5f5e6c28fbe0160079fa04a2bbbc4dff4c192 Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Tue, 20 Feb 2024 19:11:59 +0600 Subject: [PATCH 02/23] MODDCB-90 Accept existing circulation request ID --- descriptors/ModuleDescriptor-template.json | 11 +++++++++++ .../controller/EcsTlrTransactionApiController.java | 13 +++++++------ .../dcb/service/impl/BaseTransactionsService.java | 1 + src/main/resources/swagger.api/dcb_transaction.yaml | 11 ++++++++--- 4 files changed, 27 insertions(+), 9 deletions(-) diff --git a/descriptors/ModuleDescriptor-template.json b/descriptors/ModuleDescriptor-template.json index bf5d79ba..6117dfae 100644 --- a/descriptors/ModuleDescriptor-template.json +++ b/descriptors/ModuleDescriptor-template.json @@ -122,6 +122,17 @@ "circulation.check-out-by-barcode.post", "circulation.check-in-by-barcode.post" ] + }, + { + "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 27b21fec..669d2e7e 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: @@ -77,7 +77,6 @@ paths: $ref: '#/components/responses/Conflict' '500': $ref: '#/components/responses/InternalServerError' - components: requestBodies: TransactionStatusBody: @@ -148,6 +147,12 @@ components: schema: type: string required: true + ecsTlrTransactionId: + in: path + name: ecsTlrTransactionId + schema: + type: string + required: true schemas: InventoryItem: $ref: 'schemas/InventoryItem.yaml#/InventoryItem' From 62094faf8ea3f869368d361bd51e5304e9facbf6 Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Fri, 23 Feb 2024 17:12:19 +0600 Subject: [PATCH 03/23] MODDCB-90 Accept existing circulation request ID --- .../EcsTlrTransactionApiController.java | 6 ++--- .../service/impl/BaseTransactionsService.java | 22 ------------------- .../impl/EcsTlrTransactionsServiceImpl.java | 13 +++++++++-- .../service/impl/TransactionsServiceImpl.java | 11 ++++++++-- .../swagger.api/dcb_transaction.yaml | 4 ++-- 5 files changed, 25 insertions(+), 31 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 eaf1f9c5..338af6df 100644 --- a/src/main/java/org/folio/dcb/service/impl/TransactionsServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/TransactionsServiceImpl.java @@ -6,6 +6,7 @@ import org.folio.dcb.domain.dto.TransactionStatus; import org.folio.dcb.domain.dto.TransactionStatusResponse; import org.folio.dcb.domain.entity.TransactionEntity; +import org.folio.dcb.exception.ResourceAlreadyExistException; import org.folio.dcb.exception.StatusException; import org.folio.dcb.repository.TransactionRepository; import org.folio.dcb.service.LibraryService; @@ -30,12 +31,11 @@ public class TransactionsServiceImpl implements TransactionsService { private final LibraryService borrowingLibraryService; private final TransactionRepository transactionRepository; private final StatusProcessorService statusProcessorService; - private final BaseTransactionsService baseTransactionsService; @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); @@ -98,4 +98,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 669d2e7e..28f9b716 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 c4c8a669d85960e49157d6a14e9d7f50d588f72a Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Mon, 4 Mar 2024 17:59:51 +0600 Subject: [PATCH 04/23] MODDCB-90 Accept existing circulation request ID --- 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 6117dfae..1f9803fe 100644 --- a/descriptors/ModuleDescriptor-template.json +++ b/descriptors/ModuleDescriptor-template.json @@ -127,9 +127,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 121427f52e403b6b937e4cc6e1d21e0b51f7dba2 Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Mon, 4 Mar 2024 18:07:42 +0600 Subject: [PATCH 05/23] MODDCB-90 Accept existing circulation request ID --- .../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 338af6df..d4521577 100644 --- a/src/main/java/org/folio/dcb/service/impl/TransactionsServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/TransactionsServiceImpl.java @@ -99,7 +99,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 287d7504a93417d646c6c8e499b1fe0ef3941986 Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Mon, 4 Mar 2024 18:36:49 +0600 Subject: [PATCH 06/23] MODDCB-90 Accept existing circulation request ID --- .../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 25ceb19ce5de40f3c15f0b5828aa959b0faaa206 Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Mon, 4 Mar 2024 19:43:09 +0600 Subject: [PATCH 07/23] MODDCB-90 Accept existing circulation request ID --- ...> 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 28f9b716..b9ad3cbb 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: @@ -147,9 +147,9 @@ components: schema: type: string required: true - ecsTlrTransactionId: + ecsRequestTransactionId: in: path - name: ecsTlrTransactionId + name: ecsRequestTransactionId schema: type: string required: true From 3ad31891601c866ce74ee8591fff17d8c6d685ad Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Thu, 7 Mar 2024 23:35:00 +0600 Subject: [PATCH 08/23] MODDCB-90 Accept existing circulation request ID --- .../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 e3f15754..da858634 100644 --- a/src/test/java/org/folio/dcb/utils/EntityUtils.java +++ b/src/test/java/org/folio/dcb/utils/EntityUtils.java @@ -56,6 +56,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() @@ -70,6 +71,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 0020e5263723a676dfb889ee8abef7026b7da73f Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Fri, 8 Mar 2024 00:32:02 +0600 Subject: [PATCH 09/23] MODDCB-90 Accept existing circulation request ID --- .../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 38a34b571393d6576f7cfbe5bed9867bd6190d25 Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Fri, 8 Mar 2024 00:50:14 +0600 Subject: [PATCH 10/23] MODDCB-90 Accept existing circulation request ID --- .../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 0fef6f2734d956e9cb99295fb26bd2cc7c5c9b59 Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Fri, 8 Mar 2024 01:18:46 +0600 Subject: [PATCH 11/23] MODDCB-90 Accept existing circulation request ID --- ...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 c386a751c97e2db9a4151d6749a3470ffb22e17d Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Mon, 11 Mar 2024 13:41:55 +0600 Subject: [PATCH 12/23] MODDCB-90 Accept existing circulation request ID --- .../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 a67298d651f4c30e93896c125cddff53bed791b5 Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Tue, 12 Mar 2024 16:32:44 +0500 Subject: [PATCH 13/23] MODDCB-90 Accept existing circulation request ID --- .../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 29e9d8e8a2f06917f2f6db61876897531daa794f Mon Sep 17 00:00:00 2001 From: Magzhan Date: Wed, 13 Mar 2024 17:46:40 +0500 Subject: [PATCH 14/23] Update src/main/java/org/folio/dcb/service/impl/EcsRequestTransactionsServiceImpl.java Co-authored-by: Roman Barannyk <53909129+roman-barannyk@users.noreply.github.com> --- .../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 f2958bcba1dec23dedfa4c37fa94b339920fc999 Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Fri, 15 Mar 2024 18:48:54 +0600 Subject: [PATCH 15/23] MODDCB-90 Accept existing circulation request ID --- 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 1f9803fe..2bd2d4e8 100644 --- a/descriptors/ModuleDescriptor-template.json +++ b/descriptors/ModuleDescriptor-template.json @@ -191,7 +191,8 @@ "subPermissions": [ "dcb.transactions.post", "dcb.transactions.put", - "dcb.transactions.get" + "dcb.transactions.get", + "ecs-tlr.transactions.post" ] }, { @@ -208,6 +209,11 @@ "permissionName": "dcb.transactions.put", "displayName": "update transaction details", "description": "update transaction details" + }, + { + "permissionName": "ecs-tlr.transactions.post", + "displayName": "creates new ecs request transaction", + "description": "creates new ecs request transaction" } ], "launchDescriptor": { From da347fea080406ca1b97a44b8e737580b51ec808 Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Fri, 15 Mar 2024 19:05:44 +0600 Subject: [PATCH 16/23] MODDCB-90 Accept existing circulation request ID --- descriptors/ModuleDescriptor-template.json | 25 +++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/descriptors/ModuleDescriptor-template.json b/descriptors/ModuleDescriptor-template.json index 2bd2d4e8..2306415f 100644 --- a/descriptors/ModuleDescriptor-template.json +++ b/descriptors/ModuleDescriptor-template.json @@ -122,16 +122,24 @@ "circulation.check-out-by-barcode.post", "circulation.check-in-by-barcode.post" ] - }, + } + ] + }, + { + "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" ] } ] @@ -191,8 +199,7 @@ "subPermissions": [ "dcb.transactions.post", "dcb.transactions.put", - "dcb.transactions.get", - "ecs-tlr.transactions.post" + "dcb.transactions.get" ] }, { @@ -211,7 +218,15 @@ "description": "update transaction details" }, { - "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 0f45a099903282488afb27ba9640dea08f8562f5 Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Fri, 15 Mar 2024 19:19:16 +0600 Subject: [PATCH 17/23] MODDCB-90 Accept existing circulation request ID --- descriptors/ModuleDescriptor-template.json | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/descriptors/ModuleDescriptor-template.json b/descriptors/ModuleDescriptor-template.json index 2306415f..df2114d5 100644 --- a/descriptors/ModuleDescriptor-template.json +++ b/descriptors/ModuleDescriptor-template.json @@ -199,7 +199,8 @@ "subPermissions": [ "dcb.transactions.post", "dcb.transactions.put", - "dcb.transactions.get" + "dcb.transactions.get", + "ecs-request.transactions.post" ] }, { @@ -217,18 +218,10 @@ "displayName": "update transaction details", "description": "update transaction details" }, - { - "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" + "displayName": "creates new ECS request transaction", + "description": "creates new ECS request transaction" } ], "launchDescriptor": { From 4663816ce95c4a62b08dbe72e130ea243ebcbc07 Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Mon, 18 Mar 2024 13:00:45 +0600 Subject: [PATCH 18/23] MODDCB-90 Accept existing circulation request ID --- .../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 4483aced6f2012c8a8171f273491665fe368bece Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Mon, 18 Mar 2024 16:27:35 +0600 Subject: [PATCH 19/23] MODDCB-90 Accept existing circulation request ID --- 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 df2114d5..6bd10a2f 100644 --- a/descriptors/ModuleDescriptor-template.json +++ b/descriptors/ModuleDescriptor-template.json @@ -135,7 +135,7 @@ ], "pathPattern": "/ecs-request-transactions/{ecsRequestTransactionId}", "permissionsRequired": [ - "ecs-tlr.transactions.post" + "ecs-request.transactions.post" ], "modulePermissions": [ "circulation-storage.requests.item.get", From 33d7ae01d338e8311242a6e6c70bd6bdc6b670f4 Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Mon, 18 Mar 2024 16:31:44 +0600 Subject: [PATCH 20/23] MODDCB-90 Accept existing circulation request ID --- 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 6bd10a2f..cbfa1381 100644 --- a/descriptors/ModuleDescriptor-template.json +++ b/descriptors/ModuleDescriptor-template.json @@ -135,7 +135,7 @@ ], "pathPattern": "/ecs-request-transactions/{ecsRequestTransactionId}", "permissionsRequired": [ - "ecs-request.transactions.post" + "dcb.ecs-request-transactions.post" ], "modulePermissions": [ "circulation-storage.requests.item.get", From 357a1dc390aad86afb296fba258788da9af4d973 Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Mon, 18 Mar 2024 16:36:10 +0600 Subject: [PATCH 21/23] MODDCB-90 Accept existing circulation request ID --- 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 cbfa1381..15bf37f5 100644 --- a/descriptors/ModuleDescriptor-template.json +++ b/descriptors/ModuleDescriptor-template.json @@ -135,7 +135,7 @@ ], "pathPattern": "/ecs-request-transactions/{ecsRequestTransactionId}", "permissionsRequired": [ - "dcb.ecs-request-transactions.post" + "dcb.ecs-request.transactions.post" ], "modulePermissions": [ "circulation-storage.requests.item.get", From fff2f756f5967764b7a2629ef8a4d87080f3e52d Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Mon, 18 Mar 2024 16:39:17 +0600 Subject: [PATCH 22/23] MODDCB-90 Accept existing circulation request ID --- 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 15bf37f5..1124232c 100644 --- a/descriptors/ModuleDescriptor-template.json +++ b/descriptors/ModuleDescriptor-template.json @@ -200,7 +200,7 @@ "dcb.transactions.post", "dcb.transactions.put", "dcb.transactions.get", - "ecs-request.transactions.post" + "dcb.ecs-request.transactions.post" ] }, { @@ -219,7 +219,7 @@ "description": "update transaction details" }, { - "permissionName": "ecs-request.transactions.post", + "permissionName": "dcb.ecs-request.transactions.post", "displayName": "creates new ECS request transaction", "description": "creates new ECS request transaction" } From bcdc3a456516a98b8be6c961ec2b1d87f3bd2fc9 Mon Sep 17 00:00:00 2001 From: MagzhanArtykov Date: Mon, 18 Mar 2024 22:08:29 +0600 Subject: [PATCH 23/23] MODDCB-90 Accept existing circulation request ID --- 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