From da5c96d877c456097e9f4eb84a7f839c8430e169 Mon Sep 17 00:00:00 2001 From: alexanderkurash Date: Thu, 15 Feb 2024 15:22:23 +0200 Subject: [PATCH 01/12] MODTLR-12 Initial implementation --- .../org/folio/client/feign/DcbClient.java | 14 ++++++++ src/main/resources/swagger.api/ecs-tlr.yaml | 2 ++ .../swagger.api/schemas/DcbItem.yaml | 19 +++++++++++ .../swagger.api/schemas/DcbPatron.yaml | 13 ++++++++ .../swagger.api/schemas/DcbPickup.yaml | 13 ++++++++ .../swagger.api/schemas/DcbTransaction.yaml | 19 +++++++++++ .../java/org/folio/client/DcbClientTest.java | 33 +++++++++++++++++++ 7 files changed, 113 insertions(+) create mode 100644 src/main/java/org/folio/client/feign/DcbClient.java create mode 100644 src/main/resources/swagger.api/schemas/DcbItem.yaml create mode 100644 src/main/resources/swagger.api/schemas/DcbPatron.yaml create mode 100644 src/main/resources/swagger.api/schemas/DcbPickup.yaml create mode 100644 src/main/resources/swagger.api/schemas/DcbTransaction.yaml create mode 100644 src/test/java/org/folio/client/DcbClientTest.java diff --git a/src/main/java/org/folio/client/feign/DcbClient.java b/src/main/java/org/folio/client/feign/DcbClient.java new file mode 100644 index 00000000..db2a09b1 --- /dev/null +++ b/src/main/java/org/folio/client/feign/DcbClient.java @@ -0,0 +1,14 @@ +package org.folio.client.feign; + +import org.folio.domain.dto.DcbTransaction; +import org.folio.spring.config.FeignClientConfiguration; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; + +@FeignClient(name = "dcb", url = "${folio.okapi-url}", configuration = FeignClientConfiguration.class) +public interface DcbClient { + + @PostMapping("/ecs-tlr-transaction") + DcbTransaction createDcbTransaction(DcbTransaction dcbTransaction); + +} diff --git a/src/main/resources/swagger.api/ecs-tlr.yaml b/src/main/resources/swagger.api/ecs-tlr.yaml index 425e8e39..fec0e157 100644 --- a/src/main/resources/swagger.api/ecs-tlr.yaml +++ b/src/main/resources/swagger.api/ecs-tlr.yaml @@ -73,6 +73,8 @@ components: schemas: ecs-tlr: $ref: 'schemas/EcsTlr.yaml#/EcsTlr' + ecs-tlr-dcb-transaction: + $ref: 'schemas/DcbTransaction.yaml#/DcbTransaction' errorResponse: $ref: 'schemas/errors.json' request: diff --git a/src/main/resources/swagger.api/schemas/DcbItem.yaml b/src/main/resources/swagger.api/schemas/DcbItem.yaml new file mode 100644 index 00000000..6a4f0e87 --- /dev/null +++ b/src/main/resources/swagger.api/schemas/DcbItem.yaml @@ -0,0 +1,19 @@ +DcbItem: + description: Item metadata required for the transaction + type: object + properties: + id: + description: The unique item identifier + $ref: "uuid.yaml" + title: + description: The title of the item that has been requested + type: string + barcode: + description: The barcode of the item as specified in the lending library + type: string + materialType: + description: The “hub-normalized” form of the item item type, used in the circulation rules for determining the correct loan policy. + type: string + lendingLibraryCode: + description: The code which identifies the lending library + type: string diff --git a/src/main/resources/swagger.api/schemas/DcbPatron.yaml b/src/main/resources/swagger.api/schemas/DcbPatron.yaml new file mode 100644 index 00000000..64e9bbbf --- /dev/null +++ b/src/main/resources/swagger.api/schemas/DcbPatron.yaml @@ -0,0 +1,13 @@ +DcbPatron: + description: Patron metadata required for the transaction + type: object + properties: + id: + description: The unique identifier for the patron making the request as known in the requesting library + $ref: "uuid.yaml" + group: + description: The patron group associated with the requesting patron + type: string + barcode: + description: The barcode of the patron + type: string diff --git a/src/main/resources/swagger.api/schemas/DcbPickup.yaml b/src/main/resources/swagger.api/schemas/DcbPickup.yaml new file mode 100644 index 00000000..13fa3d2f --- /dev/null +++ b/src/main/resources/swagger.api/schemas/DcbPickup.yaml @@ -0,0 +1,13 @@ +DcbPickup: + description: Pickup Location metadata required for the pickup service point + type: object + properties: + libraryCode: + description: The code which identifies the pickup library + type: string + servicePointId: + description: UUID of the pickup service point + type: string + servicePointName: + description: The name of the pickup service point + type: string diff --git a/src/main/resources/swagger.api/schemas/DcbTransaction.yaml b/src/main/resources/swagger.api/schemas/DcbTransaction.yaml new file mode 100644 index 00000000..8702da50 --- /dev/null +++ b/src/main/resources/swagger.api/schemas/DcbTransaction.yaml @@ -0,0 +1,19 @@ +DcbTransaction: + type: object + properties: + item: + $ref: 'DcbItem.yaml#/DcbItem' + patron: + $ref: 'DcbPatron.yaml#/DcbPatron' + pickup: + $ref: 'DcbPickup.yaml#/DcbPickup' + role: + type: string + enum: + - LENDER + - BORROWER + - PICKUP + - BORROWING-PICKUP + requestId: + description: ID of the existing request + $ref: "uuid.yaml" diff --git a/src/test/java/org/folio/client/DcbClientTest.java b/src/test/java/org/folio/client/DcbClientTest.java new file mode 100644 index 00000000..8fe91fbf --- /dev/null +++ b/src/test/java/org/folio/client/DcbClientTest.java @@ -0,0 +1,33 @@ +package org.folio.client; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.mockito.Mockito.when; + +import java.util.UUID; + +import org.folio.client.feign.DcbClient; +import org.folio.domain.dto.DcbTransaction; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +public class DcbClientTest { + @Mock + private DcbClient dcbClient; + + @Test + void canCreateDcbTransaction() { + String requestId = UUID.randomUUID().toString(); + DcbTransaction dcbTransaction = new DcbTransaction() + .role(DcbTransaction.RoleEnum.BORROWER) + .requestId(requestId); + when(dcbClient.createDcbTransaction(dcbTransaction)).thenReturn(dcbTransaction); + var response = dcbClient.createDcbTransaction(dcbTransaction); + assertNotNull(response); + assertEquals(response.getRole(), DcbTransaction.RoleEnum.BORROWER); + assertEquals(response.getRequestId(), requestId); + } +} From 58dc14ce490e5db6f92ed17f641b44b0f1a88217 Mon Sep 17 00:00:00 2001 From: alexanderkurash Date: Fri, 16 Feb 2024 13:01:16 +0200 Subject: [PATCH 02/12] MODTLR-12 Rename endpoint to be consistent --- src/main/java/org/folio/client/feign/DcbClient.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/folio/client/feign/DcbClient.java b/src/main/java/org/folio/client/feign/DcbClient.java index db2a09b1..a13ca52e 100644 --- a/src/main/java/org/folio/client/feign/DcbClient.java +++ b/src/main/java/org/folio/client/feign/DcbClient.java @@ -8,7 +8,7 @@ @FeignClient(name = "dcb", url = "${folio.okapi-url}", configuration = FeignClientConfiguration.class) public interface DcbClient { - @PostMapping("/ecs-tlr-transaction") + @PostMapping("/ecs-tlr-transactions") DcbTransaction createDcbTransaction(DcbTransaction dcbTransaction); } From 8ef11053d4fbd0b0ec5690a2226c3c6bcc35bd62 Mon Sep 17 00:00:00 2001 From: alexanderkurash Date: Fri, 16 Feb 2024 13:09:00 +0200 Subject: [PATCH 03/12] MODTLR-12 Rename copied schemas --- src/main/resources/swagger.api/ecs-tlr.yaml | 2 +- .../swagger.api/schemas/{DcbItem.yaml => dcbItem.yaml} | 0 .../swagger.api/schemas/{DcbPatron.yaml => dcbPatron.yaml} | 0 .../swagger.api/schemas/{DcbPickup.yaml => dcbPickup.yaml} | 0 .../schemas/{DcbTransaction.yaml => dcbTransaction.yaml} | 6 +++--- 5 files changed, 4 insertions(+), 4 deletions(-) rename src/main/resources/swagger.api/schemas/{DcbItem.yaml => dcbItem.yaml} (100%) rename src/main/resources/swagger.api/schemas/{DcbPatron.yaml => dcbPatron.yaml} (100%) rename src/main/resources/swagger.api/schemas/{DcbPickup.yaml => dcbPickup.yaml} (100%) rename src/main/resources/swagger.api/schemas/{DcbTransaction.yaml => dcbTransaction.yaml} (71%) diff --git a/src/main/resources/swagger.api/ecs-tlr.yaml b/src/main/resources/swagger.api/ecs-tlr.yaml index fec0e157..09b4e9f8 100644 --- a/src/main/resources/swagger.api/ecs-tlr.yaml +++ b/src/main/resources/swagger.api/ecs-tlr.yaml @@ -74,7 +74,7 @@ components: ecs-tlr: $ref: 'schemas/EcsTlr.yaml#/EcsTlr' ecs-tlr-dcb-transaction: - $ref: 'schemas/DcbTransaction.yaml#/DcbTransaction' + $ref: 'schemas/dcbTransaction.yaml#/DcbTransaction' errorResponse: $ref: 'schemas/errors.json' request: diff --git a/src/main/resources/swagger.api/schemas/DcbItem.yaml b/src/main/resources/swagger.api/schemas/dcbItem.yaml similarity index 100% rename from src/main/resources/swagger.api/schemas/DcbItem.yaml rename to src/main/resources/swagger.api/schemas/dcbItem.yaml diff --git a/src/main/resources/swagger.api/schemas/DcbPatron.yaml b/src/main/resources/swagger.api/schemas/dcbPatron.yaml similarity index 100% rename from src/main/resources/swagger.api/schemas/DcbPatron.yaml rename to src/main/resources/swagger.api/schemas/dcbPatron.yaml diff --git a/src/main/resources/swagger.api/schemas/DcbPickup.yaml b/src/main/resources/swagger.api/schemas/dcbPickup.yaml similarity index 100% rename from src/main/resources/swagger.api/schemas/DcbPickup.yaml rename to src/main/resources/swagger.api/schemas/dcbPickup.yaml diff --git a/src/main/resources/swagger.api/schemas/DcbTransaction.yaml b/src/main/resources/swagger.api/schemas/dcbTransaction.yaml similarity index 71% rename from src/main/resources/swagger.api/schemas/DcbTransaction.yaml rename to src/main/resources/swagger.api/schemas/dcbTransaction.yaml index 8702da50..63ccfb38 100644 --- a/src/main/resources/swagger.api/schemas/DcbTransaction.yaml +++ b/src/main/resources/swagger.api/schemas/dcbTransaction.yaml @@ -2,11 +2,11 @@ DcbTransaction: type: object properties: item: - $ref: 'DcbItem.yaml#/DcbItem' + $ref: 'dcbItem.yaml#/DcbItem' patron: - $ref: 'DcbPatron.yaml#/DcbPatron' + $ref: 'dcbPatron.yaml#/DcbPatron' pickup: - $ref: 'DcbPickup.yaml#/DcbPickup' + $ref: 'dcbPickup.yaml#/DcbPickup' role: type: string enum: From e43edb6d3ba538072c80c2d986931f8c4b130ef4 Mon Sep 17 00:00:00 2001 From: alexanderkurash Date: Fri, 16 Feb 2024 13:11:54 +0200 Subject: [PATCH 04/12] MODTLR-19 Add schema, client --- .../java/org/folio/client/feign/DcbClient.java | 4 ++++ src/main/resources/swagger.api/ecs-tlr.yaml | 2 ++ .../swagger.api/schemas/transactionStatus.yaml | 16 ++++++++++++++++ 3 files changed, 22 insertions(+) create mode 100644 src/main/resources/swagger.api/schemas/transactionStatus.yaml diff --git a/src/main/java/org/folio/client/feign/DcbClient.java b/src/main/java/org/folio/client/feign/DcbClient.java index a13ca52e..55a6a1b4 100644 --- a/src/main/java/org/folio/client/feign/DcbClient.java +++ b/src/main/java/org/folio/client/feign/DcbClient.java @@ -1,6 +1,7 @@ package org.folio.client.feign; import org.folio.domain.dto.DcbTransaction; +import org.folio.domain.dto.TransactionStatus; import org.folio.spring.config.FeignClientConfiguration; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; @@ -11,4 +12,7 @@ public interface DcbClient { @PostMapping("/ecs-tlr-transactions") DcbTransaction createDcbTransaction(DcbTransaction dcbTransaction); + @PostMapping("/transactions") + DcbTransaction changeDcbTransactionStatus(String transactionId, TransactionStatus newStatus); + } diff --git a/src/main/resources/swagger.api/ecs-tlr.yaml b/src/main/resources/swagger.api/ecs-tlr.yaml index 09b4e9f8..5630564a 100644 --- a/src/main/resources/swagger.api/ecs-tlr.yaml +++ b/src/main/resources/swagger.api/ecs-tlr.yaml @@ -75,6 +75,8 @@ components: $ref: 'schemas/EcsTlr.yaml#/EcsTlr' ecs-tlr-dcb-transaction: $ref: 'schemas/dcbTransaction.yaml#/DcbTransaction' + transactionStatus: + $ref: 'schemas/transactionStatus.yaml#/TransactionStatus' errorResponse: $ref: 'schemas/errors.json' request: diff --git a/src/main/resources/swagger.api/schemas/transactionStatus.yaml b/src/main/resources/swagger.api/schemas/transactionStatus.yaml new file mode 100644 index 00000000..e999b7c2 --- /dev/null +++ b/src/main/resources/swagger.api/schemas/transactionStatus.yaml @@ -0,0 +1,16 @@ +TransactionStatus: + type: object + properties: + status: + type: string + enum: + - CREATED #Created by DCB + - OPEN #Item checked in at lending library + - AWAITING_PICKUP #Item checked in at borrowing/Pickup library + - ITEM_CHECKED_OUT #Item checkout by patron. Request is fulfilled and loan is created + - ITEM_CHECKED_IN #Item returned to borrowing/Pickup library + - CLOSED #Item returned to lending library + - CANCELLED #Request was cancelled + - ERROR #Error occurred + message: + type: string From 549d955e7a2552214c37904cb99ea80960b2578e Mon Sep 17 00:00:00 2001 From: alexanderkurash Date: Fri, 16 Feb 2024 13:20:56 +0200 Subject: [PATCH 05/12] MODTLR-12 Rename component in yaml --- src/main/resources/swagger.api/ecs-tlr.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/swagger.api/ecs-tlr.yaml b/src/main/resources/swagger.api/ecs-tlr.yaml index 09b4e9f8..eaad3f68 100644 --- a/src/main/resources/swagger.api/ecs-tlr.yaml +++ b/src/main/resources/swagger.api/ecs-tlr.yaml @@ -73,7 +73,7 @@ components: schemas: ecs-tlr: $ref: 'schemas/EcsTlr.yaml#/EcsTlr' - ecs-tlr-dcb-transaction: + dcbTransaction: $ref: 'schemas/dcbTransaction.yaml#/DcbTransaction' errorResponse: $ref: 'schemas/errors.json' From 7b24ac738864c8ffdf72d3dbe2887b8d4221b832 Mon Sep 17 00:00:00 2001 From: alexanderkurash Date: Fri, 16 Feb 2024 13:40:38 +0200 Subject: [PATCH 06/12] MODTLR-19 Add schema, mapping --- .../org/folio/client/feign/DcbClient.java | 9 ++++-- src/main/resources/swagger.api/ecs-tlr.yaml | 2 ++ .../schemas/transactionStatusResponse.yaml | 4 +++ .../java/org/folio/client/DcbClientTest.java | 28 +++++++++++++++++++ 4 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 src/main/resources/swagger.api/schemas/transactionStatusResponse.yaml diff --git a/src/main/java/org/folio/client/feign/DcbClient.java b/src/main/java/org/folio/client/feign/DcbClient.java index 55a6a1b4..552dd453 100644 --- a/src/main/java/org/folio/client/feign/DcbClient.java +++ b/src/main/java/org/folio/client/feign/DcbClient.java @@ -2,9 +2,13 @@ import org.folio.domain.dto.DcbTransaction; import org.folio.domain.dto.TransactionStatus; +import org.folio.domain.dto.TransactionStatusResponse; import org.folio.spring.config.FeignClientConfiguration; import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; @FeignClient(name = "dcb", url = "${folio.okapi-url}", configuration = FeignClientConfiguration.class) public interface DcbClient { @@ -12,7 +16,8 @@ public interface DcbClient { @PostMapping("/ecs-tlr-transactions") DcbTransaction createDcbTransaction(DcbTransaction dcbTransaction); - @PostMapping("/transactions") - DcbTransaction changeDcbTransactionStatus(String transactionId, TransactionStatus newStatus); + @PutMapping("/transactions/{dcbTransactionId}/status") + TransactionStatusResponse changeDcbTransactionStatus(@PathVariable String dcbTransactionId, + @RequestBody TransactionStatus newStatus); } diff --git a/src/main/resources/swagger.api/ecs-tlr.yaml b/src/main/resources/swagger.api/ecs-tlr.yaml index 02cc7153..83a1d7be 100644 --- a/src/main/resources/swagger.api/ecs-tlr.yaml +++ b/src/main/resources/swagger.api/ecs-tlr.yaml @@ -77,6 +77,8 @@ components: $ref: 'schemas/dcbTransaction.yaml#/DcbTransaction' transactionStatus: $ref: 'schemas/transactionStatus.yaml#/TransactionStatus' + transactionStatusResponse: + $ref: 'schemas/transactionStatusResponse.yaml#/TransactionStatusResponse' errorResponse: $ref: 'schemas/errors.json' request: diff --git a/src/main/resources/swagger.api/schemas/transactionStatusResponse.yaml b/src/main/resources/swagger.api/schemas/transactionStatusResponse.yaml new file mode 100644 index 00000000..84941250 --- /dev/null +++ b/src/main/resources/swagger.api/schemas/transactionStatusResponse.yaml @@ -0,0 +1,4 @@ +TransactionStatusResponse: + allOf: + - $ref: 'transactionStatus.yaml#/TransactionStatus' + - $ref: 'dcbTransaction.yaml#/DcbTransaction' diff --git a/src/test/java/org/folio/client/DcbClientTest.java b/src/test/java/org/folio/client/DcbClientTest.java index 8fe91fbf..7c7766ab 100644 --- a/src/test/java/org/folio/client/DcbClientTest.java +++ b/src/test/java/org/folio/client/DcbClientTest.java @@ -8,6 +8,8 @@ import org.folio.client.feign.DcbClient; import org.folio.domain.dto.DcbTransaction; +import org.folio.domain.dto.TransactionStatus; +import org.folio.domain.dto.TransactionStatusResponse; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; @@ -30,4 +32,30 @@ void canCreateDcbTransaction() { assertEquals(response.getRole(), DcbTransaction.RoleEnum.BORROWER); assertEquals(response.getRequestId(), requestId); } + + @Test + void canChangeDcbTransactionStatus() { + String requestId = UUID.randomUUID().toString(); + String transactionId = UUID.randomUUID().toString(); + TransactionStatus initialStatus = new TransactionStatus() + .status(TransactionStatus.StatusEnum.AWAITING_PICKUP); + TransactionStatus targetStatus = new TransactionStatus() + .status(TransactionStatus.StatusEnum.CANCELLED) + .message("test message"); + DcbTransaction dcbTransaction = new DcbTransaction() + .role(DcbTransaction.RoleEnum.BORROWER) + .requestId(requestId); + TransactionStatusResponse transactionStatusResponse = new TransactionStatusResponse() + .status(TransactionStatusResponse.StatusEnum.CANCELLED) + .message("test message") + .item(dcbTransaction.getItem()) + .patron(dcbTransaction.getPatron()) + .pickup(dcbTransaction.getPickup()) + .requestId(requestId); + when(dcbClient.changeDcbTransactionStatus(transactionId, targetStatus)) + .thenReturn(transactionStatusResponse); + var response = dcbClient.changeDcbTransactionStatus(transactionId, targetStatus); + assertNotNull(response); + assertEquals(response.getStatus(), TransactionStatusResponse.StatusEnum.CANCELLED); + } } From ff8641beca55868fdb5d4a5918303919f20723b8 Mon Sep 17 00:00:00 2001 From: alexanderkurash Date: Fri, 16 Feb 2024 13:56:45 +0200 Subject: [PATCH 07/12] MODTLR-19 Add GET mapping for transaction status --- .../org/folio/client/feign/DcbClient.java | 4 ++++ .../java/org/folio/client/DcbClientTest.java | 22 +++++++++++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/folio/client/feign/DcbClient.java b/src/main/java/org/folio/client/feign/DcbClient.java index 552dd453..4c6da8e9 100644 --- a/src/main/java/org/folio/client/feign/DcbClient.java +++ b/src/main/java/org/folio/client/feign/DcbClient.java @@ -5,6 +5,7 @@ import org.folio.domain.dto.TransactionStatusResponse; import org.folio.spring.config.FeignClientConfiguration; import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; @@ -16,6 +17,9 @@ public interface DcbClient { @PostMapping("/ecs-tlr-transactions") DcbTransaction createDcbTransaction(DcbTransaction dcbTransaction); + @GetMapping("/transactions/{dcbTransactionId}/status") + TransactionStatusResponse getDcbTransactionStatus(@PathVariable String dcbTransactionId); + @PutMapping("/transactions/{dcbTransactionId}/status") TransactionStatusResponse changeDcbTransactionStatus(@PathVariable String dcbTransactionId, @RequestBody TransactionStatus newStatus); diff --git a/src/test/java/org/folio/client/DcbClientTest.java b/src/test/java/org/folio/client/DcbClientTest.java index 7c7766ab..f4f891df 100644 --- a/src/test/java/org/folio/client/DcbClientTest.java +++ b/src/test/java/org/folio/client/DcbClientTest.java @@ -33,12 +33,30 @@ void canCreateDcbTransaction() { assertEquals(response.getRequestId(), requestId); } + @Test + void canGetDcbTransactionStatus() { + String requestId = UUID.randomUUID().toString(); + String transactionId = UUID.randomUUID().toString(); + DcbTransaction dcbTransaction = new DcbTransaction() + .role(DcbTransaction.RoleEnum.BORROWER) + .requestId(requestId); + TransactionStatusResponse transactionStatusResponse = new TransactionStatusResponse() + .status(TransactionStatusResponse.StatusEnum.CANCELLED) + .message("test message") + .item(dcbTransaction.getItem()) + .patron(dcbTransaction.getPatron()) + .pickup(dcbTransaction.getPickup()) + .requestId(requestId); + when(dcbClient.getDcbTransactionStatus(transactionId)).thenReturn(transactionStatusResponse); + var response = dcbClient.getDcbTransactionStatus(transactionId); + assertNotNull(response); + assertEquals(response.getStatus(), TransactionStatusResponse.StatusEnum.CANCELLED); + } + @Test void canChangeDcbTransactionStatus() { String requestId = UUID.randomUUID().toString(); String transactionId = UUID.randomUUID().toString(); - TransactionStatus initialStatus = new TransactionStatus() - .status(TransactionStatus.StatusEnum.AWAITING_PICKUP); TransactionStatus targetStatus = new TransactionStatus() .status(TransactionStatus.StatusEnum.CANCELLED) .message("test message"); From 5c2d69404c458eef00c7a1990fe94bef3b99bb5f Mon Sep 17 00:00:00 2001 From: alexanderkurash Date: Mon, 19 Feb 2024 13:10:36 +0200 Subject: [PATCH 08/12] MODTLR-12 Fix code smells in unit tests --- src/test/java/org/folio/client/DcbClientTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/test/java/org/folio/client/DcbClientTest.java b/src/test/java/org/folio/client/DcbClientTest.java index 8fe91fbf..74b7ed8f 100644 --- a/src/test/java/org/folio/client/DcbClientTest.java +++ b/src/test/java/org/folio/client/DcbClientTest.java @@ -14,7 +14,7 @@ import org.mockito.junit.jupiter.MockitoExtension; @ExtendWith(MockitoExtension.class) -public class DcbClientTest { +class DcbClientTest { @Mock private DcbClient dcbClient; @@ -27,7 +27,7 @@ void canCreateDcbTransaction() { when(dcbClient.createDcbTransaction(dcbTransaction)).thenReturn(dcbTransaction); var response = dcbClient.createDcbTransaction(dcbTransaction); assertNotNull(response); - assertEquals(response.getRole(), DcbTransaction.RoleEnum.BORROWER); - assertEquals(response.getRequestId(), requestId); + assertEquals(DcbTransaction.RoleEnum.BORROWER, response.getRole()); + assertEquals(requestId, response.getRequestId()); } } From eec13483c3805e6d93bcb48c3337da84363353e9 Mon Sep 17 00:00:00 2001 From: alexanderkurash Date: Mon, 19 Feb 2024 15:02:52 +0200 Subject: [PATCH 09/12] MODTLR-19 Fix code smells in unit tests --- src/test/java/org/folio/client/DcbClientTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/org/folio/client/DcbClientTest.java b/src/test/java/org/folio/client/DcbClientTest.java index f76db024..3a148d15 100644 --- a/src/test/java/org/folio/client/DcbClientTest.java +++ b/src/test/java/org/folio/client/DcbClientTest.java @@ -50,7 +50,7 @@ void canGetDcbTransactionStatus() { when(dcbClient.getDcbTransactionStatus(transactionId)).thenReturn(transactionStatusResponse); var response = dcbClient.getDcbTransactionStatus(transactionId); assertNotNull(response); - assertEquals(response.getStatus(), TransactionStatusResponse.StatusEnum.CANCELLED); + assertEquals(TransactionStatusResponse.StatusEnum.CANCELLED, response.getStatus()); } @Test @@ -74,6 +74,6 @@ void canChangeDcbTransactionStatus() { .thenReturn(transactionStatusResponse); var response = dcbClient.changeDcbTransactionStatus(transactionId, targetStatus); assertNotNull(response); - assertEquals(response.getStatus(), TransactionStatusResponse.StatusEnum.CANCELLED); + assertEquals(TransactionStatusResponse.StatusEnum.CANCELLED, response.getStatus()); } } From 5230a18b7f800c915b4fc69e4a9eb28ced2a35ee Mon Sep 17 00:00:00 2001 From: alexanderkurash Date: Wed, 21 Feb 2024 15:13:05 +0200 Subject: [PATCH 10/12] MODTLR-19 Change schema, response type --- src/main/java/org/folio/client/feign/DcbClient.java | 2 +- .../resources/swagger.api/schemas/dcbTransaction.yaml | 4 ---- src/test/java/org/folio/client/DcbClientTest.java | 11 ++++++----- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/src/main/java/org/folio/client/feign/DcbClient.java b/src/main/java/org/folio/client/feign/DcbClient.java index 4c6da8e9..c8289fb0 100644 --- a/src/main/java/org/folio/client/feign/DcbClient.java +++ b/src/main/java/org/folio/client/feign/DcbClient.java @@ -15,7 +15,7 @@ public interface DcbClient { @PostMapping("/ecs-tlr-transactions") - DcbTransaction createDcbTransaction(DcbTransaction dcbTransaction); + TransactionStatusResponse createDcbTransaction(DcbTransaction dcbTransaction); @GetMapping("/transactions/{dcbTransactionId}/status") TransactionStatusResponse getDcbTransactionStatus(@PathVariable String dcbTransactionId); diff --git a/src/main/resources/swagger.api/schemas/dcbTransaction.yaml b/src/main/resources/swagger.api/schemas/dcbTransaction.yaml index 63ccfb38..a026aea4 100644 --- a/src/main/resources/swagger.api/schemas/dcbTransaction.yaml +++ b/src/main/resources/swagger.api/schemas/dcbTransaction.yaml @@ -3,10 +3,6 @@ DcbTransaction: properties: item: $ref: 'dcbItem.yaml#/DcbItem' - patron: - $ref: 'dcbPatron.yaml#/DcbPatron' - pickup: - $ref: 'dcbPickup.yaml#/DcbPickup' role: type: string enum: diff --git a/src/test/java/org/folio/client/DcbClientTest.java b/src/test/java/org/folio/client/DcbClientTest.java index 3a148d15..e6636831 100644 --- a/src/test/java/org/folio/client/DcbClientTest.java +++ b/src/test/java/org/folio/client/DcbClientTest.java @@ -26,7 +26,12 @@ void canCreateDcbTransaction() { DcbTransaction dcbTransaction = new DcbTransaction() .role(DcbTransaction.RoleEnum.BORROWER) .requestId(requestId); - when(dcbClient.createDcbTransaction(dcbTransaction)).thenReturn(dcbTransaction); + TransactionStatusResponse transactionStatusResponse = new TransactionStatusResponse() + .status(TransactionStatusResponse.StatusEnum.CANCELLED) + .message("test message") + .item(dcbTransaction.getItem()) + .requestId(requestId); + when(dcbClient.createDcbTransaction(dcbTransaction)).thenReturn(transactionStatusResponse); var response = dcbClient.createDcbTransaction(dcbTransaction); assertNotNull(response); assertEquals(DcbTransaction.RoleEnum.BORROWER, response.getRole()); @@ -44,8 +49,6 @@ void canGetDcbTransactionStatus() { .status(TransactionStatusResponse.StatusEnum.CANCELLED) .message("test message") .item(dcbTransaction.getItem()) - .patron(dcbTransaction.getPatron()) - .pickup(dcbTransaction.getPickup()) .requestId(requestId); when(dcbClient.getDcbTransactionStatus(transactionId)).thenReturn(transactionStatusResponse); var response = dcbClient.getDcbTransactionStatus(transactionId); @@ -67,8 +70,6 @@ void canChangeDcbTransactionStatus() { .status(TransactionStatusResponse.StatusEnum.CANCELLED) .message("test message") .item(dcbTransaction.getItem()) - .patron(dcbTransaction.getPatron()) - .pickup(dcbTransaction.getPickup()) .requestId(requestId); when(dcbClient.changeDcbTransactionStatus(transactionId, targetStatus)) .thenReturn(transactionStatusResponse); From 44a79cd57cf50dcb57ace13c6e3a08f0664e48ab Mon Sep 17 00:00:00 2001 From: alexanderkurash Date: Wed, 21 Feb 2024 15:19:04 +0200 Subject: [PATCH 11/12] MODTLR-12 Change schema, response type --- .../java/org/folio/client/feign/DcbClient.java | 3 ++- src/main/resources/swagger.api/ecs-tlr.yaml | 4 ++++ .../swagger.api/schemas/dcbTransaction.yaml | 4 ---- .../swagger.api/schemas/transactionStatus.yaml | 16 ++++++++++++++++ .../schemas/transactionStatusResponse.yaml | 4 ++++ .../java/org/folio/client/DcbClientTest.java | 8 +++++++- 6 files changed, 33 insertions(+), 6 deletions(-) create mode 100644 src/main/resources/swagger.api/schemas/transactionStatus.yaml create mode 100644 src/main/resources/swagger.api/schemas/transactionStatusResponse.yaml diff --git a/src/main/java/org/folio/client/feign/DcbClient.java b/src/main/java/org/folio/client/feign/DcbClient.java index a13ca52e..25717036 100644 --- a/src/main/java/org/folio/client/feign/DcbClient.java +++ b/src/main/java/org/folio/client/feign/DcbClient.java @@ -1,6 +1,7 @@ package org.folio.client.feign; import org.folio.domain.dto.DcbTransaction; +import org.folio.domain.dto.TransactionStatusResponse; import org.folio.spring.config.FeignClientConfiguration; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; @@ -9,6 +10,6 @@ public interface DcbClient { @PostMapping("/ecs-tlr-transactions") - DcbTransaction createDcbTransaction(DcbTransaction dcbTransaction); + TransactionStatusResponse createDcbTransaction(DcbTransaction dcbTransaction); } diff --git a/src/main/resources/swagger.api/ecs-tlr.yaml b/src/main/resources/swagger.api/ecs-tlr.yaml index eaad3f68..ab2873dd 100644 --- a/src/main/resources/swagger.api/ecs-tlr.yaml +++ b/src/main/resources/swagger.api/ecs-tlr.yaml @@ -75,6 +75,10 @@ components: $ref: 'schemas/EcsTlr.yaml#/EcsTlr' dcbTransaction: $ref: 'schemas/dcbTransaction.yaml#/DcbTransaction' + transactionStatus: + $ref: 'schemas/transactionStatus.yaml#/TransactionStatus' + transactionStatusResponse: + $ref: 'schemas/transactionStatusResponse.yaml#/TransactionStatusResponse' errorResponse: $ref: 'schemas/errors.json' request: diff --git a/src/main/resources/swagger.api/schemas/dcbTransaction.yaml b/src/main/resources/swagger.api/schemas/dcbTransaction.yaml index 63ccfb38..a026aea4 100644 --- a/src/main/resources/swagger.api/schemas/dcbTransaction.yaml +++ b/src/main/resources/swagger.api/schemas/dcbTransaction.yaml @@ -3,10 +3,6 @@ DcbTransaction: properties: item: $ref: 'dcbItem.yaml#/DcbItem' - patron: - $ref: 'dcbPatron.yaml#/DcbPatron' - pickup: - $ref: 'dcbPickup.yaml#/DcbPickup' role: type: string enum: diff --git a/src/main/resources/swagger.api/schemas/transactionStatus.yaml b/src/main/resources/swagger.api/schemas/transactionStatus.yaml new file mode 100644 index 00000000..e999b7c2 --- /dev/null +++ b/src/main/resources/swagger.api/schemas/transactionStatus.yaml @@ -0,0 +1,16 @@ +TransactionStatus: + type: object + properties: + status: + type: string + enum: + - CREATED #Created by DCB + - OPEN #Item checked in at lending library + - AWAITING_PICKUP #Item checked in at borrowing/Pickup library + - ITEM_CHECKED_OUT #Item checkout by patron. Request is fulfilled and loan is created + - ITEM_CHECKED_IN #Item returned to borrowing/Pickup library + - CLOSED #Item returned to lending library + - CANCELLED #Request was cancelled + - ERROR #Error occurred + message: + type: string diff --git a/src/main/resources/swagger.api/schemas/transactionStatusResponse.yaml b/src/main/resources/swagger.api/schemas/transactionStatusResponse.yaml new file mode 100644 index 00000000..84941250 --- /dev/null +++ b/src/main/resources/swagger.api/schemas/transactionStatusResponse.yaml @@ -0,0 +1,4 @@ +TransactionStatusResponse: + allOf: + - $ref: 'transactionStatus.yaml#/TransactionStatus' + - $ref: 'dcbTransaction.yaml#/DcbTransaction' diff --git a/src/test/java/org/folio/client/DcbClientTest.java b/src/test/java/org/folio/client/DcbClientTest.java index 74b7ed8f..19fbffc1 100644 --- a/src/test/java/org/folio/client/DcbClientTest.java +++ b/src/test/java/org/folio/client/DcbClientTest.java @@ -8,6 +8,7 @@ import org.folio.client.feign.DcbClient; import org.folio.domain.dto.DcbTransaction; +import org.folio.domain.dto.TransactionStatusResponse; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; @@ -24,7 +25,12 @@ void canCreateDcbTransaction() { DcbTransaction dcbTransaction = new DcbTransaction() .role(DcbTransaction.RoleEnum.BORROWER) .requestId(requestId); - when(dcbClient.createDcbTransaction(dcbTransaction)).thenReturn(dcbTransaction); + TransactionStatusResponse transactionStatusResponse = new TransactionStatusResponse() + .status(TransactionStatusResponse.StatusEnum.CANCELLED) + .message("test message") + .item(dcbTransaction.getItem()) + .requestId(requestId); + when(dcbClient.createDcbTransaction(dcbTransaction)).thenReturn(transactionStatusResponse); var response = dcbClient.createDcbTransaction(dcbTransaction); assertNotNull(response); assertEquals(DcbTransaction.RoleEnum.BORROWER, response.getRole()); From 4fec1eab7c0925db1cffbd5830ffb3d4038ec468 Mon Sep 17 00:00:00 2001 From: alexanderkurash Date: Thu, 22 Feb 2024 14:23:31 +0200 Subject: [PATCH 12/12] MODTLR-12 Add transaction ID --- src/main/java/org/folio/client/feign/DcbClient.java | 7 +++++-- src/test/java/org/folio/client/DcbClientTest.java | 10 +++++++--- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/folio/client/feign/DcbClient.java b/src/main/java/org/folio/client/feign/DcbClient.java index 25717036..9d5d52e1 100644 --- a/src/main/java/org/folio/client/feign/DcbClient.java +++ b/src/main/java/org/folio/client/feign/DcbClient.java @@ -4,12 +4,15 @@ import org.folio.domain.dto.TransactionStatusResponse; import org.folio.spring.config.FeignClientConfiguration; import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; @FeignClient(name = "dcb", url = "${folio.okapi-url}", configuration = FeignClientConfiguration.class) public interface DcbClient { - @PostMapping("/ecs-tlr-transactions") - TransactionStatusResponse createDcbTransaction(DcbTransaction dcbTransaction); + @PostMapping("/ecs-tlr-transactions/{dcbTransactionId}") + TransactionStatusResponse createDcbTransaction(@PathVariable String dcbTransactionId, + @RequestBody DcbTransaction dcbTransaction); } diff --git a/src/test/java/org/folio/client/DcbClientTest.java b/src/test/java/org/folio/client/DcbClientTest.java index 19fbffc1..a362fcb2 100644 --- a/src/test/java/org/folio/client/DcbClientTest.java +++ b/src/test/java/org/folio/client/DcbClientTest.java @@ -22,6 +22,7 @@ class DcbClientTest { @Test void canCreateDcbTransaction() { String requestId = UUID.randomUUID().toString(); + String dcbTransactionId = UUID.randomUUID().toString(); DcbTransaction dcbTransaction = new DcbTransaction() .role(DcbTransaction.RoleEnum.BORROWER) .requestId(requestId); @@ -29,11 +30,14 @@ void canCreateDcbTransaction() { .status(TransactionStatusResponse.StatusEnum.CANCELLED) .message("test message") .item(dcbTransaction.getItem()) + .role(TransactionStatusResponse.RoleEnum.BORROWER) .requestId(requestId); - when(dcbClient.createDcbTransaction(dcbTransaction)).thenReturn(transactionStatusResponse); - var response = dcbClient.createDcbTransaction(dcbTransaction); + when(dcbClient.createDcbTransaction(dcbTransactionId, dcbTransaction)) + .thenReturn(transactionStatusResponse); + var response = dcbClient.createDcbTransaction(dcbTransactionId, + dcbTransaction); assertNotNull(response); - assertEquals(DcbTransaction.RoleEnum.BORROWER, response.getRole()); + assertEquals(TransactionStatusResponse.RoleEnum.BORROWER, response.getRole()); assertEquals(requestId, response.getRequestId()); } }