From 8e93c8db79561b8d0c2fcc1125c7fbd6ac4a4cc3 Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Thu, 30 Jan 2025 13:20:14 +0400 Subject: [PATCH 01/31] UXPROD-5090 initital --- .../controller/TransactionApiController.java | 20 ++++++++++ .../ServicePointExpirationPeriodEntity.java | 39 +++++++++++++++++++ ...ervicePointExpirationPeriodRepository.java | 10 +++++ .../dcb/service/impl/CustomTenantService.java | 3 +- .../service/impl/ServicePointServiceImpl.java | 3 +- .../db/changelog/changelog-master.xml | 1 + ...-service-point-expiration-period-table.sql | 9 +++++ ...-service-point-expiration-period-table.xml | 15 +++++++ .../swagger.api/dcb_transaction.yaml | 15 +++++++ .../swagger.api/schemas/IntervalIdEnum.yaml | 6 +++ .../schemas/ServicePointRequest.yaml | 5 +-- .../schemas/servicePointExpirationPeriod.yaml | 12 ++++++ .../java/org/folio/dcb/utils/EntityUtils.java | 2 +- 13 files changed, 133 insertions(+), 7 deletions(-) create mode 100644 src/main/java/org/folio/dcb/domain/entity/ServicePointExpirationPeriodEntity.java create mode 100644 src/main/java/org/folio/dcb/repository/ServicePointExpirationPeriodRepository.java create mode 100644 src/main/resources/db/changelog/changes/create-service-point-expiration-period-table.sql create mode 100644 src/main/resources/db/changelog/changes/create-service-point-expiration-period-table.xml create mode 100644 src/main/resources/swagger.api/schemas/IntervalIdEnum.yaml create mode 100644 src/main/resources/swagger.api/schemas/servicePointExpirationPeriod.yaml diff --git a/src/main/java/org/folio/dcb/controller/TransactionApiController.java b/src/main/java/org/folio/dcb/controller/TransactionApiController.java index dd569b76..c852a4c7 100644 --- a/src/main/java/org/folio/dcb/controller/TransactionApiController.java +++ b/src/main/java/org/folio/dcb/controller/TransactionApiController.java @@ -4,8 +4,11 @@ import lombok.extern.log4j.Log4j2; import org.folio.dcb.domain.dto.DcbTransaction; import org.folio.dcb.domain.dto.DcbUpdateTransaction; +import org.folio.dcb.domain.dto.ServicePointExpirationPeriod; import org.folio.dcb.domain.dto.TransactionStatus; import org.folio.dcb.domain.dto.TransactionStatusResponseCollection; +import org.folio.dcb.domain.entity.ServicePointExpirationPeriodEntity; +import org.folio.dcb.repository.ServicePointExpirationPeriodRepository; import org.folio.dcb.rest.resource.TransactionsApi; import org.folio.dcb.domain.dto.TransactionStatusResponse; import org.folio.dcb.service.TransactionAuditService; @@ -14,6 +17,7 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.RestController; import java.time.OffsetDateTime; +import java.util.Objects; @RestController @Log4j2 @@ -22,6 +26,22 @@ public class TransactionApiController implements TransactionsApi { private final TransactionsService transactionsService; private final TransactionAuditService transactionAuditService; + private final ServicePointExpirationPeriodRepository servicePointExpirationPeriodRepository; + + @Override + public ResponseEntity getSpPeriod() { + ServicePointExpirationPeriodEntity sp = servicePointExpirationPeriodRepository.findAll() + .stream() + .findFirst() + .orElseGet(() -> ServicePointExpirationPeriodEntity.builder().build()); + + return ResponseEntity.status(HttpStatus.OK).body(ServicePointExpirationPeriod.builder() + .id(sp.getId().toString()) + .duration(sp.getDuration()) + .interval(sp.getIntervalId()) + .build()); + } + @Override public ResponseEntity getTransactionStatusById(String dcbTransactionId) { log.info("getTransactionStatus:: by id {} ", dcbTransactionId); diff --git a/src/main/java/org/folio/dcb/domain/entity/ServicePointExpirationPeriodEntity.java b/src/main/java/org/folio/dcb/domain/entity/ServicePointExpirationPeriodEntity.java new file mode 100644 index 00000000..82c0f378 --- /dev/null +++ b/src/main/java/org/folio/dcb/domain/entity/ServicePointExpirationPeriodEntity.java @@ -0,0 +1,39 @@ +package org.folio.dcb.domain.entity; + +import java.io.Serializable; +import java.util.UUID; + +import org.folio.dcb.domain.dto.HoldShelfExpiryPeriod; +import org.folio.dcb.domain.dto.IntervalIdEnum; +import org.folio.dcb.domain.dto.TransactionStatus; + +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +@Entity +@Table(name = "service_point_expiration_period") +@Getter +@Setter +@ToString +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class ServicePointExpirationPeriodEntity implements Serializable { + @Id + @GeneratedValue(strategy = GenerationType.UUID) + private UUID id; + private Integer duration; + @Enumerated(EnumType.STRING) + private IntervalIdEnum intervalId; +} diff --git a/src/main/java/org/folio/dcb/repository/ServicePointExpirationPeriodRepository.java b/src/main/java/org/folio/dcb/repository/ServicePointExpirationPeriodRepository.java new file mode 100644 index 00000000..8eaccc0b --- /dev/null +++ b/src/main/java/org/folio/dcb/repository/ServicePointExpirationPeriodRepository.java @@ -0,0 +1,10 @@ +package org.folio.dcb.repository; + +import org.folio.dcb.domain.entity.ServicePointExpirationPeriodEntity; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface ServicePointExpirationPeriodRepository extends + JpaRepository { +} diff --git a/src/main/java/org/folio/dcb/service/impl/CustomTenantService.java b/src/main/java/org/folio/dcb/service/impl/CustomTenantService.java index 91c1c8ed..ad85922b 100644 --- a/src/main/java/org/folio/dcb/service/impl/CustomTenantService.java +++ b/src/main/java/org/folio/dcb/service/impl/CustomTenantService.java @@ -13,6 +13,7 @@ import org.folio.dcb.client.feign.LocationsClient; import org.folio.dcb.domain.dto.Calendar; import org.folio.dcb.domain.dto.HoldShelfExpiryPeriod; +import org.folio.dcb.domain.dto.IntervalIdEnum; import org.folio.dcb.domain.dto.NormalHours; import org.folio.dcb.domain.dto.ServicePointRequest; import org.folio.dcb.listener.kafka.service.KafkaService; @@ -215,7 +216,7 @@ private void createServicePoint() { .code(CODE) .discoveryDisplayName(NAME) .pickupLocation(true) - .holdShelfExpiryPeriod(HoldShelfExpiryPeriod.builder().duration(3).intervalId(HoldShelfExpiryPeriod.IntervalIdEnum.DAYS).build()) + .holdShelfExpiryPeriod(HoldShelfExpiryPeriod.builder().duration(3).intervalId(IntervalIdEnum.DAYS).build()) .holdShelfClosedLibraryDateManagement(HOLD_SHELF_CLOSED_LIBRARY_DATE_MANAGEMENT) .build(); diff --git a/src/main/java/org/folio/dcb/service/impl/ServicePointServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/ServicePointServiceImpl.java index b6589e66..54b8b11b 100644 --- a/src/main/java/org/folio/dcb/service/impl/ServicePointServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/ServicePointServiceImpl.java @@ -6,6 +6,7 @@ import org.folio.dcb.client.feign.InventoryServicePointClient; import org.folio.dcb.domain.dto.DcbPickup; import org.folio.dcb.domain.dto.HoldShelfExpiryPeriod; +import org.folio.dcb.domain.dto.IntervalIdEnum; import org.folio.dcb.domain.dto.ServicePointRequest; import org.folio.dcb.service.CalendarService; import org.folio.dcb.service.ServicePointService; @@ -53,7 +54,7 @@ private ServicePointRequest createServicePointRequest(String id, String name, St .code(code) .discoveryDisplayName(name) .pickupLocation(true) - .holdShelfExpiryPeriod(HoldShelfExpiryPeriod.builder().duration(3).intervalId(HoldShelfExpiryPeriod.IntervalIdEnum.DAYS).build()) + .holdShelfExpiryPeriod(HoldShelfExpiryPeriod.builder().duration(3).intervalId(IntervalIdEnum.DAYS).build()) .holdShelfClosedLibraryDateManagement(HOLD_SHELF_CLOSED_LIBRARY_DATE_MANAGEMENT) .build(); } diff --git a/src/main/resources/db/changelog/changelog-master.xml b/src/main/resources/db/changelog/changelog-master.xml index 30b36fb1..c5591843 100644 --- a/src/main/resources/db/changelog/changelog-master.xml +++ b/src/main/resources/db/changelog/changelog-master.xml @@ -9,5 +9,6 @@ + diff --git a/src/main/resources/db/changelog/changes/create-service-point-expiration-period-table.sql b/src/main/resources/db/changelog/changes/create-service-point-expiration-period-table.sql new file mode 100644 index 00000000..3493f7d2 --- /dev/null +++ b/src/main/resources/db/changelog/changes/create-service-point-expiration-period-table.sql @@ -0,0 +1,9 @@ +DROP TYPE IF EXISTS interval_id; +CREATE TYPE interval_id AS ENUM ('Minutes', 'Days', 'Weeks'); +CREATE TABLE IF NOT EXISTS service_point_expiration_period +( + id uuid NOT NULL, + duration integer NOT NULL, + interval_id interval_id NOT NULL, + CONSTRAINT service_point_expiration_period_pkey PRIMARY KEY (id) +); \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/create-service-point-expiration-period-table.xml b/src/main/resources/db/changelog/changes/create-service-point-expiration-period-table.xml new file mode 100644 index 00000000..e682b77e --- /dev/null +++ b/src/main/resources/db/changelog/changes/create-service-point-expiration-period-table.xml @@ -0,0 +1,15 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/swagger.api/dcb_transaction.yaml b/src/main/resources/swagger.api/dcb_transaction.yaml index a64bc437..dc8b4072 100644 --- a/src/main/resources/swagger.api/dcb_transaction.yaml +++ b/src/main/resources/swagger.api/dcb_transaction.yaml @@ -4,6 +4,15 @@ info: description: mod DCB FOLIO API version: 1.0.0 paths: + /transactions/a: + get: + description: get SP period + operationId: getSpPeriod + tags: + - circulation + responses: + '200': + $ref: '#/components/responses/SPPeriod' /transactions/{dcbTransactionId}: description: DCB Circulation Transaction endpoint post: @@ -134,6 +143,12 @@ components: schema: $ref: "schemas/dcbUpdateTransaction.yaml#/DcbUpdateTransaction" responses: + SPPeriod: + description: SP Period + content: + application/json: + schema: + $ref: "schemas/servicePointExpirationPeriod.yaml#/ServicePointExpirationPeriod" TransactionStatus: description: Transaction Status object content: diff --git a/src/main/resources/swagger.api/schemas/IntervalIdEnum.yaml b/src/main/resources/swagger.api/schemas/IntervalIdEnum.yaml new file mode 100644 index 00000000..a6d0eadf --- /dev/null +++ b/src/main/resources/swagger.api/schemas/IntervalIdEnum.yaml @@ -0,0 +1,6 @@ +IntervalIdEnum: + type: string + enum: + - Minutes + - Days + - Week \ No newline at end of file diff --git a/src/main/resources/swagger.api/schemas/ServicePointRequest.yaml b/src/main/resources/swagger.api/schemas/ServicePointRequest.yaml index 65c29ef3..147dfc45 100644 --- a/src/main/resources/swagger.api/schemas/ServicePointRequest.yaml +++ b/src/main/resources/swagger.api/schemas/ServicePointRequest.yaml @@ -33,7 +33,4 @@ HoldShelfExpiryPeriod: type: integer intervalId: description: Interval Hold Shelf Expiry Period - type: string - enum: - - Days - - Weeks + $ref: IntervalIdEnum.yaml#/IntervalIdEnum diff --git a/src/main/resources/swagger.api/schemas/servicePointExpirationPeriod.yaml b/src/main/resources/swagger.api/schemas/servicePointExpirationPeriod.yaml new file mode 100644 index 00000000..27b60abc --- /dev/null +++ b/src/main/resources/swagger.api/schemas/servicePointExpirationPeriod.yaml @@ -0,0 +1,12 @@ +ServicePointExpirationPeriod: + type: object + properties: + id: + description: "Unique identifier of a service point expiration period" + $ref: "uuid.yaml" + duration: + description: "duration value of service point expiration period" + type: integer + interval: + description: "period type of service point expiration period" + $ref: IntervalIdEnum.yaml#/IntervalIdEnum \ No newline at end of file diff --git a/src/test/java/org/folio/dcb/utils/EntityUtils.java b/src/test/java/org/folio/dcb/utils/EntityUtils.java index b867f75f..d0fade89 100644 --- a/src/test/java/org/folio/dcb/utils/EntityUtils.java +++ b/src/test/java/org/folio/dcb/utils/EntityUtils.java @@ -121,7 +121,7 @@ public static org.folio.dcb.domain.dto.ServicePointRequest createServicePointReq .code("DCB_TESTLIBRARYCODE_TESTSERVICEPOINTCODE") .discoveryDisplayName("DCB_TestLibraryCode_TestServicePointCode") .pickupLocation(true) - .holdShelfExpiryPeriod(org.folio.dcb.domain.dto.HoldShelfExpiryPeriod.builder().duration(3).intervalId(org.folio.dcb.domain.dto.HoldShelfExpiryPeriod.IntervalIdEnum.DAYS).build()) + .holdShelfExpiryPeriod(org.folio.dcb.domain.dto.HoldShelfExpiryPeriod.builder().duration(3).intervalId(org.folio.dcb.domain.dto.IntervalIdEnum.DAYS).build()) .holdShelfClosedLibraryDateManagement(HOLD_SHELF_CLOSED_LIBRARY_DATE_MANAGEMENT) .build(); } From 538d7ee881e313ee79c81185aa3a34cda10ff225 Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Thu, 30 Jan 2025 13:42:27 +0400 Subject: [PATCH 02/31] UXPROD-5090 initital --- descriptors/ModuleDescriptor-template.json | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/descriptors/ModuleDescriptor-template.json b/descriptors/ModuleDescriptor-template.json index 49dd4b03..037c889a 100644 --- a/descriptors/ModuleDescriptor-template.json +++ b/descriptors/ModuleDescriptor-template.json @@ -146,6 +146,16 @@ ], "modulePermissions": [] }, + { + "methods": [ + "GET" + ], + "pathPattern": "/transactions/a", + "permissionsRequired": [ + + ], + "modulePermissions": [] + }, { "methods": [ "PUT" From 16c02051d7af471f9afe31582d48bff339425db1 Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Thu, 30 Jan 2025 13:57:00 +0400 Subject: [PATCH 03/31] UXPROD-5090 initital --- .../org/folio/dcb/controller/TransactionApiController.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/folio/dcb/controller/TransactionApiController.java b/src/main/java/org/folio/dcb/controller/TransactionApiController.java index c852a4c7..b0a46af8 100644 --- a/src/main/java/org/folio/dcb/controller/TransactionApiController.java +++ b/src/main/java/org/folio/dcb/controller/TransactionApiController.java @@ -34,9 +34,9 @@ public ResponseEntity getSpPeriod() { .stream() .findFirst() .orElseGet(() -> ServicePointExpirationPeriodEntity.builder().build()); - +String id = Objects.isNull(sp.getId()) ? "" : sp.getId().toString(); return ResponseEntity.status(HttpStatus.OK).body(ServicePointExpirationPeriod.builder() - .id(sp.getId().toString()) + .id(id) .duration(sp.getDuration()) .interval(sp.getIntervalId()) .build()); From aaab1e34026f830ad02f50376334c6bb637184bc Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Thu, 30 Jan 2025 14:29:33 +0400 Subject: [PATCH 04/31] UXPROD-5090 initital --- .../org/folio/dcb/controller/TransactionApiController.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/folio/dcb/controller/TransactionApiController.java b/src/main/java/org/folio/dcb/controller/TransactionApiController.java index b0a46af8..4f9aac00 100644 --- a/src/main/java/org/folio/dcb/controller/TransactionApiController.java +++ b/src/main/java/org/folio/dcb/controller/TransactionApiController.java @@ -4,6 +4,7 @@ import lombok.extern.log4j.Log4j2; import org.folio.dcb.domain.dto.DcbTransaction; import org.folio.dcb.domain.dto.DcbUpdateTransaction; +import org.folio.dcb.domain.dto.IntervalIdEnum; import org.folio.dcb.domain.dto.ServicePointExpirationPeriod; import org.folio.dcb.domain.dto.TransactionStatus; import org.folio.dcb.domain.dto.TransactionStatusResponseCollection; @@ -35,10 +36,12 @@ public ResponseEntity getSpPeriod() { .findFirst() .orElseGet(() -> ServicePointExpirationPeriodEntity.builder().build()); String id = Objects.isNull(sp.getId()) ? "" : sp.getId().toString(); +Integer duration = Objects.isNull(sp.getDuration()) ? null : sp.getDuration(); +IntervalIdEnum interval = Objects.isNull(sp.getIntervalId()) ? null : sp.getIntervalId(); return ResponseEntity.status(HttpStatus.OK).body(ServicePointExpirationPeriod.builder() .id(id) - .duration(sp.getDuration()) - .interval(sp.getIntervalId()) + .duration(duration) + .interval(interval) .build()); } From 643857a93674b6096ed8281ab8b4a603bb531116 Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Thu, 30 Jan 2025 15:13:20 +0400 Subject: [PATCH 05/31] UXPROD-5090 initital --- .../converter/IntervalIdEnumConverter.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 src/main/java/org/folio/dcb/domain/converter/IntervalIdEnumConverter.java diff --git a/src/main/java/org/folio/dcb/domain/converter/IntervalIdEnumConverter.java b/src/main/java/org/folio/dcb/domain/converter/IntervalIdEnumConverter.java new file mode 100644 index 00000000..e43b6f7d --- /dev/null +++ b/src/main/java/org/folio/dcb/domain/converter/IntervalIdEnumConverter.java @@ -0,0 +1,24 @@ +package org.folio.dcb.domain.converter; + +import java.util.Arrays; + +import org.folio.dcb.domain.dto.IntervalIdEnum; + +import jakarta.persistence.AttributeConverter; + +public class IntervalIdEnumConverter implements AttributeConverter { + + @Override + public IntervalIdEnum convertToDatabaseColumn(String str) { + return Arrays.stream(IntervalIdEnum.values()) + .filter(value -> value.getValue().equals(str)) + .findFirst() + .orElse(null); + + } + + @Override + public String convertToEntityAttribute(IntervalIdEnum intervalIdEnum) { + return intervalIdEnum.getValue(); + } +} From 3f7d9c7b48f01c1c6afa6886be94b6ac93b05d50 Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Thu, 30 Jan 2025 15:51:29 +0400 Subject: [PATCH 06/31] UXPROD-5090 initital --- .../domain/converter/IntervalIdEnumConverter.java | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/folio/dcb/domain/converter/IntervalIdEnumConverter.java b/src/main/java/org/folio/dcb/domain/converter/IntervalIdEnumConverter.java index e43b6f7d..1235504b 100644 --- a/src/main/java/org/folio/dcb/domain/converter/IntervalIdEnumConverter.java +++ b/src/main/java/org/folio/dcb/domain/converter/IntervalIdEnumConverter.java @@ -6,19 +6,18 @@ import jakarta.persistence.AttributeConverter; -public class IntervalIdEnumConverter implements AttributeConverter { +public class IntervalIdEnumConverter implements AttributeConverter { @Override - public IntervalIdEnum convertToDatabaseColumn(String str) { + public String convertToDatabaseColumn(IntervalIdEnum intervalIdEnum) { + return intervalIdEnum.getValue(); + } + + @Override + public IntervalIdEnum convertToEntityAttribute(String str) { return Arrays.stream(IntervalIdEnum.values()) .filter(value -> value.getValue().equals(str)) .findFirst() .orElse(null); - - } - - @Override - public String convertToEntityAttribute(IntervalIdEnum intervalIdEnum) { - return intervalIdEnum.getValue(); } } From 10b764d4c23ed72b604309ee2ee38abf9c56d131 Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Thu, 30 Jan 2025 15:59:21 +0400 Subject: [PATCH 07/31] UXPROD-5090 initital --- .../domain/entity/ServicePointExpirationPeriodEntity.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/folio/dcb/domain/entity/ServicePointExpirationPeriodEntity.java b/src/main/java/org/folio/dcb/domain/entity/ServicePointExpirationPeriodEntity.java index 82c0f378..bdc344c7 100644 --- a/src/main/java/org/folio/dcb/domain/entity/ServicePointExpirationPeriodEntity.java +++ b/src/main/java/org/folio/dcb/domain/entity/ServicePointExpirationPeriodEntity.java @@ -3,10 +3,13 @@ import java.io.Serializable; import java.util.UUID; +import org.folio.dcb.domain.converter.IntervalIdEnumConverter; +import org.folio.dcb.domain.converter.UUIDConverter; import org.folio.dcb.domain.dto.HoldShelfExpiryPeriod; import org.folio.dcb.domain.dto.IntervalIdEnum; import org.folio.dcb.domain.dto.TransactionStatus; +import jakarta.persistence.Convert; import jakarta.persistence.Entity; import jakarta.persistence.EnumType; import jakarta.persistence.Enumerated; @@ -34,6 +37,6 @@ public class ServicePointExpirationPeriodEntity implements Serializable { @GeneratedValue(strategy = GenerationType.UUID) private UUID id; private Integer duration; - @Enumerated(EnumType.STRING) + @Convert(converter = IntervalIdEnumConverter.class) private IntervalIdEnum intervalId; } From 3335bea6e417153877895d843e43b1359444b8c5 Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Thu, 30 Jan 2025 16:42:41 +0400 Subject: [PATCH 08/31] UXPROD-5090 rolled back test code --- .../controller/TransactionApiController.java | 22 ------------- .../service/impl/ServicePointServiceImpl.java | 33 +++++++++++++++++-- .../org/folio/dcb/utils/DCBConstants.java | 3 ++ .../swagger.api/dcb_transaction.yaml | 15 --------- 4 files changed, 34 insertions(+), 39 deletions(-) diff --git a/src/main/java/org/folio/dcb/controller/TransactionApiController.java b/src/main/java/org/folio/dcb/controller/TransactionApiController.java index 4f9aac00..a856a34b 100644 --- a/src/main/java/org/folio/dcb/controller/TransactionApiController.java +++ b/src/main/java/org/folio/dcb/controller/TransactionApiController.java @@ -4,12 +4,8 @@ import lombok.extern.log4j.Log4j2; import org.folio.dcb.domain.dto.DcbTransaction; import org.folio.dcb.domain.dto.DcbUpdateTransaction; -import org.folio.dcb.domain.dto.IntervalIdEnum; -import org.folio.dcb.domain.dto.ServicePointExpirationPeriod; import org.folio.dcb.domain.dto.TransactionStatus; import org.folio.dcb.domain.dto.TransactionStatusResponseCollection; -import org.folio.dcb.domain.entity.ServicePointExpirationPeriodEntity; -import org.folio.dcb.repository.ServicePointExpirationPeriodRepository; import org.folio.dcb.rest.resource.TransactionsApi; import org.folio.dcb.domain.dto.TransactionStatusResponse; import org.folio.dcb.service.TransactionAuditService; @@ -18,7 +14,6 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.RestController; import java.time.OffsetDateTime; -import java.util.Objects; @RestController @Log4j2 @@ -27,23 +22,6 @@ public class TransactionApiController implements TransactionsApi { private final TransactionsService transactionsService; private final TransactionAuditService transactionAuditService; - private final ServicePointExpirationPeriodRepository servicePointExpirationPeriodRepository; - - @Override - public ResponseEntity getSpPeriod() { - ServicePointExpirationPeriodEntity sp = servicePointExpirationPeriodRepository.findAll() - .stream() - .findFirst() - .orElseGet(() -> ServicePointExpirationPeriodEntity.builder().build()); -String id = Objects.isNull(sp.getId()) ? "" : sp.getId().toString(); -Integer duration = Objects.isNull(sp.getDuration()) ? null : sp.getDuration(); -IntervalIdEnum interval = Objects.isNull(sp.getIntervalId()) ? null : sp.getIntervalId(); - return ResponseEntity.status(HttpStatus.OK).body(ServicePointExpirationPeriod.builder() - .id(id) - .duration(duration) - .interval(interval) - .build()); - } @Override public ResponseEntity getTransactionStatusById(String dcbTransactionId) { diff --git a/src/main/java/org/folio/dcb/service/impl/ServicePointServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/ServicePointServiceImpl.java index 54b8b11b..58df9094 100644 --- a/src/main/java/org/folio/dcb/service/impl/ServicePointServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/ServicePointServiceImpl.java @@ -1,13 +1,18 @@ package org.folio.dcb.service.impl; +import static org.folio.dcb.utils.DCBConstants.DEFAULT_SERVICE_POINT_PERIOD_DURATION; +import static org.folio.dcb.utils.DCBConstants.DEFAULT_SERVICE_POINT_PERIOD_INTERVAL; + +import java.util.Objects; import java.util.UUID; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; import org.folio.dcb.client.feign.InventoryServicePointClient; import org.folio.dcb.domain.dto.DcbPickup; import org.folio.dcb.domain.dto.HoldShelfExpiryPeriod; -import org.folio.dcb.domain.dto.IntervalIdEnum; import org.folio.dcb.domain.dto.ServicePointRequest; +import org.folio.dcb.domain.entity.ServicePointExpirationPeriodEntity; +import org.folio.dcb.repository.ServicePointExpirationPeriodRepository; import org.folio.dcb.service.CalendarService; import org.folio.dcb.service.ServicePointService; import org.folio.util.StringUtil; @@ -20,6 +25,7 @@ public class ServicePointServiceImpl implements ServicePointService { private final InventoryServicePointClient servicePointClient; private final CalendarService calendarService; + private final ServicePointExpirationPeriodRepository servicePointExpirationPeriodRepository; public static final String HOLD_SHELF_CLOSED_LIBRARY_DATE_MANAGEMENT = "Keep_the_current_due_date"; @Override @@ -54,11 +60,34 @@ private ServicePointRequest createServicePointRequest(String id, String name, St .code(code) .discoveryDisplayName(name) .pickupLocation(true) - .holdShelfExpiryPeriod(HoldShelfExpiryPeriod.builder().duration(3).intervalId(IntervalIdEnum.DAYS).build()) + .holdShelfExpiryPeriod(getShelfExpiryPeriod()) .holdShelfClosedLibraryDateManagement(HOLD_SHELF_CLOSED_LIBRARY_DATE_MANAGEMENT) .build(); } + private HoldShelfExpiryPeriod getShelfExpiryPeriod() { + ServicePointExpirationPeriodEntity period = servicePointExpirationPeriodRepository.findAll() + .iterator() + .next(); + return Objects.isNull(period) ? getDefaultPeriod() : getCustomPeriod(period); + } + + private HoldShelfExpiryPeriod getCustomPeriod(ServicePointExpirationPeriodEntity period) { + return HoldShelfExpiryPeriod.builder() + .duration(period.getDuration()) + .intervalId(period.getIntervalId()) + .build(); + } + + private HoldShelfExpiryPeriod getDefaultPeriod() { + return HoldShelfExpiryPeriod.builder() + .duration(DEFAULT_SERVICE_POINT_PERIOD_DURATION) + .intervalId(DEFAULT_SERVICE_POINT_PERIOD_INTERVAL) + .build(); + } + + + private String getServicePointName(String libraryCode, String servicePointName){ return String.format("DCB_%s_%s", libraryCode, servicePointName); } diff --git a/src/main/java/org/folio/dcb/utils/DCBConstants.java b/src/main/java/org/folio/dcb/utils/DCBConstants.java index acf871b1..4484e676 100644 --- a/src/main/java/org/folio/dcb/utils/DCBConstants.java +++ b/src/main/java/org/folio/dcb/utils/DCBConstants.java @@ -1,5 +1,6 @@ package org.folio.dcb.utils; +import org.folio.dcb.domain.dto.IntervalIdEnum; import org.folio.dcb.domain.dto.ItemStatus; import java.util.List; @@ -37,4 +38,6 @@ private DCBConstants() {} public static final String HOLDING_SOURCE = "folio"; public static final String DCB_CALENDAR_NAME = "DCB Calendar"; public static final List holdItemStatus = List.of(IN_TRANSIT, CHECKED_OUT, PAGED, AWAITING_PICKUP, AWAITING_DELIVERY); + public static final int DEFAULT_SERVICE_POINT_PERIOD_DURATION = 10; + public static final IntervalIdEnum DEFAULT_SERVICE_POINT_PERIOD_INTERVAL = IntervalIdEnum.DAYS; } diff --git a/src/main/resources/swagger.api/dcb_transaction.yaml b/src/main/resources/swagger.api/dcb_transaction.yaml index dc8b4072..a64bc437 100644 --- a/src/main/resources/swagger.api/dcb_transaction.yaml +++ b/src/main/resources/swagger.api/dcb_transaction.yaml @@ -4,15 +4,6 @@ info: description: mod DCB FOLIO API version: 1.0.0 paths: - /transactions/a: - get: - description: get SP period - operationId: getSpPeriod - tags: - - circulation - responses: - '200': - $ref: '#/components/responses/SPPeriod' /transactions/{dcbTransactionId}: description: DCB Circulation Transaction endpoint post: @@ -143,12 +134,6 @@ components: schema: $ref: "schemas/dcbUpdateTransaction.yaml#/DcbUpdateTransaction" responses: - SPPeriod: - description: SP Period - content: - application/json: - schema: - $ref: "schemas/servicePointExpirationPeriod.yaml#/ServicePointExpirationPeriod" TransactionStatus: description: Transaction Status object content: From 76b67918e85125701a60193ac0f9652f84190555 Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Thu, 30 Jan 2025 18:19:55 +0400 Subject: [PATCH 09/31] UXPROD-5090 rolled back test code --- descriptors/ModuleDescriptor-template.json | 10 ---------- .../dcb/service/impl/ServicePointServiceImpl.java | 10 ++++++---- 2 files changed, 6 insertions(+), 14 deletions(-) diff --git a/descriptors/ModuleDescriptor-template.json b/descriptors/ModuleDescriptor-template.json index 037c889a..49dd4b03 100644 --- a/descriptors/ModuleDescriptor-template.json +++ b/descriptors/ModuleDescriptor-template.json @@ -146,16 +146,6 @@ ], "modulePermissions": [] }, - { - "methods": [ - "GET" - ], - "pathPattern": "/transactions/a", - "permissionsRequired": [ - - ], - "modulePermissions": [] - }, { "methods": [ "PUT" diff --git a/src/main/java/org/folio/dcb/service/impl/ServicePointServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/ServicePointServiceImpl.java index 58df9094..e18ae3fc 100644 --- a/src/main/java/org/folio/dcb/service/impl/ServicePointServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/ServicePointServiceImpl.java @@ -3,10 +3,13 @@ import static org.folio.dcb.utils.DCBConstants.DEFAULT_SERVICE_POINT_PERIOD_DURATION; import static org.folio.dcb.utils.DCBConstants.DEFAULT_SERVICE_POINT_PERIOD_INTERVAL; +import java.util.Collections; +import java.util.List; import java.util.Objects; import java.util.UUID; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; + import org.folio.dcb.client.feign.InventoryServicePointClient; import org.folio.dcb.domain.dto.DcbPickup; import org.folio.dcb.domain.dto.HoldShelfExpiryPeriod; @@ -17,6 +20,7 @@ import org.folio.dcb.service.ServicePointService; import org.folio.util.StringUtil; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; @Service @Log4j2 @@ -66,10 +70,8 @@ private ServicePointRequest createServicePointRequest(String id, String name, St } private HoldShelfExpiryPeriod getShelfExpiryPeriod() { - ServicePointExpirationPeriodEntity period = servicePointExpirationPeriodRepository.findAll() - .iterator() - .next(); - return Objects.isNull(period) ? getDefaultPeriod() : getCustomPeriod(period); + List periodList = servicePointExpirationPeriodRepository.findAll(); + return CollectionUtils.isEmpty(periodList) ? getDefaultPeriod() : getCustomPeriod(periodList.get(0)); } private HoldShelfExpiryPeriod getCustomPeriod(ServicePointExpirationPeriodEntity period) { From 3a285f3519676010e9fa898b10851f65c1281cd6 Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Thu, 30 Jan 2025 18:54:29 +0400 Subject: [PATCH 10/31] UXPROD-5090 fixed existing UT --- .../java/org/folio/dcb/service/ServicePointServiceTest.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/test/java/org/folio/dcb/service/ServicePointServiceTest.java b/src/test/java/org/folio/dcb/service/ServicePointServiceTest.java index 5fc0bfe6..3638f2c6 100644 --- a/src/test/java/org/folio/dcb/service/ServicePointServiceTest.java +++ b/src/test/java/org/folio/dcb/service/ServicePointServiceTest.java @@ -1,6 +1,7 @@ package org.folio.dcb.service; import org.folio.dcb.client.feign.InventoryServicePointClient; +import org.folio.dcb.repository.ServicePointExpirationPeriodRepository; import org.folio.dcb.service.impl.ServicePointServiceImpl; import org.folio.spring.model.ResultList; import org.junit.jupiter.api.Test; @@ -9,6 +10,7 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; +import java.util.Collections; import java.util.List; import java.util.UUID; @@ -32,12 +34,16 @@ class ServicePointServiceTest { @Mock private CalendarService calendarService; + @Mock + private ServicePointExpirationPeriodRepository servicePointExpirationPeriodRepository; + @Test void createServicePointIfNotExistsTest(){ when(inventoryServicePointClient.getServicePointByName(any())) .thenReturn(ResultList.of(0, List.of())); when(inventoryServicePointClient.createServicePoint(any())) .thenReturn(createServicePointRequest()); + when(servicePointExpirationPeriodRepository.findAll()).thenReturn(Collections.emptyList()); var response = servicePointService.createServicePointIfNotExists(createDcbPickup()); verify(inventoryServicePointClient).createServicePoint(any()); verify(inventoryServicePointClient).getServicePointByName(any()); From e1e8a89cfe7e47fd6c80e10076d05db4b679d0e8 Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Thu, 30 Jan 2025 19:29:33 +0400 Subject: [PATCH 11/31] UXPROD-5090 refactored --- .../org/folio/dcb/service/impl/ServicePointServiceImpl.java | 2 -- .../changes/create-service-point-expiration-period-table.sql | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/org/folio/dcb/service/impl/ServicePointServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/ServicePointServiceImpl.java index e18ae3fc..e145ff25 100644 --- a/src/main/java/org/folio/dcb/service/impl/ServicePointServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/ServicePointServiceImpl.java @@ -3,9 +3,7 @@ import static org.folio.dcb.utils.DCBConstants.DEFAULT_SERVICE_POINT_PERIOD_DURATION; import static org.folio.dcb.utils.DCBConstants.DEFAULT_SERVICE_POINT_PERIOD_INTERVAL; -import java.util.Collections; import java.util.List; -import java.util.Objects; import java.util.UUID; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; diff --git a/src/main/resources/db/changelog/changes/create-service-point-expiration-period-table.sql b/src/main/resources/db/changelog/changes/create-service-point-expiration-period-table.sql index 3493f7d2..629500ee 100644 --- a/src/main/resources/db/changelog/changes/create-service-point-expiration-period-table.sql +++ b/src/main/resources/db/changelog/changes/create-service-point-expiration-period-table.sql @@ -2,7 +2,7 @@ DROP TYPE IF EXISTS interval_id; CREATE TYPE interval_id AS ENUM ('Minutes', 'Days', 'Weeks'); CREATE TABLE IF NOT EXISTS service_point_expiration_period ( - id uuid NOT NULL, + id uuid DEFAULT public.uuid_generate_v4(), duration integer NOT NULL, interval_id interval_id NOT NULL, CONSTRAINT service_point_expiration_period_pkey PRIMARY KEY (id) From 47e2fd23601cf20af7fdf5c9dc85f87710f08f12 Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Thu, 30 Jan 2025 20:00:47 +0400 Subject: [PATCH 12/31] UXPROD-5090 add UT --- .../dcb/service/ServicePointServiceTest.java | 44 ++++++++++++------- 1 file changed, 29 insertions(+), 15 deletions(-) diff --git a/src/test/java/org/folio/dcb/service/ServicePointServiceTest.java b/src/test/java/org/folio/dcb/service/ServicePointServiceTest.java index 3638f2c6..5ac70606 100644 --- a/src/test/java/org/folio/dcb/service/ServicePointServiceTest.java +++ b/src/test/java/org/folio/dcb/service/ServicePointServiceTest.java @@ -1,6 +1,21 @@ package org.folio.dcb.service; +import static org.folio.dcb.utils.EntityUtils.createDcbPickup; +import static org.folio.dcb.utils.EntityUtils.createServicePointRequest; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import java.util.Collections; +import java.util.List; +import java.util.UUID; + import org.folio.dcb.client.feign.InventoryServicePointClient; +import org.folio.dcb.domain.dto.DcbPickup; +import org.folio.dcb.domain.dto.ServicePointRequest; import org.folio.dcb.repository.ServicePointExpirationPeriodRepository; import org.folio.dcb.service.impl.ServicePointServiceImpl; import org.folio.spring.model.ResultList; @@ -10,18 +25,6 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import java.util.Collections; -import java.util.List; -import java.util.UUID; - -import static org.folio.dcb.utils.EntityUtils.createDcbPickup; -import static org.folio.dcb.utils.EntityUtils.createServicePointRequest; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - @ExtendWith(MockitoExtension.class) class ServicePointServiceTest { @@ -38,7 +41,17 @@ class ServicePointServiceTest { private ServicePointExpirationPeriodRepository servicePointExpirationPeriodRepository; @Test - void createServicePointIfNotExistsTest(){ + void test() { + when(inventoryServicePointClient.getServicePointByName(any())) + .thenReturn(ResultList.of(0, List.of())); + when(servicePointExpirationPeriodRepository.findAll()).thenReturn(List.of()); + doNothing().when(calendarService).addServicePointIdToDefaultCalendar(any(UUID.class)); + ServicePointRequest servicePointIfNotExists = servicePointService.createServicePointIfNotExists( + DcbPickup.builder().build()); + } + + @Test + void createServicePointIfNotExistsTest() { when(inventoryServicePointClient.getServicePointByName(any())) .thenReturn(ResultList.of(0, List.of())); when(inventoryServicePointClient.createServicePoint(any())) @@ -52,7 +65,7 @@ void createServicePointIfNotExistsTest(){ } @Test - void createServicePointIfExistsTest(){ + void createServicePointIfExistsTest() { var servicePointRequest = createServicePointRequest(); var servicePointId = UUID.randomUUID().toString(); servicePointRequest.setId(servicePointId); @@ -62,7 +75,8 @@ void createServicePointIfExistsTest(){ assertEquals(servicePointId, response.getId()); verify(inventoryServicePointClient, never()).createServicePoint(any()); verify(inventoryServicePointClient).getServicePointByName(any()); - verify(calendarService).associateServicePointIdWithDefaultCalendarIfAbsent(UUID.fromString(response.getId())); + verify(calendarService).associateServicePointIdWithDefaultCalendarIfAbsent( + UUID.fromString(response.getId())); verify(calendarService, never()).addServicePointIdToDefaultCalendar(any()); } From 06c8906d71281be75c72b2e00a6adfeb50f3e5f6 Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Thu, 30 Jan 2025 20:18:23 +0400 Subject: [PATCH 13/31] UXPROD-5090 refactored --- .../changes/create-service-point-expiration-period-table.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/db/changelog/changes/create-service-point-expiration-period-table.sql b/src/main/resources/db/changelog/changes/create-service-point-expiration-period-table.sql index 629500ee..3493f7d2 100644 --- a/src/main/resources/db/changelog/changes/create-service-point-expiration-period-table.sql +++ b/src/main/resources/db/changelog/changes/create-service-point-expiration-period-table.sql @@ -2,7 +2,7 @@ DROP TYPE IF EXISTS interval_id; CREATE TYPE interval_id AS ENUM ('Minutes', 'Days', 'Weeks'); CREATE TABLE IF NOT EXISTS service_point_expiration_period ( - id uuid DEFAULT public.uuid_generate_v4(), + id uuid NOT NULL, duration integer NOT NULL, interval_id interval_id NOT NULL, CONSTRAINT service_point_expiration_period_pkey PRIMARY KEY (id) From 1eb7a0d5f52c9124a491d9850cd6c7fdbc773864 Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Thu, 30 Jan 2025 20:18:49 +0400 Subject: [PATCH 14/31] UXPROD-5090 refactored --- .../dcb/service/ServicePointServiceTest.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/test/java/org/folio/dcb/service/ServicePointServiceTest.java b/src/test/java/org/folio/dcb/service/ServicePointServiceTest.java index 5ac70606..2067a26f 100644 --- a/src/test/java/org/folio/dcb/service/ServicePointServiceTest.java +++ b/src/test/java/org/folio/dcb/service/ServicePointServiceTest.java @@ -40,15 +40,15 @@ class ServicePointServiceTest { @Mock private ServicePointExpirationPeriodRepository servicePointExpirationPeriodRepository; - @Test - void test() { - when(inventoryServicePointClient.getServicePointByName(any())) - .thenReturn(ResultList.of(0, List.of())); - when(servicePointExpirationPeriodRepository.findAll()).thenReturn(List.of()); - doNothing().when(calendarService).addServicePointIdToDefaultCalendar(any(UUID.class)); - ServicePointRequest servicePointIfNotExists = servicePointService.createServicePointIfNotExists( - DcbPickup.builder().build()); - } +// @Test +// void test() { +// when(inventoryServicePointClient.getServicePointByName(any())) +// .thenReturn(ResultList.of(0, List.of())); +// when(servicePointExpirationPeriodRepository.findAll()).thenReturn(List.of()); +// doNothing().when(calendarService).addServicePointIdToDefaultCalendar(any(UUID.class)); +// ServicePointRequest servicePointIfNotExists = servicePointService.createServicePointIfNotExists( +// DcbPickup.builder().build()); +// } @Test void createServicePointIfNotExistsTest() { From e4297ad81ed565e7c36a25692fe95ab754e617a5 Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Thu, 30 Jan 2025 20:58:43 +0400 Subject: [PATCH 15/31] UXPROD-5090 added tests coverage --- .../IntervalIdEnumConverterTest.java | 22 +++++++++ .../dcb/service/ServicePointServiceTest.java | 46 ++++++++++++++----- 2 files changed, 56 insertions(+), 12 deletions(-) create mode 100644 src/test/java/org/folio/dcb/domain/converter/IntervalIdEnumConverterTest.java diff --git a/src/test/java/org/folio/dcb/domain/converter/IntervalIdEnumConverterTest.java b/src/test/java/org/folio/dcb/domain/converter/IntervalIdEnumConverterTest.java new file mode 100644 index 00000000..25fb9086 --- /dev/null +++ b/src/test/java/org/folio/dcb/domain/converter/IntervalIdEnumConverterTest.java @@ -0,0 +1,22 @@ +package org.folio.dcb.domain.converter; + +import static org.junit.jupiter.api.Assertions.*; + +import org.folio.dcb.domain.dto.IntervalIdEnum; +import org.junit.jupiter.api.Test; + +class IntervalIdEnumConverterTest { + + private final IntervalIdEnumConverter converter = new IntervalIdEnumConverter(); + + + @Test + void convertToDatabaseColumnTest() { + assertEquals("Days", converter.convertToDatabaseColumn(IntervalIdEnum.DAYS)); + } + + @Test + void convertToEntityAttributeTest() { + assertEquals(IntervalIdEnum.DAYS , converter.convertToEntityAttribute("Days")); + } +} \ No newline at end of file diff --git a/src/test/java/org/folio/dcb/service/ServicePointServiceTest.java b/src/test/java/org/folio/dcb/service/ServicePointServiceTest.java index 2067a26f..8253a70c 100644 --- a/src/test/java/org/folio/dcb/service/ServicePointServiceTest.java +++ b/src/test/java/org/folio/dcb/service/ServicePointServiceTest.java @@ -4,18 +4,19 @@ import static org.folio.dcb.utils.EntityUtils.createServicePointRequest; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import java.lang.reflect.Method; import java.util.Collections; import java.util.List; import java.util.UUID; import org.folio.dcb.client.feign.InventoryServicePointClient; -import org.folio.dcb.domain.dto.DcbPickup; -import org.folio.dcb.domain.dto.ServicePointRequest; +import org.folio.dcb.domain.dto.HoldShelfExpiryPeriod; +import org.folio.dcb.domain.dto.IntervalIdEnum; +import org.folio.dcb.domain.entity.ServicePointExpirationPeriodEntity; import org.folio.dcb.repository.ServicePointExpirationPeriodRepository; import org.folio.dcb.service.impl.ServicePointServiceImpl; import org.folio.spring.model.ResultList; @@ -25,6 +26,8 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; +import lombok.SneakyThrows; + @ExtendWith(MockitoExtension.class) class ServicePointServiceTest { @@ -40,15 +43,34 @@ class ServicePointServiceTest { @Mock private ServicePointExpirationPeriodRepository servicePointExpirationPeriodRepository; -// @Test -// void test() { -// when(inventoryServicePointClient.getServicePointByName(any())) -// .thenReturn(ResultList.of(0, List.of())); -// when(servicePointExpirationPeriodRepository.findAll()).thenReturn(List.of()); -// doNothing().when(calendarService).addServicePointIdToDefaultCalendar(any(UUID.class)); -// ServicePointRequest servicePointIfNotExists = servicePointService.createServicePointIfNotExists( -// DcbPickup.builder().build()); -// } + @Test + @SneakyThrows + void shouldSetDefaultHoldShelfPeriodIfTableIsEmpty() { + when(servicePointExpirationPeriodRepository.findAll()).thenReturn(List.of()); + Method method = servicePointService.getClass() + .getDeclaredMethod("getShelfExpiryPeriod"); + method.setAccessible(true); + HoldShelfExpiryPeriod result = (HoldShelfExpiryPeriod) method.invoke(servicePointService); + assertEquals(10, result.getDuration()); + assertEquals(IntervalIdEnum.DAYS, result.getIntervalId()); + } + @Test + @SneakyThrows + void shouldSetCustomHoldShelfPeriodRelatedToValueFromTable() { + when(servicePointExpirationPeriodRepository.findAll()).thenReturn(List.of( + ServicePointExpirationPeriodEntity.builder() + .duration(3) + .intervalId(IntervalIdEnum.MINUTES) + .build() + )); + Method method = servicePointService.getClass() + .getDeclaredMethod("getShelfExpiryPeriod"); + method.setAccessible(true); + HoldShelfExpiryPeriod result = (HoldShelfExpiryPeriod) method.invoke(servicePointService); + assertEquals(3, result.getDuration()); + assertEquals(IntervalIdEnum.MINUTES, result.getIntervalId()); + } + @Test void createServicePointIfNotExistsTest() { From b7f36088fac2c76511b9c1a56d347cc39f3dab92 Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Thu, 30 Jan 2025 21:04:09 +0400 Subject: [PATCH 16/31] UXPROD-5090 sonar issues --- .../domain/entity/ServicePointExpirationPeriodEntity.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/main/java/org/folio/dcb/domain/entity/ServicePointExpirationPeriodEntity.java b/src/main/java/org/folio/dcb/domain/entity/ServicePointExpirationPeriodEntity.java index bdc344c7..c6265b5b 100644 --- a/src/main/java/org/folio/dcb/domain/entity/ServicePointExpirationPeriodEntity.java +++ b/src/main/java/org/folio/dcb/domain/entity/ServicePointExpirationPeriodEntity.java @@ -4,15 +4,10 @@ import java.util.UUID; import org.folio.dcb.domain.converter.IntervalIdEnumConverter; -import org.folio.dcb.domain.converter.UUIDConverter; -import org.folio.dcb.domain.dto.HoldShelfExpiryPeriod; import org.folio.dcb.domain.dto.IntervalIdEnum; -import org.folio.dcb.domain.dto.TransactionStatus; import jakarta.persistence.Convert; import jakarta.persistence.Entity; -import jakarta.persistence.EnumType; -import jakarta.persistence.Enumerated; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; From d489e652a23590d9687723600ac2655ee1f428fc Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Thu, 30 Jan 2025 21:25:53 +0400 Subject: [PATCH 17/31] UXPROD-5090 add additional logic --- .../org/folio/dcb/service/impl/ServicePointServiceImpl.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/folio/dcb/service/impl/ServicePointServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/ServicePointServiceImpl.java index e145ff25..aae0723e 100644 --- a/src/main/java/org/folio/dcb/service/impl/ServicePointServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/ServicePointServiceImpl.java @@ -51,7 +51,9 @@ public ServicePointRequest createServicePointIfNotExists(DcbPickup pickupService } else { log.info("createServicePointIfNotExists:: servicePoint Exists with name {}, hence reusing it", servicePointName); calendarService.associateServicePointIdWithDefaultCalendarIfAbsent(UUID.fromString(servicePointRequestList.get(0).getId())); - return servicePointRequestList.get(0); + ServicePointRequest servicePointRequest = servicePointRequestList.get(0); + servicePointRequest.setHoldShelfExpiryPeriod(getShelfExpiryPeriod()); + return servicePointRequest; } } From 6d98cddba9d8a5704e61e772b61b93ed79670bfc Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Thu, 30 Jan 2025 21:48:16 +0400 Subject: [PATCH 18/31] UXPROD-5090 add additional logic --- .../java/org/folio/dcb/service/impl/ServicePointServiceImpl.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/org/folio/dcb/service/impl/ServicePointServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/ServicePointServiceImpl.java index aae0723e..94a906ad 100644 --- a/src/main/java/org/folio/dcb/service/impl/ServicePointServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/ServicePointServiceImpl.java @@ -53,6 +53,7 @@ public ServicePointRequest createServicePointIfNotExists(DcbPickup pickupService calendarService.associateServicePointIdWithDefaultCalendarIfAbsent(UUID.fromString(servicePointRequestList.get(0).getId())); ServicePointRequest servicePointRequest = servicePointRequestList.get(0); servicePointRequest.setHoldShelfExpiryPeriod(getShelfExpiryPeriod()); + servicePointClient.createServicePoint(servicePointRequest); return servicePointRequest; } } From f7fc723b20d9a36f7d8d3e0daa4aa994f44d43d0 Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Thu, 30 Jan 2025 22:04:04 +0400 Subject: [PATCH 19/31] UXPROD-5090 refactored test --- .../java/org/folio/dcb/service/ServicePointServiceTest.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/test/java/org/folio/dcb/service/ServicePointServiceTest.java b/src/test/java/org/folio/dcb/service/ServicePointServiceTest.java index 8253a70c..417bab74 100644 --- a/src/test/java/org/folio/dcb/service/ServicePointServiceTest.java +++ b/src/test/java/org/folio/dcb/service/ServicePointServiceTest.java @@ -95,10 +95,9 @@ void createServicePointIfExistsTest() { .thenReturn(ResultList.of(0, List.of(servicePointRequest))); var response = servicePointService.createServicePointIfNotExists(createDcbPickup()); assertEquals(servicePointId, response.getId()); - verify(inventoryServicePointClient, never()).createServicePoint(any()); +// verify(inventoryServicePointClient, never()).createServicePoint(any()); verify(inventoryServicePointClient).getServicePointByName(any()); - verify(calendarService).associateServicePointIdWithDefaultCalendarIfAbsent( - UUID.fromString(response.getId())); + verify(calendarService).associateServicePointIdWithDefaultCalendarIfAbsent(UUID.fromString(response.getId())); verify(calendarService, never()).addServicePointIdToDefaultCalendar(any()); } From b3c7c00276337106081e3ae9f87ec57f3b37d9a9 Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Thu, 30 Jan 2025 22:29:39 +0400 Subject: [PATCH 20/31] UXPROD-5090 add update service point api calling --- .../folio/dcb/client/feign/InventoryServicePointClient.java | 3 +++ .../org/folio/dcb/service/impl/ServicePointServiceImpl.java | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/folio/dcb/client/feign/InventoryServicePointClient.java b/src/main/java/org/folio/dcb/client/feign/InventoryServicePointClient.java index 0cc9403a..9dde38de 100644 --- a/src/main/java/org/folio/dcb/client/feign/InventoryServicePointClient.java +++ b/src/main/java/org/folio/dcb/client/feign/InventoryServicePointClient.java @@ -7,11 +7,14 @@ 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; import org.springframework.web.bind.annotation.RequestBody; @FeignClient(name = "service-points", configuration = FeignClientConfiguration.class) public interface InventoryServicePointClient { + @PutMapping + void updateServicePointById(@PathVariable ("servicepointId") String servicePointId, @RequestBody ServicePointRequest servicePointRequest); @PostMapping ServicePointRequest createServicePoint(@RequestBody ServicePointRequest pickupServicePoint); @GetMapping("?query=name=={name}") diff --git a/src/main/java/org/folio/dcb/service/impl/ServicePointServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/ServicePointServiceImpl.java index 94a906ad..dbdbec49 100644 --- a/src/main/java/org/folio/dcb/service/impl/ServicePointServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/ServicePointServiceImpl.java @@ -53,7 +53,7 @@ public ServicePointRequest createServicePointIfNotExists(DcbPickup pickupService calendarService.associateServicePointIdWithDefaultCalendarIfAbsent(UUID.fromString(servicePointRequestList.get(0).getId())); ServicePointRequest servicePointRequest = servicePointRequestList.get(0); servicePointRequest.setHoldShelfExpiryPeriod(getShelfExpiryPeriod()); - servicePointClient.createServicePoint(servicePointRequest); + servicePointClient.updateServicePointById(servicePointRequest.getId(), servicePointRequest); return servicePointRequest; } } From 1da1a7928073afc4273f80a5b51b5bba71fc7689 Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Thu, 30 Jan 2025 23:53:58 +0400 Subject: [PATCH 21/31] UXPROD-5090 fixed --- descriptors/ModuleDescriptor-template.json | 2 ++ .../client/feign/InventoryServicePointClient.java | 5 +++-- src/test/resources/mappings/inventory.json | 12 ++++++++++++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/descriptors/ModuleDescriptor-template.json b/descriptors/ModuleDescriptor-template.json index 49dd4b03..f6ba0d24 100644 --- a/descriptors/ModuleDescriptor-template.json +++ b/descriptors/ModuleDescriptor-template.json @@ -91,6 +91,7 @@ "modulePermissions": [ "inventory-storage.service-points.item.post", "inventory-storage.service-points.collection.get", + "inventory-storage.service-points.item.put", "users.collection.get", "users.item.post", "usergroups.collection.get", @@ -233,6 +234,7 @@ "inventory-storage.holdings.item.post", "inventory-storage.locations.item.post", "inventory-storage.service-points.item.post", + "inventory-storage.service-points.item.put", "inventory-storage.location-units.libraries.collection.get", "inventory-storage.loan-types.collection.get", "inventory-storage.loan-types.collection.post", diff --git a/src/main/java/org/folio/dcb/client/feign/InventoryServicePointClient.java b/src/main/java/org/folio/dcb/client/feign/InventoryServicePointClient.java index 9dde38de..f494289f 100644 --- a/src/main/java/org/folio/dcb/client/feign/InventoryServicePointClient.java +++ b/src/main/java/org/folio/dcb/client/feign/InventoryServicePointClient.java @@ -13,8 +13,9 @@ @FeignClient(name = "service-points", configuration = FeignClientConfiguration.class) public interface InventoryServicePointClient { - @PutMapping - void updateServicePointById(@PathVariable ("servicepointId") String servicePointId, @RequestBody ServicePointRequest servicePointRequest); + @PutMapping("/{servicepointId}") + void updateServicePointById(@PathVariable ("servicepointId") String servicePointId, + @RequestBody ServicePointRequest servicePointRequest); @PostMapping ServicePointRequest createServicePoint(@RequestBody ServicePointRequest pickupServicePoint); @GetMapping("?query=name=={name}") diff --git a/src/test/resources/mappings/inventory.json b/src/test/resources/mappings/inventory.json index 71d22cc8..77288863 100644 --- a/src/test/resources/mappings/inventory.json +++ b/src/test/resources/mappings/inventory.json @@ -117,6 +117,18 @@ } } }, + { + "request": { + "method": "PUT", + "url": "/service-points/9d1b77e8-f02e-4b7f-b296-3f2042ddac55" + }, + "response": { + "status": 204, + "headers": { + "Content-Type": "application/json" + } + } + }, { "request": { "method": "POST", From 26bdb36b99e9777390623b815027373c63e9ab11 Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Fri, 31 Jan 2025 00:11:37 +0400 Subject: [PATCH 22/31] UXPROD-5090 fixed UT --- .../java/org/folio/dcb/service/ServicePointServiceTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/test/java/org/folio/dcb/service/ServicePointServiceTest.java b/src/test/java/org/folio/dcb/service/ServicePointServiceTest.java index 417bab74..0bd27e3d 100644 --- a/src/test/java/org/folio/dcb/service/ServicePointServiceTest.java +++ b/src/test/java/org/folio/dcb/service/ServicePointServiceTest.java @@ -5,6 +5,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.never; +import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -95,7 +96,7 @@ void createServicePointIfExistsTest() { .thenReturn(ResultList.of(0, List.of(servicePointRequest))); var response = servicePointService.createServicePointIfNotExists(createDcbPickup()); assertEquals(servicePointId, response.getId()); -// verify(inventoryServicePointClient, never()).createServicePoint(any()); + verify(inventoryServicePointClient, times(1)).updateServicePointById(any(), any()); verify(inventoryServicePointClient).getServicePointByName(any()); verify(calendarService).associateServicePointIdWithDefaultCalendarIfAbsent(UUID.fromString(response.getId())); verify(calendarService, never()).addServicePointIdToDefaultCalendar(any()); From 58369cf0dc9d701bb9fdfb3dd5e9dbe42173b1c8 Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Fri, 31 Jan 2025 11:27:08 +0400 Subject: [PATCH 23/31] UXPROD-5090 add time units --- .../changes/create-service-point-expiration-period-table.sql | 3 ++- src/main/resources/swagger.api/schemas/IntervalIdEnum.yaml | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/resources/db/changelog/changes/create-service-point-expiration-period-table.sql b/src/main/resources/db/changelog/changes/create-service-point-expiration-period-table.sql index 3493f7d2..d1c6986a 100644 --- a/src/main/resources/db/changelog/changes/create-service-point-expiration-period-table.sql +++ b/src/main/resources/db/changelog/changes/create-service-point-expiration-period-table.sql @@ -1,5 +1,6 @@ +DROP TABLE IF EXISTS service_point_expiration_period ; DROP TYPE IF EXISTS interval_id; -CREATE TYPE interval_id AS ENUM ('Minutes', 'Days', 'Weeks'); +CREATE TYPE interval_id AS ENUM ('Minutes', 'Hours', 'Days', 'Weeks', 'Months'); CREATE TABLE IF NOT EXISTS service_point_expiration_period ( id uuid NOT NULL, diff --git a/src/main/resources/swagger.api/schemas/IntervalIdEnum.yaml b/src/main/resources/swagger.api/schemas/IntervalIdEnum.yaml index a6d0eadf..c61be59d 100644 --- a/src/main/resources/swagger.api/schemas/IntervalIdEnum.yaml +++ b/src/main/resources/swagger.api/schemas/IntervalIdEnum.yaml @@ -2,5 +2,7 @@ IntervalIdEnum: type: string enum: - Minutes + - Hours - Days - - Week \ No newline at end of file + - Weeks + - Months \ No newline at end of file From 5ca87d8f413b55cb697f8e58b4c9fa08555402c7 Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Fri, 31 Jan 2025 12:51:47 +0400 Subject: [PATCH 24/31] UXPROD-5090 changed script --- .../changes/create-service-point-expiration-period-table.sql | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/resources/db/changelog/changes/create-service-point-expiration-period-table.sql b/src/main/resources/db/changelog/changes/create-service-point-expiration-period-table.sql index d1c6986a..6fdd8b98 100644 --- a/src/main/resources/db/changelog/changes/create-service-point-expiration-period-table.sql +++ b/src/main/resources/db/changelog/changes/create-service-point-expiration-period-table.sql @@ -1,4 +1,3 @@ -DROP TABLE IF EXISTS service_point_expiration_period ; DROP TYPE IF EXISTS interval_id; CREATE TYPE interval_id AS ENUM ('Minutes', 'Hours', 'Days', 'Weeks', 'Months'); CREATE TABLE IF NOT EXISTS service_point_expiration_period From 60b69cdfc38ac07c2e3884be97d1d73fb0b8f668 Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Wed, 5 Feb 2025 14:38:22 +0400 Subject: [PATCH 25/31] UXPROD-5090 extracted service added test cases --- .../ServicePointExpirationPeriodService.java | 9 +++ .../dcb/service/impl/CustomTenantService.java | 10 +-- ...rvicePointExpirationPeriodServiceImpl.java | 48 +++++++++++++ .../service/impl/ServicePointServiceImpl.java | 41 +++-------- ...rvicePointExpirationPeriodServiceTest.java | 71 +++++++++++++++++++ .../dcb/service/ServicePointServiceTest.java | 48 +++---------- 6 files changed, 153 insertions(+), 74 deletions(-) create mode 100644 src/main/java/org/folio/dcb/service/ServicePointExpirationPeriodService.java create mode 100644 src/main/java/org/folio/dcb/service/impl/ServicePointExpirationPeriodServiceImpl.java create mode 100644 src/test/java/org/folio/dcb/service/ServicePointExpirationPeriodServiceTest.java diff --git a/src/main/java/org/folio/dcb/service/ServicePointExpirationPeriodService.java b/src/main/java/org/folio/dcb/service/ServicePointExpirationPeriodService.java new file mode 100644 index 00000000..1511418e --- /dev/null +++ b/src/main/java/org/folio/dcb/service/ServicePointExpirationPeriodService.java @@ -0,0 +1,9 @@ +package org.folio.dcb.service; + +import org.folio.dcb.domain.dto.HoldShelfExpiryPeriod; + +public interface ServicePointExpirationPeriodService { + + HoldShelfExpiryPeriod getShelfExpiryPeriod(); + +} diff --git a/src/main/java/org/folio/dcb/service/impl/CustomTenantService.java b/src/main/java/org/folio/dcb/service/impl/CustomTenantService.java index ad85922b..d1cac4a0 100644 --- a/src/main/java/org/folio/dcb/service/impl/CustomTenantService.java +++ b/src/main/java/org/folio/dcb/service/impl/CustomTenantService.java @@ -12,12 +12,11 @@ import org.folio.dcb.client.feign.LocationUnitClient; import org.folio.dcb.client.feign.LocationsClient; import org.folio.dcb.domain.dto.Calendar; -import org.folio.dcb.domain.dto.HoldShelfExpiryPeriod; -import org.folio.dcb.domain.dto.IntervalIdEnum; import org.folio.dcb.domain.dto.NormalHours; import org.folio.dcb.domain.dto.ServicePointRequest; import org.folio.dcb.listener.kafka.service.KafkaService; import org.folio.dcb.service.CalendarService; +import org.folio.dcb.service.ServicePointExpirationPeriodService; import org.folio.spring.FolioExecutionContext; import org.folio.spring.liquibase.FolioSpringLiquibase; import org.folio.spring.service.PrepareSystemUserService; @@ -74,6 +73,7 @@ public class CustomTenantService extends TenantService { private final CancellationReasonClient cancellationReasonClient; private final LoanTypeClient loanTypeClient; private final CalendarService calendarService; + private final ServicePointExpirationPeriodService servicePointExpirationPeriodService; public CustomTenantService(JdbcTemplate jdbcTemplate, FolioExecutionContext context, FolioSpringLiquibase folioSpringLiquibase, @@ -81,7 +81,8 @@ public CustomTenantService(JdbcTemplate jdbcTemplate, FolioExecutionContext cont InstanceTypeClient instanceTypeClient, HoldingsStorageClient holdingsStorageClient, LocationsClient locationsClient, HoldingSourcesClient holdingSourcesClient, InventoryServicePointClient servicePointClient, LocationUnitClient locationUnitClient, - LoanTypeClient loanTypeClient, CancellationReasonClient cancellationReasonClient, CalendarService calendarService) { + LoanTypeClient loanTypeClient, CancellationReasonClient cancellationReasonClient, CalendarService calendarService, + ServicePointExpirationPeriodService servicePointExpirationPeriodService) { super(jdbcTemplate, context, folioSpringLiquibase); this.systemUserService = systemUserService; @@ -96,6 +97,7 @@ public CustomTenantService(JdbcTemplate jdbcTemplate, FolioExecutionContext cont this.loanTypeClient = loanTypeClient; this.cancellationReasonClient = cancellationReasonClient; this.calendarService = calendarService; + this.servicePointExpirationPeriodService = servicePointExpirationPeriodService; } @Override @@ -216,7 +218,7 @@ private void createServicePoint() { .code(CODE) .discoveryDisplayName(NAME) .pickupLocation(true) - .holdShelfExpiryPeriod(HoldShelfExpiryPeriod.builder().duration(3).intervalId(IntervalIdEnum.DAYS).build()) + .holdShelfExpiryPeriod(servicePointExpirationPeriodService.getShelfExpiryPeriod()) .holdShelfClosedLibraryDateManagement(HOLD_SHELF_CLOSED_LIBRARY_DATE_MANAGEMENT) .build(); diff --git a/src/main/java/org/folio/dcb/service/impl/ServicePointExpirationPeriodServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/ServicePointExpirationPeriodServiceImpl.java new file mode 100644 index 00000000..5905a0fc --- /dev/null +++ b/src/main/java/org/folio/dcb/service/impl/ServicePointExpirationPeriodServiceImpl.java @@ -0,0 +1,48 @@ +package org.folio.dcb.service.impl; + +import static org.folio.dcb.utils.DCBConstants.DEFAULT_SERVICE_POINT_PERIOD_DURATION; +import static org.folio.dcb.utils.DCBConstants.DEFAULT_SERVICE_POINT_PERIOD_INTERVAL; + +import java.util.List; + +import org.folio.dcb.domain.dto.HoldShelfExpiryPeriod; +import org.folio.dcb.domain.entity.ServicePointExpirationPeriodEntity; +import org.folio.dcb.repository.ServicePointExpirationPeriodRepository; +import org.folio.dcb.service.ServicePointExpirationPeriodService; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@Slf4j @RequiredArgsConstructor +@Service +public class ServicePointExpirationPeriodServiceImpl + implements ServicePointExpirationPeriodService { + + public static final HoldShelfExpiryPeriod DEFAULT_PERIOD = HoldShelfExpiryPeriod.builder() + .duration(DEFAULT_SERVICE_POINT_PERIOD_DURATION) + .intervalId(DEFAULT_SERVICE_POINT_PERIOD_INTERVAL) + .build(); + private final ServicePointExpirationPeriodRepository servicePointExpirationPeriodRepository; + + @Override + public HoldShelfExpiryPeriod getShelfExpiryPeriod() { + List periodList = servicePointExpirationPeriodRepository.findAll(); + if (CollectionUtils.isEmpty(periodList)) { + log.info("getShelfExpiryPeriod:: default hold shelf expire period will be set: {}", DEFAULT_PERIOD); + return DEFAULT_PERIOD; + } else { + var customPeriod = getCustomPeriod(periodList.get(0)); + log.info("getShelfExpiryPeriod:: custom hold shelf expire period will be set: {}", customPeriod); + return customPeriod; + } + } + + private HoldShelfExpiryPeriod getCustomPeriod(ServicePointExpirationPeriodEntity period) { + return HoldShelfExpiryPeriod.builder() + .duration(period.getDuration()) + .intervalId(period.getIntervalId()) + .build(); + } +} diff --git a/src/main/java/org/folio/dcb/service/impl/ServicePointServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/ServicePointServiceImpl.java index dbdbec49..32de3ced 100644 --- a/src/main/java/org/folio/dcb/service/impl/ServicePointServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/ServicePointServiceImpl.java @@ -1,9 +1,5 @@ package org.folio.dcb.service.impl; -import static org.folio.dcb.utils.DCBConstants.DEFAULT_SERVICE_POINT_PERIOD_DURATION; -import static org.folio.dcb.utils.DCBConstants.DEFAULT_SERVICE_POINT_PERIOD_INTERVAL; - -import java.util.List; import java.util.UUID; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; @@ -12,13 +8,11 @@ import org.folio.dcb.domain.dto.DcbPickup; import org.folio.dcb.domain.dto.HoldShelfExpiryPeriod; import org.folio.dcb.domain.dto.ServicePointRequest; -import org.folio.dcb.domain.entity.ServicePointExpirationPeriodEntity; -import org.folio.dcb.repository.ServicePointExpirationPeriodRepository; import org.folio.dcb.service.CalendarService; +import org.folio.dcb.service.ServicePointExpirationPeriodService; import org.folio.dcb.service.ServicePointService; import org.folio.util.StringUtil; import org.springframework.stereotype.Service; -import org.springframework.util.CollectionUtils; @Service @Log4j2 @@ -27,7 +21,7 @@ public class ServicePointServiceImpl implements ServicePointService { private final InventoryServicePointClient servicePointClient; private final CalendarService calendarService; - private final ServicePointExpirationPeriodRepository servicePointExpirationPeriodRepository; + private final ServicePointExpirationPeriodService servicePointExpirationPeriodService; public static final String HOLD_SHELF_CLOSED_LIBRARY_DATE_MANAGEMENT = "Keep_the_current_due_date"; @Override @@ -37,6 +31,7 @@ public ServicePointRequest createServicePointIfNotExists(DcbPickup pickupService pickupServicePoint.getServicePointName()); var servicePointRequestList = servicePointClient .getServicePointByName(StringUtil.cqlEncode(servicePointName)).getResult(); + var shelfExpiryPeriod = servicePointExpirationPeriodService.getShelfExpiryPeriod(); if (servicePointRequestList.isEmpty()) { String servicePointId = UUID.randomUUID().toString(); String servicePointCode = getServicePointCode(pickupServicePoint.getLibraryCode(), @@ -44,7 +39,7 @@ public ServicePointRequest createServicePointIfNotExists(DcbPickup pickupService log.info("createServicePointIfNotExists:: creating ServicePoint with id {}, name {} and code {}", servicePointId, servicePointName, servicePointCode); var servicePointRequest = createServicePointRequest(servicePointId, - servicePointName, servicePointCode); + servicePointName, servicePointCode, shelfExpiryPeriod); ServicePointRequest servicePointResponse = servicePointClient.createServicePoint(servicePointRequest); calendarService.addServicePointIdToDefaultCalendar(UUID.fromString(servicePointResponse.getId())); return servicePointResponse; @@ -52,45 +47,25 @@ public ServicePointRequest createServicePointIfNotExists(DcbPickup pickupService log.info("createServicePointIfNotExists:: servicePoint Exists with name {}, hence reusing it", servicePointName); calendarService.associateServicePointIdWithDefaultCalendarIfAbsent(UUID.fromString(servicePointRequestList.get(0).getId())); ServicePointRequest servicePointRequest = servicePointRequestList.get(0); - servicePointRequest.setHoldShelfExpiryPeriod(getShelfExpiryPeriod()); + servicePointRequest.setHoldShelfExpiryPeriod(shelfExpiryPeriod); servicePointClient.updateServicePointById(servicePointRequest.getId(), servicePointRequest); return servicePointRequest; } } - private ServicePointRequest createServicePointRequest(String id, String name, String code){ + private ServicePointRequest createServicePointRequest(String id, String name, String code, + HoldShelfExpiryPeriod shelfExpiryPeriod){ return ServicePointRequest.builder() .id(id) .name(name) .code(code) .discoveryDisplayName(name) .pickupLocation(true) - .holdShelfExpiryPeriod(getShelfExpiryPeriod()) + .holdShelfExpiryPeriod(shelfExpiryPeriod) .holdShelfClosedLibraryDateManagement(HOLD_SHELF_CLOSED_LIBRARY_DATE_MANAGEMENT) .build(); } - private HoldShelfExpiryPeriod getShelfExpiryPeriod() { - List periodList = servicePointExpirationPeriodRepository.findAll(); - return CollectionUtils.isEmpty(periodList) ? getDefaultPeriod() : getCustomPeriod(periodList.get(0)); - } - - private HoldShelfExpiryPeriod getCustomPeriod(ServicePointExpirationPeriodEntity period) { - return HoldShelfExpiryPeriod.builder() - .duration(period.getDuration()) - .intervalId(period.getIntervalId()) - .build(); - } - - private HoldShelfExpiryPeriod getDefaultPeriod() { - return HoldShelfExpiryPeriod.builder() - .duration(DEFAULT_SERVICE_POINT_PERIOD_DURATION) - .intervalId(DEFAULT_SERVICE_POINT_PERIOD_INTERVAL) - .build(); - } - - - private String getServicePointName(String libraryCode, String servicePointName){ return String.format("DCB_%s_%s", libraryCode, servicePointName); } diff --git a/src/test/java/org/folio/dcb/service/ServicePointExpirationPeriodServiceTest.java b/src/test/java/org/folio/dcb/service/ServicePointExpirationPeriodServiceTest.java new file mode 100644 index 00000000..2b2ea608 --- /dev/null +++ b/src/test/java/org/folio/dcb/service/ServicePointExpirationPeriodServiceTest.java @@ -0,0 +1,71 @@ +package org.folio.dcb.service; + +import static org.folio.dcb.service.impl.ServicePointExpirationPeriodServiceImpl.DEFAULT_PERIOD; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.when; + +import java.util.List; +import java.util.stream.Stream; + +import org.folio.dcb.domain.dto.HoldShelfExpiryPeriod; +import org.folio.dcb.domain.dto.IntervalIdEnum; +import org.folio.dcb.domain.entity.ServicePointExpirationPeriodEntity; +import org.folio.dcb.repository.ServicePointExpirationPeriodRepository; +import org.folio.dcb.service.impl.ServicePointExpirationPeriodServiceImpl; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +public class ServicePointExpirationPeriodServiceTest { + + @InjectMocks + private ServicePointExpirationPeriodServiceImpl servicePointExpirationPeriodService; + + @Mock + private ServicePointExpirationPeriodRepository servicePointExpirationPeriodRepository; + + @ParameterizedTest + @MethodSource + void getShelfExpiryPeriodTest(List periods, + HoldShelfExpiryPeriod expected) { + when(servicePointExpirationPeriodRepository.findAll()).thenReturn(periods); + HoldShelfExpiryPeriod actual = servicePointExpirationPeriodService.getShelfExpiryPeriod(); + assertEquals(expected, actual); + } + + private static Stream getShelfExpiryPeriodTest() { + return Stream.of( + Arguments.of(List.of(), DEFAULT_PERIOD), + Arguments.of(null, DEFAULT_PERIOD), + Arguments.of(buildServicePointExpirationPeriodList(2, IntervalIdEnum.MONTHS), + buildExpectedHoldShelfPeriod(2, IntervalIdEnum.MONTHS)), + Arguments.of(buildServicePointExpirationPeriodList(3, IntervalIdEnum.HOURS), + buildExpectedHoldShelfPeriod(3, IntervalIdEnum.HOURS)), + Arguments.of(buildServicePointExpirationPeriodList(4, IntervalIdEnum.MINUTES), + buildExpectedHoldShelfPeriod(4, IntervalIdEnum.MINUTES)) + + ); + } + + private static HoldShelfExpiryPeriod buildExpectedHoldShelfPeriod(int duration, + IntervalIdEnum intervalId) { + return HoldShelfExpiryPeriod.builder() + .duration(duration) + .intervalId(intervalId) + .build(); + } + + private static List buildServicePointExpirationPeriodList( + int duration, + IntervalIdEnum intervalId) { + return List.of(ServicePointExpirationPeriodEntity.builder() + .duration(duration) + .intervalId(intervalId) + .build()); + } +} diff --git a/src/test/java/org/folio/dcb/service/ServicePointServiceTest.java b/src/test/java/org/folio/dcb/service/ServicePointServiceTest.java index 0bd27e3d..2c65d366 100644 --- a/src/test/java/org/folio/dcb/service/ServicePointServiceTest.java +++ b/src/test/java/org/folio/dcb/service/ServicePointServiceTest.java @@ -1,5 +1,6 @@ package org.folio.dcb.service; +import static org.folio.dcb.service.impl.ServicePointExpirationPeriodServiceImpl.DEFAULT_PERIOD; import static org.folio.dcb.utils.EntityUtils.createDcbPickup; import static org.folio.dcb.utils.EntityUtils.createServicePointRequest; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -9,16 +10,12 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import java.lang.reflect.Method; -import java.util.Collections; import java.util.List; import java.util.UUID; import org.folio.dcb.client.feign.InventoryServicePointClient; import org.folio.dcb.domain.dto.HoldShelfExpiryPeriod; import org.folio.dcb.domain.dto.IntervalIdEnum; -import org.folio.dcb.domain.entity.ServicePointExpirationPeriodEntity; -import org.folio.dcb.repository.ServicePointExpirationPeriodRepository; import org.folio.dcb.service.impl.ServicePointServiceImpl; import org.folio.spring.model.ResultList; import org.junit.jupiter.api.Test; @@ -27,8 +24,6 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import lombok.SneakyThrows; - @ExtendWith(MockitoExtension.class) class ServicePointServiceTest { @@ -42,36 +37,7 @@ class ServicePointServiceTest { private CalendarService calendarService; @Mock - private ServicePointExpirationPeriodRepository servicePointExpirationPeriodRepository; - - @Test - @SneakyThrows - void shouldSetDefaultHoldShelfPeriodIfTableIsEmpty() { - when(servicePointExpirationPeriodRepository.findAll()).thenReturn(List.of()); - Method method = servicePointService.getClass() - .getDeclaredMethod("getShelfExpiryPeriod"); - method.setAccessible(true); - HoldShelfExpiryPeriod result = (HoldShelfExpiryPeriod) method.invoke(servicePointService); - assertEquals(10, result.getDuration()); - assertEquals(IntervalIdEnum.DAYS, result.getIntervalId()); - } - @Test - @SneakyThrows - void shouldSetCustomHoldShelfPeriodRelatedToValueFromTable() { - when(servicePointExpirationPeriodRepository.findAll()).thenReturn(List.of( - ServicePointExpirationPeriodEntity.builder() - .duration(3) - .intervalId(IntervalIdEnum.MINUTES) - .build() - )); - Method method = servicePointService.getClass() - .getDeclaredMethod("getShelfExpiryPeriod"); - method.setAccessible(true); - HoldShelfExpiryPeriod result = (HoldShelfExpiryPeriod) method.invoke(servicePointService); - assertEquals(3, result.getDuration()); - assertEquals(IntervalIdEnum.MINUTES, result.getIntervalId()); - } - + private ServicePointExpirationPeriodService servicePointExpirationPeriodService; @Test void createServicePointIfNotExistsTest() { @@ -79,7 +45,7 @@ void createServicePointIfNotExistsTest() { .thenReturn(ResultList.of(0, List.of())); when(inventoryServicePointClient.createServicePoint(any())) .thenReturn(createServicePointRequest()); - when(servicePointExpirationPeriodRepository.findAll()).thenReturn(Collections.emptyList()); + when(servicePointExpirationPeriodService.getShelfExpiryPeriod()).thenReturn(DEFAULT_PERIOD); var response = servicePointService.createServicePointIfNotExists(createDcbPickup()); verify(inventoryServicePointClient).createServicePoint(any()); verify(inventoryServicePointClient).getServicePointByName(any()); @@ -94,8 +60,16 @@ void createServicePointIfExistsTest() { servicePointRequest.setId(servicePointId); when(inventoryServicePointClient.getServicePointByName(any())) .thenReturn(ResultList.of(0, List.of(servicePointRequest))); + when(servicePointExpirationPeriodService.getShelfExpiryPeriod()).thenReturn( + HoldShelfExpiryPeriod.builder() + .duration(2) + .intervalId(IntervalIdEnum.MONTHS) + .build() + ); var response = servicePointService.createServicePointIfNotExists(createDcbPickup()); assertEquals(servicePointId, response.getId()); + assertEquals(2, response.getHoldShelfExpiryPeriod().getDuration()); + assertEquals(IntervalIdEnum.MONTHS, response.getHoldShelfExpiryPeriod().getIntervalId()); verify(inventoryServicePointClient, times(1)).updateServicePointById(any(), any()); verify(inventoryServicePointClient).getServicePointByName(any()); verify(calendarService).associateServicePointIdWithDefaultCalendarIfAbsent(UUID.fromString(response.getId())); From 043ba90bd96ec55dc4fd108242d09d9e8600c319 Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Wed, 5 Feb 2025 15:07:57 +0400 Subject: [PATCH 26/31] UXPROD-5090 refactored tests --- .../ServicePointExpirationPeriodService.java | 2 -- .../ServicePointExpirationPeriodServiceImpl.java | 13 +++++-------- src/main/java/org/folio/dcb/utils/DCBConstants.java | 6 ++++++ .../ServicePointExpirationPeriodServiceTest.java | 7 ++----- .../folio/dcb/service/ServicePointServiceTest.java | 9 +++++---- 5 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/main/java/org/folio/dcb/service/ServicePointExpirationPeriodService.java b/src/main/java/org/folio/dcb/service/ServicePointExpirationPeriodService.java index 1511418e..107fe9ac 100644 --- a/src/main/java/org/folio/dcb/service/ServicePointExpirationPeriodService.java +++ b/src/main/java/org/folio/dcb/service/ServicePointExpirationPeriodService.java @@ -3,7 +3,5 @@ import org.folio.dcb.domain.dto.HoldShelfExpiryPeriod; public interface ServicePointExpirationPeriodService { - HoldShelfExpiryPeriod getShelfExpiryPeriod(); - } diff --git a/src/main/java/org/folio/dcb/service/impl/ServicePointExpirationPeriodServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/ServicePointExpirationPeriodServiceImpl.java index 5905a0fc..5d476aca 100644 --- a/src/main/java/org/folio/dcb/service/impl/ServicePointExpirationPeriodServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/ServicePointExpirationPeriodServiceImpl.java @@ -1,7 +1,6 @@ package org.folio.dcb.service.impl; -import static org.folio.dcb.utils.DCBConstants.DEFAULT_SERVICE_POINT_PERIOD_DURATION; -import static org.folio.dcb.utils.DCBConstants.DEFAULT_SERVICE_POINT_PERIOD_INTERVAL; +import static org.folio.dcb.utils.DCBConstants.DEFAULT_PERIOD; import java.util.List; @@ -20,21 +19,19 @@ public class ServicePointExpirationPeriodServiceImpl implements ServicePointExpirationPeriodService { - public static final HoldShelfExpiryPeriod DEFAULT_PERIOD = HoldShelfExpiryPeriod.builder() - .duration(DEFAULT_SERVICE_POINT_PERIOD_DURATION) - .intervalId(DEFAULT_SERVICE_POINT_PERIOD_INTERVAL) - .build(); private final ServicePointExpirationPeriodRepository servicePointExpirationPeriodRepository; @Override public HoldShelfExpiryPeriod getShelfExpiryPeriod() { List periodList = servicePointExpirationPeriodRepository.findAll(); if (CollectionUtils.isEmpty(periodList)) { - log.info("getShelfExpiryPeriod:: default hold shelf expire period will be set: {}", DEFAULT_PERIOD); + log.info("getShelfExpiryPeriod:: default hold shelf expire period will be set: {}", + DEFAULT_PERIOD); return DEFAULT_PERIOD; } else { var customPeriod = getCustomPeriod(periodList.get(0)); - log.info("getShelfExpiryPeriod:: custom hold shelf expire period will be set: {}", customPeriod); + log.info("getShelfExpiryPeriod:: custom hold shelf expire period will be set: {}", + customPeriod); return customPeriod; } } diff --git a/src/main/java/org/folio/dcb/utils/DCBConstants.java b/src/main/java/org/folio/dcb/utils/DCBConstants.java index 4484e676..ab5c3a15 100644 --- a/src/main/java/org/folio/dcb/utils/DCBConstants.java +++ b/src/main/java/org/folio/dcb/utils/DCBConstants.java @@ -1,5 +1,6 @@ package org.folio.dcb.utils; +import org.folio.dcb.domain.dto.HoldShelfExpiryPeriod; import org.folio.dcb.domain.dto.IntervalIdEnum; import org.folio.dcb.domain.dto.ItemStatus; @@ -40,4 +41,9 @@ private DCBConstants() {} public static final List holdItemStatus = List.of(IN_TRANSIT, CHECKED_OUT, PAGED, AWAITING_PICKUP, AWAITING_DELIVERY); public static final int DEFAULT_SERVICE_POINT_PERIOD_DURATION = 10; public static final IntervalIdEnum DEFAULT_SERVICE_POINT_PERIOD_INTERVAL = IntervalIdEnum.DAYS; + public static final HoldShelfExpiryPeriod DEFAULT_PERIOD = HoldShelfExpiryPeriod.builder() + .duration(DEFAULT_SERVICE_POINT_PERIOD_DURATION) + .intervalId(DEFAULT_SERVICE_POINT_PERIOD_INTERVAL) + .build(); + } diff --git a/src/test/java/org/folio/dcb/service/ServicePointExpirationPeriodServiceTest.java b/src/test/java/org/folio/dcb/service/ServicePointExpirationPeriodServiceTest.java index 2b2ea608..93de7e70 100644 --- a/src/test/java/org/folio/dcb/service/ServicePointExpirationPeriodServiceTest.java +++ b/src/test/java/org/folio/dcb/service/ServicePointExpirationPeriodServiceTest.java @@ -1,6 +1,5 @@ package org.folio.dcb.service; -import static org.folio.dcb.service.impl.ServicePointExpirationPeriodServiceImpl.DEFAULT_PERIOD; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.when; @@ -12,6 +11,7 @@ import org.folio.dcb.domain.entity.ServicePointExpirationPeriodEntity; import org.folio.dcb.repository.ServicePointExpirationPeriodRepository; import org.folio.dcb.service.impl.ServicePointExpirationPeriodServiceImpl; +import org.folio.dcb.utils.DCBConstants; import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; @@ -22,10 +22,8 @@ @ExtendWith(MockitoExtension.class) public class ServicePointExpirationPeriodServiceTest { - @InjectMocks private ServicePointExpirationPeriodServiceImpl servicePointExpirationPeriodService; - @Mock private ServicePointExpirationPeriodRepository servicePointExpirationPeriodRepository; @@ -40,8 +38,7 @@ void getShelfExpiryPeriodTest(List periods, private static Stream getShelfExpiryPeriodTest() { return Stream.of( - Arguments.of(List.of(), DEFAULT_PERIOD), - Arguments.of(null, DEFAULT_PERIOD), + Arguments.of(List.of(), DCBConstants.DEFAULT_PERIOD), Arguments.of(buildServicePointExpirationPeriodList(2, IntervalIdEnum.MONTHS), buildExpectedHoldShelfPeriod(2, IntervalIdEnum.MONTHS)), Arguments.of(buildServicePointExpirationPeriodList(3, IntervalIdEnum.HOURS), diff --git a/src/test/java/org/folio/dcb/service/ServicePointServiceTest.java b/src/test/java/org/folio/dcb/service/ServicePointServiceTest.java index 2c65d366..468952eb 100644 --- a/src/test/java/org/folio/dcb/service/ServicePointServiceTest.java +++ b/src/test/java/org/folio/dcb/service/ServicePointServiceTest.java @@ -1,6 +1,5 @@ package org.folio.dcb.service; -import static org.folio.dcb.service.impl.ServicePointExpirationPeriodServiceImpl.DEFAULT_PERIOD; import static org.folio.dcb.utils.EntityUtils.createDcbPickup; import static org.folio.dcb.utils.EntityUtils.createServicePointRequest; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -17,6 +16,7 @@ import org.folio.dcb.domain.dto.HoldShelfExpiryPeriod; import org.folio.dcb.domain.dto.IntervalIdEnum; import org.folio.dcb.service.impl.ServicePointServiceImpl; +import org.folio.dcb.utils.DCBConstants; import org.folio.spring.model.ResultList; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -37,7 +37,7 @@ class ServicePointServiceTest { private CalendarService calendarService; @Mock - private ServicePointExpirationPeriodService servicePointExpirationPeriodService; + private static ServicePointExpirationPeriodService servicePointExpirationPeriodService; @Test void createServicePointIfNotExistsTest() { @@ -45,7 +45,7 @@ void createServicePointIfNotExistsTest() { .thenReturn(ResultList.of(0, List.of())); when(inventoryServicePointClient.createServicePoint(any())) .thenReturn(createServicePointRequest()); - when(servicePointExpirationPeriodService.getShelfExpiryPeriod()).thenReturn(DEFAULT_PERIOD); + when(servicePointExpirationPeriodService.getShelfExpiryPeriod()).thenReturn(DCBConstants.DEFAULT_PERIOD); var response = servicePointService.createServicePointIfNotExists(createDcbPickup()); verify(inventoryServicePointClient).createServicePoint(any()); verify(inventoryServicePointClient).getServicePointByName(any()); @@ -72,7 +72,8 @@ void createServicePointIfExistsTest() { assertEquals(IntervalIdEnum.MONTHS, response.getHoldShelfExpiryPeriod().getIntervalId()); verify(inventoryServicePointClient, times(1)).updateServicePointById(any(), any()); verify(inventoryServicePointClient).getServicePointByName(any()); - verify(calendarService).associateServicePointIdWithDefaultCalendarIfAbsent(UUID.fromString(response.getId())); + verify(calendarService).associateServicePointIdWithDefaultCalendarIfAbsent( + UUID.fromString(response.getId())); verify(calendarService, never()).addServicePointIdToDefaultCalendar(any()); } From 7e8af3d6defc0a62676416386f8a268c1ce29e5b Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Wed, 5 Feb 2025 15:34:49 +0400 Subject: [PATCH 27/31] UXPROD-5090 repaired existed tests --- .../org/folio/dcb/service/CustomTenantServiceTest.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/test/java/org/folio/dcb/service/CustomTenantServiceTest.java b/src/test/java/org/folio/dcb/service/CustomTenantServiceTest.java index d3e81416..47289074 100644 --- a/src/test/java/org/folio/dcb/service/CustomTenantServiceTest.java +++ b/src/test/java/org/folio/dcb/service/CustomTenantServiceTest.java @@ -25,6 +25,7 @@ import java.util.UUID; import static org.folio.dcb.utils.DCBConstants.DCB_CALENDAR_NAME; +import static org.folio.dcb.utils.DCBConstants.DEFAULT_PERIOD; import static org.folio.dcb.utils.EntityUtils.getCalendarCollection; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.never; @@ -57,6 +58,8 @@ class CustomTenantServiceTest { private LoanTypeClient loanTypeClient; @Mock private CancellationReasonClient cancellationReasonClient; + @Mock + private ServicePointExpirationPeriodService servicePointExpirationPeriodService; @Mock private CalendarService calendarService; @@ -73,6 +76,7 @@ void shouldPrepareSystemUser() { when(servicePointClient.getServicePointByName(any())).thenReturn(new ResultList<>()); when(locationsClient.queryLocationsByName(any())).thenReturn(new ResultList<>()); when(loanTypeClient.queryLoanTypeByName(any())).thenReturn(new ResultList<>()); + when(servicePointExpirationPeriodService.getShelfExpiryPeriod()).thenReturn(DEFAULT_PERIOD); service.createOrUpdateTenant(new TenantAttributes()); verify(systemUserService).setupSystemUser(); @@ -88,6 +92,7 @@ void testHoldingsCreationWhileEnablingTenant() { when(locationsClient.queryLocationsByName(any())).thenReturn(new ResultList<>()); when(loanTypeClient.queryLoanTypeByName(any())).thenReturn(new ResultList<>()); when(holdingsStorageClient.findHolding(any())).thenReturn(HoldingsStorageClient.Holding.builder().build()); + when(servicePointExpirationPeriodService.getShelfExpiryPeriod()).thenReturn(DEFAULT_PERIOD); service.createOrUpdateTenant(new TenantAttributes()); verify(systemUserService).setupSystemUser(); @@ -122,6 +127,8 @@ void testCalendarCreation_DefaultCalendarNotExists() { when(loanTypeClient.queryLoanTypeByName(any())).thenReturn(new ResultList<>()); when(holdingsStorageClient.findHolding(any())).thenReturn(HoldingsStorageClient.Holding.builder().build()); when(calendarService.findCalendarByName(DCB_CALENDAR_NAME)).thenReturn(null); + when(servicePointExpirationPeriodService.getShelfExpiryPeriod()).thenReturn(DEFAULT_PERIOD); + when(servicePointExpirationPeriodService.getShelfExpiryPeriod()).thenReturn(DEFAULT_PERIOD); service.createOrUpdateTenant(new TenantAttributes()); verify(calendarService).createCalendar(any()); @@ -138,6 +145,7 @@ void testCalendarCreation_DefaultCalendarExists() { when(loanTypeClient.queryLoanTypeByName(any())).thenReturn(new ResultList<>()); when(holdingsStorageClient.findHolding(any())).thenReturn(HoldingsStorageClient.Holding.builder().build()); when(calendarService.findCalendarByName(DCB_CALENDAR_NAME)).thenReturn(null); + when(servicePointExpirationPeriodService.getShelfExpiryPeriod()).thenReturn(DEFAULT_PERIOD); when(calendarService.findCalendarByName(DCB_CALENDAR_NAME)).thenReturn(getCalendarCollection(DCB_CALENDAR_NAME).getCalendars().get(0)); service.createOrUpdateTenant(new TenantAttributes()); From 46842e8e5704e064277c582853ef0bf7e07aaa8d Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Wed, 5 Feb 2025 16:24:57 +0400 Subject: [PATCH 28/31] UXPROD-509 sonar issue --- .../dcb/service/ServicePointExpirationPeriodServiceTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/org/folio/dcb/service/ServicePointExpirationPeriodServiceTest.java b/src/test/java/org/folio/dcb/service/ServicePointExpirationPeriodServiceTest.java index 93de7e70..69706e77 100644 --- a/src/test/java/org/folio/dcb/service/ServicePointExpirationPeriodServiceTest.java +++ b/src/test/java/org/folio/dcb/service/ServicePointExpirationPeriodServiceTest.java @@ -21,7 +21,7 @@ import org.mockito.junit.jupiter.MockitoExtension; @ExtendWith(MockitoExtension.class) -public class ServicePointExpirationPeriodServiceTest { +class ServicePointExpirationPeriodServiceTest { @InjectMocks private ServicePointExpirationPeriodServiceImpl servicePointExpirationPeriodService; @Mock From 448d5a246856b8ecc7856ed238b2b4fef01a661b Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Thu, 6 Feb 2025 10:36:23 +0400 Subject: [PATCH 29/31] UXPROD-5090 refactored after review --- .../java/org/folio/dcb/controller/TransactionApiController.java | 1 - .../org/folio/dcb/service/impl/ServicePointServiceImpl.java | 1 - .../folio/dcb/domain/converter/IntervalIdEnumConverterTest.java | 2 +- 3 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/org/folio/dcb/controller/TransactionApiController.java b/src/main/java/org/folio/dcb/controller/TransactionApiController.java index a856a34b..dd569b76 100644 --- a/src/main/java/org/folio/dcb/controller/TransactionApiController.java +++ b/src/main/java/org/folio/dcb/controller/TransactionApiController.java @@ -22,7 +22,6 @@ public class TransactionApiController implements TransactionsApi { private final TransactionsService transactionsService; private final TransactionAuditService transactionAuditService; - @Override public ResponseEntity getTransactionStatusById(String dcbTransactionId) { log.info("getTransactionStatus:: by id {} ", dcbTransactionId); diff --git a/src/main/java/org/folio/dcb/service/impl/ServicePointServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/ServicePointServiceImpl.java index 32de3ced..3a3a5a77 100644 --- a/src/main/java/org/folio/dcb/service/impl/ServicePointServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/ServicePointServiceImpl.java @@ -3,7 +3,6 @@ import java.util.UUID; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; - import org.folio.dcb.client.feign.InventoryServicePointClient; import org.folio.dcb.domain.dto.DcbPickup; import org.folio.dcb.domain.dto.HoldShelfExpiryPeriod; diff --git a/src/test/java/org/folio/dcb/domain/converter/IntervalIdEnumConverterTest.java b/src/test/java/org/folio/dcb/domain/converter/IntervalIdEnumConverterTest.java index 25fb9086..81e8bfec 100644 --- a/src/test/java/org/folio/dcb/domain/converter/IntervalIdEnumConverterTest.java +++ b/src/test/java/org/folio/dcb/domain/converter/IntervalIdEnumConverterTest.java @@ -1,6 +1,6 @@ package org.folio.dcb.domain.converter; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; import org.folio.dcb.domain.dto.IntervalIdEnum; import org.junit.jupiter.api.Test; From 725b21582fb1ed4bd21e2e6288556b1c285af6a1 Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Fri, 7 Feb 2025 14:05:19 +0400 Subject: [PATCH 30/31] UXPROD-5090 refactored table --- .../changes/create-service-point-expiration-period-table.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/db/changelog/changes/create-service-point-expiration-period-table.sql b/src/main/resources/db/changelog/changes/create-service-point-expiration-period-table.sql index 6fdd8b98..4cacb543 100644 --- a/src/main/resources/db/changelog/changes/create-service-point-expiration-period-table.sql +++ b/src/main/resources/db/changelog/changes/create-service-point-expiration-period-table.sql @@ -2,7 +2,7 @@ DROP TYPE IF EXISTS interval_id; CREATE TYPE interval_id AS ENUM ('Minutes', 'Hours', 'Days', 'Weeks', 'Months'); CREATE TABLE IF NOT EXISTS service_point_expiration_period ( - id uuid NOT NULL, + id uuid NOT NULL DEFAULT gen_random_uuid(), duration integer NOT NULL, interval_id interval_id NOT NULL, CONSTRAINT service_point_expiration_period_pkey PRIMARY KEY (id) From 22655caadfc1752012fe80fca619c8074898a081 Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Fri, 7 Feb 2025 16:06:17 +0400 Subject: [PATCH 31/31] UXPROD-5090 updated readme file --- README.md | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) diff --git a/README.md b/README.md index bde31087..ba736ea1 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,7 @@ Version 2.0. See the file "[LICENSE](LICENSE)" for more information. - [Issue tracker](#issue-tracker) - [API documentation](#api-documentation) - [Code analysis](#code-analysis) + - [Service point hold shelf period expiration](#service-point-hold-shelf-period-expiration) - [Other documentation](#other-documentation) ## Introduction @@ -113,6 +114,74 @@ This module's [API documentation](https://dev.folio.org/reference/api/#mod-dcb). ### Code analysis +### Service Point Hold Shelf Period Expiration + +When creating a **DCB** transaction with the roles **LENDER** or **BORROWING-PICKUP**, +the creation of the **DCB** service point and its property **hold shelf expiration period** +depends on the values stored in the `service_point_expiration_period` table in the database. + +- If the table is empty, the **hold shelf expiration period** will be set to the default value of **10 Days**. +- If the table contains a value, the stored value will be used instead. + +The **F.S.E. team** is responsible for updating the values in this table. +To update the values, the following PL/pgSQL script can be executed: + +```sql +DO +$$ +DECLARE + schema_name TEXT; + new_duration INTEGER := 3; -- Duration in weeks + new_interval_id interval_id := 'Weeks'; -- Interval type + raw_id UUID; + sql_query TEXT; +BEGIN + FOR schema_name IN + SELECT schemaname + FROM pg_tables + WHERE tablename = 'service_point_expiration_period' + LOOP + -- Select a single ID into raw_id dynamically + sql_query := format( + 'SELECT id FROM %I.service_point_expiration_period LIMIT 1', + schema_name + ); + EXECUTE sql_query INTO raw_id; + + -- If no record exists, insert one; otherwise, update the existing record + IF raw_id IS NULL THEN + sql_query := format( + 'INSERT INTO %I.service_point_expiration_period (id, duration, interval_id) + VALUES (gen_random_uuid(), %L, %L)', + schema_name, new_duration, new_interval_id + ); + ELSE + sql_query := format( + 'UPDATE %I.service_point_expiration_period + SET duration = %L, interval_id = %L + WHERE id = %L', + schema_name, new_duration, new_interval_id, raw_id + ); + END IF; + + -- Execute the query + EXECUTE sql_query; + END LOOP; +END; +$$ +LANGUAGE plpgsql; +``` +**Updating Values in the Table** +To update the values, simply modify the new_duration and new_interval_id variables in the DECLARE section +of the script to reflect the new values. + +**Expiration Period Handling** +For Existing Service Points +When creating a new transaction with an existing DCB service point, the hold shelf expiration period +will be checked. +If the value in the transaction payload differs from the value stored +in the database, it will be updated accordingly. + [SonarQube analysis](https://sonarcloud.io/project/overview?id=org.folio:mod-dcb). ## Other documentation