From fb116979851a5d186e27b23df76ed1381b02041c Mon Sep 17 00:00:00 2001 From: Vignesh-Kalyanasundaram Date: Thu, 5 Sep 2024 16:40:26 +0530 Subject: [PATCH 01/10] MODDCB-119 Creating default calendar and add virtualServicePointId to calendar --- .../dcb/client/feign/CalendarClient.java | 27 +++++++ .../folio/dcb/service/CalendarService.java | 14 ++++ .../dcb/service/impl/CalendarServiceImpl.java | 49 +++++++++++++ .../dcb/service/impl/CustomTenantService.java | 40 ++++++++++- .../service/impl/ServicePointServiceImpl.java | 8 ++- .../org/folio/dcb/utils/DCBConstants.java | 1 + .../swagger.api/dcb_transaction.yaml | 2 + .../swagger.api/schemas/Calendar.yaml | 72 +++++++++++++++++++ 8 files changed, 210 insertions(+), 3 deletions(-) create mode 100644 src/main/java/org/folio/dcb/client/feign/CalendarClient.java create mode 100644 src/main/java/org/folio/dcb/service/CalendarService.java create mode 100644 src/main/java/org/folio/dcb/service/impl/CalendarServiceImpl.java create mode 100644 src/main/resources/swagger.api/schemas/Calendar.yaml diff --git a/src/main/java/org/folio/dcb/client/feign/CalendarClient.java b/src/main/java/org/folio/dcb/client/feign/CalendarClient.java new file mode 100644 index 00000000..6b7c9a45 --- /dev/null +++ b/src/main/java/org/folio/dcb/client/feign/CalendarClient.java @@ -0,0 +1,27 @@ +package org.folio.dcb.client.feign; + +import org.folio.dcb.domain.dto.Calendar; +import org.folio.dcb.domain.dto.CalendarCollection; +import org.folio.spring.config.FeignClientConfiguration; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.UUID; + +@FeignClient(name = "calendar", configuration = FeignClientConfiguration.class) +public interface CalendarClient { + @PostMapping("/calendars") + Calendar createCalendar(@RequestBody Calendar calendar); + + @PutMapping("/calendars/{calendarId}") + Calendar updateCalendar(@PathVariable("calendarId") UUID calendarId, @RequestBody Calendar calendar); + + @GetMapping("/calendars") + CalendarCollection getAllCalendars(@RequestParam("limit") Integer limit); + +} diff --git a/src/main/java/org/folio/dcb/service/CalendarService.java b/src/main/java/org/folio/dcb/service/CalendarService.java new file mode 100644 index 00000000..fda5a809 --- /dev/null +++ b/src/main/java/org/folio/dcb/service/CalendarService.java @@ -0,0 +1,14 @@ +package org.folio.dcb.service; + +import org.folio.dcb.domain.dto.Calendar; + +import java.util.UUID; + +public interface CalendarService { + Calendar findCalendarByName(String name); + + Calendar createCalendar(Calendar calendar); + + void findAndAddServicePointIdToCalendar(String calendarName, UUID servicePointIdList); + +} diff --git a/src/main/java/org/folio/dcb/service/impl/CalendarServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/CalendarServiceImpl.java new file mode 100644 index 00000000..55d4bec6 --- /dev/null +++ b/src/main/java/org/folio/dcb/service/impl/CalendarServiceImpl.java @@ -0,0 +1,49 @@ +package org.folio.dcb.service.impl; + +import lombok.RequiredArgsConstructor; +import lombok.extern.log4j.Log4j2; +import org.folio.dcb.client.feign.CalendarClient; +import org.folio.dcb.domain.dto.Calendar; +import org.folio.dcb.service.CalendarService; +import org.springframework.stereotype.Service; + +import java.util.UUID; + +@Service +@RequiredArgsConstructor +@Log4j2 +public class CalendarServiceImpl implements CalendarService { + private final CalendarClient calendarClient; + + @Override + public Calendar findCalendarByName(String calendarName) { + log.debug("findCalendarByName:: Trying to find the calendar with name {}", calendarName); + return calendarClient.getAllCalendars(Integer.MAX_VALUE) + .getCalendars() + .stream() + .filter(calendar -> calendar.getName().equals(calendarName)) + .findFirst() + .orElse(null); + } + + @Override + public Calendar createCalendar(Calendar calendar) { + log.debug("createCalendar:: Creating new calendar with details {}", calendar); + return calendarClient.createCalendar(calendar); + } + + @Override + public void findAndAddServicePointIdToCalendar(String calendarName, UUID servicePointId) { + log.debug("updateCalendarWithServicePointList:: find calendar by name {} to update servicePointId {}", + calendarName, servicePointId); + var calendar = findCalendarByName(calendarName); + if (calendar != null) { + calendar.getAssignments().add(servicePointId); + calendarClient.updateCalendar(calendar.getId(), calendar); + } else { + log.warn("findAndAddServicePointIdToCalendar:: Calendar with name {} is not found", calendarName); + throw new IllegalArgumentException("Calendar with name " + calendarName + " is not found"); + } + } + +} 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 34f7e0e9..169dc94f 100644 --- a/src/main/java/org/folio/dcb/service/impl/CustomTenantService.java +++ b/src/main/java/org/folio/dcb/service/impl/CustomTenantService.java @@ -11,9 +11,12 @@ import org.folio.dcb.client.feign.LoanTypeClient; 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.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.spring.FolioExecutionContext; import org.folio.spring.liquibase.FolioSpringLiquibase; import org.folio.spring.service.PrepareSystemUserService; @@ -24,13 +27,18 @@ import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Service; +import java.time.DayOfWeek; +import java.time.LocalDate; +import java.time.LocalTime; import java.util.Collections; +import java.util.List; import java.util.UUID; import static org.folio.dcb.service.impl.ServicePointServiceImpl.HOLD_SHELF_CLOSED_LIBRARY_DATE_MANAGEMENT; import static org.folio.dcb.utils.DCBConstants.CAMPUS_ID; import static org.folio.dcb.utils.DCBConstants.CANCELLATION_REASON_ID; import static org.folio.dcb.utils.DCBConstants.CODE; +import static org.folio.dcb.utils.DCBConstants.DCB_CALENDAR_NAME; import static org.folio.dcb.utils.DCBConstants.DCB_CANCELLATION_REASON_NAME; import static org.folio.dcb.utils.DCBConstants.HOLDING_ID; import static org.folio.dcb.utils.DCBConstants.HOLDING_SOURCE; @@ -64,10 +72,15 @@ public class CustomTenantService extends TenantService { private final LocationUnitClient locationUnitClient; private final CancellationReasonClient cancellationReasonClient; private final LoanTypeClient loanTypeClient; + private final CalendarService calendarService; - public CustomTenantService(JdbcTemplate jdbcTemplate, FolioExecutionContext context, - FolioSpringLiquibase folioSpringLiquibase, PrepareSystemUserService systemUserService, KafkaService kafkaService, InstanceClient inventoryClient, InstanceTypeClient instanceTypeClient, HoldingsStorageClient holdingsStorageClient, LocationsClient locationsClient, HoldingSourcesClient holdingSourcesClient, InventoryServicePointClient servicePointClient, LocationUnitClient locationUnitClient, LoanTypeClient loanTypeClient, CancellationReasonClient cancellationReasonClient) { + public CustomTenantService(JdbcTemplate jdbcTemplate, FolioExecutionContext context, FolioSpringLiquibase folioSpringLiquibase, + PrepareSystemUserService systemUserService, KafkaService kafkaService, InstanceClient inventoryClient, + InstanceTypeClient instanceTypeClient, HoldingsStorageClient holdingsStorageClient, + LocationsClient locationsClient, HoldingSourcesClient holdingSourcesClient, + InventoryServicePointClient servicePointClient, LocationUnitClient locationUnitClient, + LoanTypeClient loanTypeClient, CancellationReasonClient cancellationReasonClient, CalendarService calendarService) { super(jdbcTemplate, context, folioSpringLiquibase); this.systemUserService = systemUserService; @@ -81,6 +94,7 @@ public CustomTenantService(JdbcTemplate jdbcTemplate, FolioExecutionContext cont this.locationUnitClient = locationUnitClient; this.loanTypeClient = loanTypeClient; this.cancellationReasonClient = cancellationReasonClient; + this.calendarService = calendarService; } @Override @@ -98,6 +112,7 @@ protected void afterTenantUpdate(TenantAttributes tenantAttributes) { createHolding(); createCancellationReason(); createLoanType(); + createCalendarIfNotExists(); } private void createLoanType() { @@ -276,4 +291,25 @@ private void createCancellationReason(){ log.info("createCancellationReason:: cancellation reason created"); } } + + private void createCalendarIfNotExists() { + Calendar calendar = calendarService.findCalendarByName(DCB_CALENDAR_NAME); + if (calendar == null) { + log.info("createCalendarIfNotExists:: calendar with name {} doesn't exists, so creating new calendar", DCB_CALENDAR_NAME); + Calendar newCalendar = Calendar.builder() + .name(DCB_CALENDAR_NAME) + .startDate(LocalDate.now()) + .endDate(LocalDate.now().plusYears(10)) + .normalHours(List.of(NormalHours.builder() + .startDay(DayOfWeek.SUNDAY.name()) + .startTime(LocalTime.of(0, 0).toString()) + .endDay(DayOfWeek.SATURDAY.toString()) + .endTime(LocalTime.of(23, 59).toString()) + .build())) + .build(); + calendarService.createCalendar(newCalendar); + } else { + log.info("createCalendarIfNotExists:: calendar with name {} already exists", DCB_CALENDAR_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 d87f3e9f..400cd49a 100644 --- a/src/main/java/org/folio/dcb/service/impl/ServicePointServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/ServicePointServiceImpl.java @@ -7,15 +7,19 @@ 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.service.CalendarService; import org.folio.dcb.service.ServicePointService; import org.springframework.stereotype.Service; +import static org.folio.dcb.utils.DCBConstants.DCB_CALENDAR_NAME; + @Service @Log4j2 @RequiredArgsConstructor public class ServicePointServiceImpl implements ServicePointService { private final InventoryServicePointClient servicePointClient; + private final CalendarService calendarService; public static final String HOLD_SHELF_CLOSED_LIBRARY_DATE_MANAGEMENT = "Keep_the_current_due_date"; @Override @@ -33,7 +37,9 @@ public ServicePointRequest createServicePointIfNotExists(DcbPickup pickupService servicePointId, servicePointName, servicePointCode); var servicePointRequest = createServicePointRequest(servicePointId, servicePointName, servicePointCode); - return servicePointClient.createServicePoint(servicePointRequest); + ServicePointRequest servicePointResponse = servicePointClient.createServicePoint(servicePointRequest); + calendarService.findAndAddServicePointIdToCalendar(DCB_CALENDAR_NAME, UUID.fromString(servicePointId)); + return servicePointResponse; } else { log.info("createServicePointIfNotExists:: servicePoint Exists with name {}, hence reusing it", servicePointName); return servicePointRequestList.get(0); diff --git a/src/main/java/org/folio/dcb/utils/DCBConstants.java b/src/main/java/org/folio/dcb/utils/DCBConstants.java index 07bede1c..12bca85e 100644 --- a/src/main/java/org/folio/dcb/utils/DCBConstants.java +++ b/src/main/java/org/folio/dcb/utils/DCBConstants.java @@ -25,4 +25,5 @@ private DCBConstants() {} public static final String DCB_TYPE = "dcb"; public static final String SHADOW_TYPE = "shadow"; public static final String HOLDING_SOURCE = "folio"; + public static final String DCB_CALENDAR_NAME = "DCB Calendar"; } diff --git a/src/main/resources/swagger.api/dcb_transaction.yaml b/src/main/resources/swagger.api/dcb_transaction.yaml index 1822380f..21c3d176 100644 --- a/src/main/resources/swagger.api/dcb_transaction.yaml +++ b/src/main/resources/swagger.api/dcb_transaction.yaml @@ -208,3 +208,5 @@ components: $ref: 'schemas/CirculationItem.yaml#/CirculationItemCollection' MaterialTypeCollection: $ref: 'schemas/MaterialType.yaml#/MaterialTypeCollection' + CalendarCollection: + $ref: 'schemas/Calendar.yaml#/CalendarCollection' diff --git a/src/main/resources/swagger.api/schemas/Calendar.yaml b/src/main/resources/swagger.api/schemas/Calendar.yaml new file mode 100644 index 00000000..dcc6a998 --- /dev/null +++ b/src/main/resources/swagger.api/schemas/Calendar.yaml @@ -0,0 +1,72 @@ +CalendarCollection: + description: Collection of calendars + type: object + properties: + calendars: + type: array + description: Each calendar returned in the response + items: + $ref: "Calendar.yaml#/Calendar" + totalRecords: + type: integer + description: Number of calendars in the response +Calendar: + description: A single calendar + type: object + properties: + id: + description: A unique UUID identifying this calendar + type: string + format: uuid + name: + description: A user-provided name used to label this calendar + type: string + startDate: + type: string + format: date + description: The first effective date (inclusive, YYYY-MM-DD) of this calendar + endDate: + type: string + format: date + description: The first effective date (inclusive, YYYY-MM-DD) of this calendar + assignments: + description: A list of all service points that this calendar is assigned to + type: array + items: + type: string + format: uuid + description: A UUID uniquely identifying a service point + normalHours: + description: A list of objects describing when the calendar is normally open + type: array + items: + $ref: "Calendar.yaml#/NormalHours" +NormalHours: + description: A range of hours when a calendar is open + type: object + properties: + calendarId: + description: The UUID of the calendar which these hours are for + type: string + format: uuid + startDay: + description: The first weekday (inclusive) of this range + $ref: 'Calendar.yaml#/Weekday' + startTime: + description: The time when this opening starts, inclusive + type: string + format: time + endDay: + description: The last weekday (inclusive) of this range + $ref: 'Calendar.yaml#/Weekday' + endTime: + description: + The last minute of this opening, inclusive (11:59 if it should be open at 11:59 and closed at + 12:00) + type: string + format: time +Weekday: + description: + A day of the week. Either SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, or SATURDAY + type: string + format: Weekday From 8ad8b1a322333f978ee058185d78215347f7aa98 Mon Sep 17 00:00:00 2001 From: Vignesh-Kalyanasundaram Date: Fri, 6 Sep 2024 12:14:58 +0530 Subject: [PATCH 02/10] MODDCB-119 Adding dependency and permission of calendar in ModuleDescriptor-template.json --- descriptors/ModuleDescriptor-template.json | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/descriptors/ModuleDescriptor-template.json b/descriptors/ModuleDescriptor-template.json index 85350a3e..44e2f9d6 100644 --- a/descriptors/ModuleDescriptor-template.json +++ b/descriptors/ModuleDescriptor-template.json @@ -65,6 +65,10 @@ { "id": "instance-types", "version": "2.0" + }, + { + "id": "calendar", + "version": "5.0" } ], "provides": [ @@ -98,7 +102,9 @@ "inventory-storage.loan-types.collection.get", "circulation-storage.requests.item.get", "circulation-storage.cancellation-reasons.item.get", - "circulation-storage.cancellation-reasons.item.post" + "circulation-storage.cancellation-reasons.item.post", + "calendar.endpoint.calendars.get", + "calendar.endpoint.calendars.calendarId.put" ] }, { @@ -177,7 +183,9 @@ "inventory-storage.loan-types.collection.post", "inventory-storage.loan-types.item.post", "circulation-storage.cancellation-reasons.item.get", - "circulation-storage.cancellation-reasons.item.post" + "circulation-storage.cancellation-reasons.item.post", + "calendar.endpoint.calendars.get", + "calendar.endpoint.calendars.post" ] }, { From 9a35b415e2808e6c3876712a5e707611722fba90 Mon Sep 17 00:00:00 2001 From: Vignesh-Kalyanasundaram Date: Fri, 6 Sep 2024 12:23:29 +0530 Subject: [PATCH 03/10] MODDCB-119 Fix servicePoints null issue --- .../java/org/folio/dcb/service/impl/CustomTenantService.java | 1 + 1 file changed, 1 insertion(+) 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 169dc94f..d3610d11 100644 --- a/src/main/java/org/folio/dcb/service/impl/CustomTenantService.java +++ b/src/main/java/org/folio/dcb/service/impl/CustomTenantService.java @@ -306,6 +306,7 @@ private void createCalendarIfNotExists() { .endDay(DayOfWeek.SATURDAY.toString()) .endTime(LocalTime.of(23, 59).toString()) .build())) + .assignments(List.of()) .build(); calendarService.createCalendar(newCalendar); } else { From c78c4ae535cb02048a8545178d0a78b9416b7926 Mon Sep 17 00:00:00 2001 From: Vignesh-Kalyanasundaram Date: Fri, 6 Sep 2024 13:41:10 +0530 Subject: [PATCH 04/10] MODDCB-119 Fix assignments null issue --- .../dcb/service/impl/CustomTenantService.java | 1 + .../swagger.api/schemas/Calendar.yaml | 53 +++++++++++++++++++ 2 files changed, 54 insertions(+) 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 d3610d11..71dcd181 100644 --- a/src/main/java/org/folio/dcb/service/impl/CustomTenantService.java +++ b/src/main/java/org/folio/dcb/service/impl/CustomTenantService.java @@ -307,6 +307,7 @@ private void createCalendarIfNotExists() { .endTime(LocalTime.of(23, 59).toString()) .build())) .assignments(List.of()) + .exceptions(List.of()) .build(); calendarService.createCalendar(newCalendar); } else { diff --git a/src/main/resources/swagger.api/schemas/Calendar.yaml b/src/main/resources/swagger.api/schemas/Calendar.yaml index dcc6a998..cdaefe9e 100644 --- a/src/main/resources/swagger.api/schemas/Calendar.yaml +++ b/src/main/resources/swagger.api/schemas/Calendar.yaml @@ -41,6 +41,11 @@ Calendar: type: array items: $ref: "Calendar.yaml#/NormalHours" + exceptions: + description: A list of objects describing exceptions to the normal hours + type: array + items: + $ref: "Calendar.yaml#/ExceptionRange" NormalHours: description: A range of hours when a calendar is open type: object @@ -70,3 +75,51 @@ Weekday: A day of the week. Either SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, or SATURDAY type: string format: Weekday +ExceptionRange: + description: An exception to a calendar, consisting of a set of openings (or none if a closure) + type: object + properties: + calendarId: + description: The UUID of the calendar which this exception is for + type: string + format: uuid + name: + description: A user-provided label for this exception + type: string + startDate: + description: The first effective date (inclusive, YYYY-MM-DD) of this exception range + type: string + format: date + endDate: + description: The first effective date (inclusive, YYYY-MM-DD) of this exception range + type: string + format: date + openings: + description: The openings during this exception + type: array + items: + $ref: "Calendar.yaml#/ExceptionalOpening" +ExceptionalOpening: + description: An opening as part of an exception + type: object + properties: + exceptionId: + description: The UUID of the exception which this opening is for + type: string + format: uuid + startDate: + description: The first effective date (inclusive, YYYY-MM-DD) of this opening + type: string + format: date + startTime: + description: The first opening time (inclusive) of this opening + type: string + format: time + endDate: + description: The first effective date (inclusive, YYYY-MM-DD) of this opening + type: string + format: date + endTime: + description: The last open time (inclusive) of this opening + type: string + format: time From 90e17d24e9395744899c1107b9faf6c5d4d097b2 Mon Sep 17 00:00:00 2001 From: Vignesh-Kalyanasundaram Date: Fri, 6 Sep 2024 18:24:41 +0530 Subject: [PATCH 05/10] MODDCB-119 Updating servicePoint with calendar if it is not assigned --- .../folio/dcb/service/CalendarService.java | 4 +- .../dcb/service/impl/CalendarServiceImpl.java | 53 ++++++++++++++++--- .../service/impl/ServicePointServiceImpl.java | 3 +- 3 files changed, 51 insertions(+), 9 deletions(-) diff --git a/src/main/java/org/folio/dcb/service/CalendarService.java b/src/main/java/org/folio/dcb/service/CalendarService.java index fda5a809..08ca9893 100644 --- a/src/main/java/org/folio/dcb/service/CalendarService.java +++ b/src/main/java/org/folio/dcb/service/CalendarService.java @@ -9,6 +9,8 @@ public interface CalendarService { Calendar createCalendar(Calendar calendar); - void findAndAddServicePointIdToCalendar(String calendarName, UUID servicePointIdList); + void addServicePointIdToCalendar(String calendarName, UUID servicePointId); + + void associateServicePointIdWithDefaultCalendarIfAbsent(UUID servicePointId); } diff --git a/src/main/java/org/folio/dcb/service/impl/CalendarServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/CalendarServiceImpl.java index 55d4bec6..b7876677 100644 --- a/src/main/java/org/folio/dcb/service/impl/CalendarServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/CalendarServiceImpl.java @@ -7,8 +7,11 @@ import org.folio.dcb.service.CalendarService; import org.springframework.stereotype.Service; +import java.util.List; import java.util.UUID; +import static org.folio.dcb.utils.DCBConstants.DCB_CALENDAR_NAME; + @Service @RequiredArgsConstructor @Log4j2 @@ -18,12 +21,8 @@ public class CalendarServiceImpl implements CalendarService { @Override public Calendar findCalendarByName(String calendarName) { log.debug("findCalendarByName:: Trying to find the calendar with name {}", calendarName); - return calendarClient.getAllCalendars(Integer.MAX_VALUE) - .getCalendars() - .stream() - .filter(calendar -> calendar.getName().equals(calendarName)) - .findFirst() - .orElse(null); + var calendars = getAllCalendars(); + return findCalendarByName(calendars, calendarName); } @Override @@ -33,10 +32,14 @@ public Calendar createCalendar(Calendar calendar) { } @Override - public void findAndAddServicePointIdToCalendar(String calendarName, UUID servicePointId) { + public void addServicePointIdToCalendar(String calendarName, UUID servicePointId) { log.debug("updateCalendarWithServicePointList:: find calendar by name {} to update servicePointId {}", calendarName, servicePointId); var calendar = findCalendarByName(calendarName); + updateCalendarIfExists(calendarName, servicePointId, calendar); + } + + private void updateCalendarIfExists(String calendarName, UUID servicePointId, Calendar calendar) { if (calendar != null) { calendar.getAssignments().add(servicePointId); calendarClient.updateCalendar(calendar.getId(), calendar); @@ -46,4 +49,40 @@ public void findAndAddServicePointIdToCalendar(String calendarName, UUID service } } + @Override + public void associateServicePointIdWithDefaultCalendarIfAbsent(UUID servicePointId) { + var calendars = getAllCalendars(); + if (checkServicePointIdAssociatedWithAnyCalendar(calendars, servicePointId)) { + log.info("associateServicePointIdWithDefaultCalendarIfAbsent:: servicePointId {} is already " + + "associated with calendar", servicePointId); + } else { + log.info("associateServicePointIdWithDefaultCalendarIfAbsent:: servicePointId {} is not " + + "associated with any calendar. so associating with default calendar", servicePointId); + var defaultDcbCalendar = findCalendarByName(calendars, DCB_CALENDAR_NAME); + updateCalendarIfExists(DCB_CALENDAR_NAME, servicePointId, defaultDcbCalendar); + } + } + + private List getAllCalendars() { + log.debug("getAllCalendars:: Fetching all calendars"); + return calendarClient.getAllCalendars(Integer.MAX_VALUE) + .getCalendars(); + } + + private Calendar findCalendarByName(List calendars, String calendarName) { + log.debug("findCalendarByName:: Finding calendar with name {} from calendarList {}", calendarName, calendars); + return calendars + .stream() + .filter(calendar -> calendar.getName().equals(calendarName)) + .findFirst() + .orElse(null); + } + + private boolean checkServicePointIdAssociatedWithAnyCalendar(List calendars, UUID servicePointId) { + log.debug("checkServicePointIdAssociatedWithAnyCalendar:: checking servicePointId {} associated with " + + "any calendar {}", servicePointId, calendars); + return calendars.stream() + .anyMatch(calendar -> calendar.getAssignments().contains(servicePointId)); + } + } 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 400cd49a..fa92b528 100644 --- a/src/main/java/org/folio/dcb/service/impl/ServicePointServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/ServicePointServiceImpl.java @@ -38,10 +38,11 @@ public ServicePointRequest createServicePointIfNotExists(DcbPickup pickupService var servicePointRequest = createServicePointRequest(servicePointId, servicePointName, servicePointCode); ServicePointRequest servicePointResponse = servicePointClient.createServicePoint(servicePointRequest); - calendarService.findAndAddServicePointIdToCalendar(DCB_CALENDAR_NAME, UUID.fromString(servicePointId)); + calendarService.addServicePointIdToCalendar(DCB_CALENDAR_NAME, UUID.fromString(servicePointId)); return servicePointResponse; } else { log.info("createServicePointIfNotExists:: servicePoint Exists with name {}, hence reusing it", servicePointName); + calendarService.associateServicePointIdWithDefaultCalendarIfAbsent(UUID.fromString(servicePointRequestList.get(0).getId())); return servicePointRequestList.get(0); } } From 69a528b2ebe16a11126aeeea6922518b9ed1e268 Mon Sep 17 00:00:00 2001 From: Vignesh-Kalyanasundaram Date: Tue, 10 Sep 2024 16:35:26 +0530 Subject: [PATCH 06/10] MODDCB-119 Adding test cases --- .../folio/dcb/service/CalendarService.java | 30 ++++- .../dcb/service/impl/CalendarServiceImpl.java | 10 +- .../dcb/service/impl/CustomTenantService.java | 10 +- .../service/impl/ServicePointServiceImpl.java | 4 +- .../dcb/service/CalendarServiceTest.java | 111 ++++++++++++++++++ .../dcb/service/ServicePointServiceTest.java | 9 +- .../java/org/folio/dcb/utils/EntityUtils.java | 17 +++ src/test/resources/mappings/calendar.json | 43 +++++++ 8 files changed, 219 insertions(+), 15 deletions(-) create mode 100644 src/test/java/org/folio/dcb/service/CalendarServiceTest.java create mode 100644 src/test/resources/mappings/calendar.json diff --git a/src/main/java/org/folio/dcb/service/CalendarService.java b/src/main/java/org/folio/dcb/service/CalendarService.java index 08ca9893..6f4574bf 100644 --- a/src/main/java/org/folio/dcb/service/CalendarService.java +++ b/src/main/java/org/folio/dcb/service/CalendarService.java @@ -5,12 +5,40 @@ import java.util.UUID; public interface CalendarService { + /** + * Finds a calendar by its name. + * + * @param name the name of the calendar to find. + * @return the {@link Calendar} object with the specified name, + * or {@code null} if no such calendar is found. + */ Calendar findCalendarByName(String name); + /** + * Creates a new calendar. + * + * @param calendar the {@link Calendar} object to be created. + * @return the created {@link Calendar} object. + */ Calendar createCalendar(Calendar calendar); - void addServicePointIdToCalendar(String calendarName, UUID servicePointId); + /** + * Adds a service point ID with a default calendar. + * If the calendar is found, the service point ID is added to the calendar's assignments. + * + * @param servicePointId the unique identifier of the service point to add. + * @throws IllegalArgumentException if the default calendar name is not found. + */ + void addServicePointIdToDefaultCalendar(UUID servicePointId); + /** + * Associates a service point ID with a default calendar if it is not already associated + * with any calendar. Checks existing calendars and adds the service point ID to the + * default calendar if absent. + * + * @param servicePointId the unique identifier of the service point to associate. + * @throws IllegalArgumentException if the default calendar name is not found. + */ void associateServicePointIdWithDefaultCalendarIfAbsent(UUID servicePointId); } diff --git a/src/main/java/org/folio/dcb/service/impl/CalendarServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/CalendarServiceImpl.java index b7876677..44d18ccc 100644 --- a/src/main/java/org/folio/dcb/service/impl/CalendarServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/CalendarServiceImpl.java @@ -32,11 +32,11 @@ public Calendar createCalendar(Calendar calendar) { } @Override - public void addServicePointIdToCalendar(String calendarName, UUID servicePointId) { + public void addServicePointIdToDefaultCalendar(UUID servicePointId) { log.debug("updateCalendarWithServicePointList:: find calendar by name {} to update servicePointId {}", - calendarName, servicePointId); - var calendar = findCalendarByName(calendarName); - updateCalendarIfExists(calendarName, servicePointId, calendar); + DCB_CALENDAR_NAME, servicePointId); + var calendar = findCalendarByName(DCB_CALENDAR_NAME); + updateCalendarIfExists(DCB_CALENDAR_NAME, servicePointId, calendar); } private void updateCalendarIfExists(String calendarName, UUID servicePointId, Calendar calendar) { @@ -73,7 +73,7 @@ private Calendar findCalendarByName(List calendars, String calendarNam log.debug("findCalendarByName:: Finding calendar with name {} from calendarList {}", calendarName, calendars); return calendars .stream() - .filter(calendar -> calendar.getName().equals(calendarName)) + .filter(calendar -> calendar.getName().equals(calendarName)) .findFirst() .orElse(null); } 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 71dcd181..b8bfc82f 100644 --- a/src/main/java/org/folio/dcb/service/impl/CustomTenantService.java +++ b/src/main/java/org/folio/dcb/service/impl/CustomTenantService.java @@ -301,11 +301,11 @@ private void createCalendarIfNotExists() { .startDate(LocalDate.now()) .endDate(LocalDate.now().plusYears(10)) .normalHours(List.of(NormalHours.builder() - .startDay(DayOfWeek.SUNDAY.name()) - .startTime(LocalTime.of(0, 0).toString()) - .endDay(DayOfWeek.SATURDAY.toString()) - .endTime(LocalTime.of(23, 59).toString()) - .build())) + .startDay(DayOfWeek.SUNDAY.name()) + .startTime(LocalTime.of(0, 0).toString()) + .endDay(DayOfWeek.SATURDAY.toString()) + .endTime(LocalTime.of(23, 59).toString()) + .build())) .assignments(List.of()) .exceptions(List.of()) .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 fa92b528..29f39c36 100644 --- a/src/main/java/org/folio/dcb/service/impl/ServicePointServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/ServicePointServiceImpl.java @@ -11,8 +11,6 @@ import org.folio.dcb.service.ServicePointService; import org.springframework.stereotype.Service; -import static org.folio.dcb.utils.DCBConstants.DCB_CALENDAR_NAME; - @Service @Log4j2 @RequiredArgsConstructor @@ -38,7 +36,7 @@ public ServicePointRequest createServicePointIfNotExists(DcbPickup pickupService var servicePointRequest = createServicePointRequest(servicePointId, servicePointName, servicePointCode); ServicePointRequest servicePointResponse = servicePointClient.createServicePoint(servicePointRequest); - calendarService.addServicePointIdToCalendar(DCB_CALENDAR_NAME, UUID.fromString(servicePointId)); + calendarService.addServicePointIdToDefaultCalendar(UUID.fromString(servicePointResponse.getId())); return servicePointResponse; } else { log.info("createServicePointIfNotExists:: servicePoint Exists with name {}, hence reusing it", servicePointName); diff --git a/src/test/java/org/folio/dcb/service/CalendarServiceTest.java b/src/test/java/org/folio/dcb/service/CalendarServiceTest.java new file mode 100644 index 00000000..67878f68 --- /dev/null +++ b/src/test/java/org/folio/dcb/service/CalendarServiceTest.java @@ -0,0 +1,111 @@ +package org.folio.dcb.service; + +import org.folio.dcb.client.feign.CalendarClient; +import org.folio.dcb.domain.dto.Calendar; +import org.folio.dcb.service.impl.CalendarServiceImpl; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.util.UUID; + +import static org.folio.dcb.utils.DCBConstants.SERVICE_POINT_ID; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.folio.dcb.utils.DCBConstants.DCB_CALENDAR_NAME; +import static org.folio.dcb.utils.EntityUtils.getCalendarCollection; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertThrows; +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 CalendarServiceTest { + @InjectMocks + private CalendarServiceImpl calendarService; + + @Mock + private CalendarClient calendarClient; + + @Test + void testCreateCalendar() { + var calendar = new Calendar(); + calendarService.createCalendar(calendar); + verify(calendarClient).createCalendar(calendar); + } + + @Test + void testFindCalendarByName() { + when(calendarClient.getAllCalendars(Integer.MAX_VALUE)) + .thenReturn(getCalendarCollection(DCB_CALENDAR_NAME)); + var response = calendarService.findCalendarByName(DCB_CALENDAR_NAME); + verify(calendarClient).getAllCalendars(Integer.MAX_VALUE); + assertNotNull(response); + assertEquals(DCB_CALENDAR_NAME, response.getName()); + } + + @Test + void testFindCalendar_InvalidName() { + when(calendarClient.getAllCalendars(Integer.MAX_VALUE)) + .thenReturn(getCalendarCollection(DCB_CALENDAR_NAME)); + var response = calendarService.findCalendarByName(""); + verify(calendarClient).getAllCalendars(Integer.MAX_VALUE); + assertNull(response); + } + + @Test + void testAddServicePointIdToDefaultCalendar() { + when(calendarClient.getAllCalendars(Integer.MAX_VALUE)) + .thenReturn(getCalendarCollection(DCB_CALENDAR_NAME)); + calendarService.addServicePointIdToDefaultCalendar(UUID.fromString(SERVICE_POINT_ID)); + verify(calendarClient).getAllCalendars(Integer.MAX_VALUE); + verify(calendarClient).updateCalendar(any(), any()); + } + + @Test + void testAddServicePointIdToDefaultCalendar_DefaultCalendarNotExists() { + when(calendarClient.getAllCalendars(Integer.MAX_VALUE)) + .thenReturn(getCalendarCollection("test")); + var servicePointId = UUID.randomUUID(); + assertThrows(IllegalArgumentException.class, + () -> calendarService.addServicePointIdToDefaultCalendar(servicePointId)); + } + + @Test + void testAssociateServicePointIdWithDefaultCalendar_SpNotAssociated() { + when(calendarClient.getAllCalendars(Integer.MAX_VALUE)) + .thenReturn(getCalendarCollection(DCB_CALENDAR_NAME)); + var servicePointId = UUID.randomUUID(); + calendarService.associateServicePointIdWithDefaultCalendarIfAbsent(servicePointId); + verify(calendarClient).getAllCalendars(Integer.MAX_VALUE); + verify(calendarClient).updateCalendar(any(), any()); + } + + @Test + void testAssociateServicePointIdWithDefaultCalendar_SpAssociated() { + var servicePointId = UUID.randomUUID(); + var calendarCollection = getCalendarCollection(DCB_CALENDAR_NAME); + // Adding the sp in assignments to make sure that our code will not try to update the calendar again + calendarCollection.getCalendars().get(0).getAssignments().add(servicePointId); + when(calendarClient.getAllCalendars(Integer.MAX_VALUE)) + .thenReturn(calendarCollection); + calendarService.associateServicePointIdWithDefaultCalendarIfAbsent(servicePointId); + verify(calendarClient).getAllCalendars(Integer.MAX_VALUE); + verify(calendarClient, never()).updateCalendar(any(), any()); + } + + @Test + void testAssociateServicePointIdWithDefaultCalendar_DefaultCalendarNotExists() { + var servicePointId = UUID.randomUUID(); + var calendarCollection = getCalendarCollection("test"); + when(calendarClient.getAllCalendars(Integer.MAX_VALUE)) + .thenReturn(calendarCollection); + assertThrows(IllegalArgumentException.class, + () -> calendarService.associateServicePointIdWithDefaultCalendarIfAbsent(servicePointId)); + } + +} diff --git a/src/test/java/org/folio/dcb/service/ServicePointServiceTest.java b/src/test/java/org/folio/dcb/service/ServicePointServiceTest.java index d0e38315..5fc0bfe6 100644 --- a/src/test/java/org/folio/dcb/service/ServicePointServiceTest.java +++ b/src/test/java/org/folio/dcb/service/ServicePointServiceTest.java @@ -29,15 +29,20 @@ class ServicePointServiceTest { @Mock private InventoryServicePointClient inventoryServicePointClient; + @Mock + private CalendarService calendarService; + @Test void createServicePointIfNotExistsTest(){ when(inventoryServicePointClient.getServicePointByName(any())) .thenReturn(ResultList.of(0, List.of())); when(inventoryServicePointClient.createServicePoint(any())) .thenReturn(createServicePointRequest()); - servicePointService.createServicePointIfNotExists(createDcbPickup()); + var response = servicePointService.createServicePointIfNotExists(createDcbPickup()); verify(inventoryServicePointClient).createServicePoint(any()); verify(inventoryServicePointClient).getServicePointByName(any()); + verify(calendarService).addServicePointIdToDefaultCalendar(UUID.fromString(response.getId())); + verify(calendarService, never()).associateServicePointIdWithDefaultCalendarIfAbsent(any()); } @Test @@ -51,6 +56,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, never()).addServicePointIdToDefaultCalendar(any()); } } diff --git a/src/test/java/org/folio/dcb/utils/EntityUtils.java b/src/test/java/org/folio/dcb/utils/EntityUtils.java index ef0bc986..7a41e6d8 100644 --- a/src/test/java/org/folio/dcb/utils/EntityUtils.java +++ b/src/test/java/org/folio/dcb/utils/EntityUtils.java @@ -3,6 +3,8 @@ import lombok.SneakyThrows; import org.folio.dcb.DcbApplication; import org.folio.dcb.client.feign.HoldingsStorageClient; +import org.folio.dcb.domain.dto.Calendar; +import org.folio.dcb.domain.dto.CalendarCollection; import org.folio.dcb.domain.dto.CirculationItem; import org.folio.dcb.domain.dto.CirculationRequest; import org.folio.dcb.domain.dto.DcbTransaction; @@ -24,6 +26,8 @@ import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; +import java.time.LocalDate; +import java.util.ArrayList; import java.util.List; import java.util.UUID; import java.util.stream.Stream; @@ -224,4 +228,17 @@ public static TransactionAuditEntity createTransactionAuditEntity(){ .after("") .build(); } + + public static CalendarCollection getCalendarCollection(String calendarName) { + var calendar = Calendar.builder() + .name(calendarName) + .startDate(LocalDate.now()) + .endDate(LocalDate.now().plusYears(10)) + .assignments(new ArrayList<>()) + .build(); + var calendarCollection = new CalendarCollection(); + calendarCollection.setCalendars(List.of(calendar)); + calendarCollection.setTotalRecords(1); + return calendarCollection; + } } diff --git a/src/test/resources/mappings/calendar.json b/src/test/resources/mappings/calendar.json new file mode 100644 index 00000000..e7dc0646 --- /dev/null +++ b/src/test/resources/mappings/calendar.json @@ -0,0 +1,43 @@ +{ + "mappings": [ + { + "request": { + "method": "GET", + "url": "/calendar/calendars?limit=2147483647" + }, + "response": { + "status": 200, + "body": "{\n \"calendars\": [\n {\n \"id\": \"8b3f363a-801a-4387-a7df-9172b082f9b0\",\n \"name\": \"DCB Calendar\",\n \"startDate\": \"2024-09-06\",\n \"endDate\": \"2034-09-06\",\n \"assignments\": [\n \"d1bcdd30-127c-4b03-b048-ecc9129776a2\",\n \"a645c093-06f9-43e0-8606-c5a92f5c96a7\",\n \"7f57840b-6440-4e82-9f83-ca0e8f6415a5\",\n \"196dea59-a920-4a05-bb46-f0bd18b7dd91\"\n ],\n \"normalHours\": [\n {\n \"startDay\": \"SUNDAY\",\n \"startTime\": \"00:00:00\",\n \"endDay\": \"SATURDAY\",\n \"endTime\": \"23:59:00\"\n }\n ],\n \"exceptions\": [],\n \"metadata\": {\n \"createdDate\": \"2024-09-06T08:16:01.142244Z\",\n \"createdByUserId\": \"6d8a6bf2-5b5f-4168-aa2f-5c4e67b4b65c\",\n \"updatedDate\": \"2024-09-06T13:23:39.687660Z\",\n \"updatedByUserId\": \"21457ab5-4635-4e56-906a-908f05e9233b\"\n }\n }\n ],\n \"totalRecords\": 1\n}", + "headers": { + "Content-Type": "application/json" + } + } + }, + { + "request": { + "method": "POST", + "url": "/calendar/calendars" + }, + "response": { + "status": 201, + "body": "", + "headers": { + "Content-Type": "application/json" + } + } + }, + { + "request": { + "method": "PUT", + "urlPathPattern": "/calendar/calendars/.*" + }, + "response": { + "status": 204, + "body": "", + "headers": { + "Content-Type": "application/json" + } + } + } + ] +} From b1ecb10a51d6ea268651af0a9b7f496d4696ac1a Mon Sep 17 00:00:00 2001 From: Vignesh-Kalyanasundaram Date: Tue, 10 Sep 2024 19:15:42 +0530 Subject: [PATCH 07/10] MODDCB-119 Adding test cases --- .../dcb/service/CustomTenantServiceTest.java | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/src/test/java/org/folio/dcb/service/CustomTenantServiceTest.java b/src/test/java/org/folio/dcb/service/CustomTenantServiceTest.java index 39aaec77..d3e81416 100644 --- a/src/test/java/org/folio/dcb/service/CustomTenantServiceTest.java +++ b/src/test/java/org/folio/dcb/service/CustomTenantServiceTest.java @@ -24,6 +24,8 @@ import java.util.List; import java.util.UUID; +import static org.folio.dcb.utils.DCBConstants.DCB_CALENDAR_NAME; +import static org.folio.dcb.utils.EntityUtils.getCalendarCollection; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; @@ -56,6 +58,8 @@ class CustomTenantServiceTest { @Mock private CancellationReasonClient cancellationReasonClient; + @Mock + private CalendarService calendarService; @InjectMocks private CustomTenantService service; @@ -107,6 +111,39 @@ void testHoldingsCreationWhileEnablingTenant() { verify(holdingsStorageClient, times(2)).createHolding(any()); } + @Test + void testCalendarCreation_DefaultCalendarNotExists() { + when(instanceTypeClient.queryInstanceTypeByName(any())).thenReturn(new ResultList<>()); + when(locationUnitClient.getCampusByName(any())).thenReturn(new ResultList<>()); + when(inventoryClient.getInstanceById(any())).thenThrow(FeignException.NotFound.class); + when(locationUnitClient.getLibraryByName(any())).thenReturn(new ResultList<>()); + when(servicePointClient.getServicePointByName(any())).thenReturn(new ResultList<>()); + when(locationsClient.queryLocationsByName(any())).thenReturn(new ResultList<>()); + when(loanTypeClient.queryLoanTypeByName(any())).thenReturn(new ResultList<>()); + when(holdingsStorageClient.findHolding(any())).thenReturn(HoldingsStorageClient.Holding.builder().build()); + when(calendarService.findCalendarByName(DCB_CALENDAR_NAME)).thenReturn(null); + + service.createOrUpdateTenant(new TenantAttributes()); + verify(calendarService).createCalendar(any()); + } + + @Test + void testCalendarCreation_DefaultCalendarExists() { + when(instanceTypeClient.queryInstanceTypeByName(any())).thenReturn(new ResultList<>()); + when(locationUnitClient.getCampusByName(any())).thenReturn(new ResultList<>()); + when(inventoryClient.getInstanceById(any())).thenThrow(FeignException.NotFound.class); + when(locationUnitClient.getLibraryByName(any())).thenReturn(new ResultList<>()); + when(servicePointClient.getServicePointByName(any())).thenReturn(new ResultList<>()); + when(locationsClient.queryLocationsByName(any())).thenReturn(new ResultList<>()); + 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(calendarService.findCalendarByName(DCB_CALENDAR_NAME)).thenReturn(getCalendarCollection(DCB_CALENDAR_NAME).getCalendars().get(0)); + service.createOrUpdateTenant(new TenantAttributes()); + verify(calendarService, never()).createCalendar(any()); + } + private HoldingSourcesClient.HoldingSource createHoldingRecordSource() { return HoldingSourcesClient.HoldingSource .builder() From a82c5893b1063a144e13e50c0179141b1fb94b57 Mon Sep 17 00:00:00 2001 From: Vignesh-Kalyanasundaram Date: Tue, 10 Sep 2024 20:14:39 +0530 Subject: [PATCH 08/10] MODDCB-119 Changing loggers --- .../java/org/folio/dcb/service/impl/CalendarServiceImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/folio/dcb/service/impl/CalendarServiceImpl.java b/src/main/java/org/folio/dcb/service/impl/CalendarServiceImpl.java index 44d18ccc..1edaed6e 100644 --- a/src/main/java/org/folio/dcb/service/impl/CalendarServiceImpl.java +++ b/src/main/java/org/folio/dcb/service/impl/CalendarServiceImpl.java @@ -33,7 +33,7 @@ public Calendar createCalendar(Calendar calendar) { @Override public void addServicePointIdToDefaultCalendar(UUID servicePointId) { - log.debug("updateCalendarWithServicePointList:: find calendar by name {} to update servicePointId {}", + log.info("addServicePointIdToDefaultCalendar:: find calendar by name {} to update servicePointId {}", DCB_CALENDAR_NAME, servicePointId); var calendar = findCalendarByName(DCB_CALENDAR_NAME); updateCalendarIfExists(DCB_CALENDAR_NAME, servicePointId, calendar); @@ -44,7 +44,7 @@ private void updateCalendarIfExists(String calendarName, UUID servicePointId, Ca calendar.getAssignments().add(servicePointId); calendarClient.updateCalendar(calendar.getId(), calendar); } else { - log.warn("findAndAddServicePointIdToCalendar:: Calendar with name {} is not found", calendarName); + log.warn("updateCalendarIfExists:: Calendar with name {} is not found", calendarName); throw new IllegalArgumentException("Calendar with name " + calendarName + " is not found"); } } From 69aa339986916940a4e67d77a8e4992af45650fd Mon Sep 17 00:00:00 2001 From: Vignesh-Kalyanasundaram Date: Thu, 12 Sep 2024 11:20:06 +0530 Subject: [PATCH 09/10] MODDCB-119 Associate the DCB servicePoint with the default calendar --- .../java/org/folio/dcb/service/impl/CustomTenantService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 b8bfc82f..e3d46c38 100644 --- a/src/main/java/org/folio/dcb/service/impl/CustomTenantService.java +++ b/src/main/java/org/folio/dcb/service/impl/CustomTenantService.java @@ -306,7 +306,7 @@ private void createCalendarIfNotExists() { .endDay(DayOfWeek.SATURDAY.toString()) .endTime(LocalTime.of(23, 59).toString()) .build())) - .assignments(List.of()) + .assignments(List.of(UUID.fromString(SERVICE_POINT_ID))) .exceptions(List.of()) .build(); calendarService.createCalendar(newCalendar); From 0621bd145be1af2a3ac0aada5e32555b51efe9a4 Mon Sep 17 00:00:00 2001 From: Vignesh-Kalyanasundaram Date: Mon, 30 Sep 2024 18:00:22 +0530 Subject: [PATCH 10/10] MODDCB-119 Change the datatype of calendar startDate and endDate --- .../java/org/folio/dcb/service/impl/CustomTenantService.java | 4 ++-- src/main/resources/swagger.api/schemas/Calendar.yaml | 2 -- src/test/java/org/folio/dcb/utils/EntityUtils.java | 4 ++-- 3 files changed, 4 insertions(+), 6 deletions(-) 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 e3d46c38..91c1c8ed 100644 --- a/src/main/java/org/folio/dcb/service/impl/CustomTenantService.java +++ b/src/main/java/org/folio/dcb/service/impl/CustomTenantService.java @@ -298,8 +298,8 @@ private void createCalendarIfNotExists() { log.info("createCalendarIfNotExists:: calendar with name {} doesn't exists, so creating new calendar", DCB_CALENDAR_NAME); Calendar newCalendar = Calendar.builder() .name(DCB_CALENDAR_NAME) - .startDate(LocalDate.now()) - .endDate(LocalDate.now().plusYears(10)) + .startDate(LocalDate.now().toString()) + .endDate(LocalDate.now().plusYears(10).toString()) .normalHours(List.of(NormalHours.builder() .startDay(DayOfWeek.SUNDAY.name()) .startTime(LocalTime.of(0, 0).toString()) diff --git a/src/main/resources/swagger.api/schemas/Calendar.yaml b/src/main/resources/swagger.api/schemas/Calendar.yaml index cdaefe9e..92a9dadc 100644 --- a/src/main/resources/swagger.api/schemas/Calendar.yaml +++ b/src/main/resources/swagger.api/schemas/Calendar.yaml @@ -23,11 +23,9 @@ Calendar: type: string startDate: type: string - format: date description: The first effective date (inclusive, YYYY-MM-DD) of this calendar endDate: type: string - format: date description: The first effective date (inclusive, YYYY-MM-DD) of this calendar assignments: description: A list of all service points that this calendar is assigned to diff --git a/src/test/java/org/folio/dcb/utils/EntityUtils.java b/src/test/java/org/folio/dcb/utils/EntityUtils.java index 7a41e6d8..e27985c4 100644 --- a/src/test/java/org/folio/dcb/utils/EntityUtils.java +++ b/src/test/java/org/folio/dcb/utils/EntityUtils.java @@ -232,8 +232,8 @@ public static TransactionAuditEntity createTransactionAuditEntity(){ public static CalendarCollection getCalendarCollection(String calendarName) { var calendar = Calendar.builder() .name(calendarName) - .startDate(LocalDate.now()) - .endDate(LocalDate.now().plusYears(10)) + .startDate(LocalDate.now().toString()) + .endDate(LocalDate.now().plusYears(10).toString()) .assignments(new ArrayList<>()) .build(); var calendarCollection = new CalendarCollection();