diff --git a/src/main/java/com/gepardec/mega/application/schedule/Schedules.java b/src/main/java/com/gepardec/mega/application/schedule/Schedules.java index 991071dcf..59797bd06 100644 --- a/src/main/java/com/gepardec/mega/application/schedule/Schedules.java +++ b/src/main/java/com/gepardec/mega/application/schedule/Schedules.java @@ -1,6 +1,5 @@ package com.gepardec.mega.application.schedule; -import com.gepardec.mega.domain.utils.DateUtils; import com.gepardec.mega.notification.mail.ReminderEmailSender; import com.gepardec.mega.notification.mail.receiver.MailReceiver; import com.gepardec.mega.service.api.EnterpriseSyncService; @@ -12,9 +11,10 @@ import jakarta.enterprise.context.Dependent; import jakarta.inject.Inject; -import java.time.LocalDate; import java.util.concurrent.TimeUnit; +import static com.gepardec.mega.domain.utils.DateUtils.getFirstDayOfCurrentMonth; + /** * @author Thomas Herzog * @since 10/3/2020 @@ -49,27 +49,27 @@ public class Schedules { every = "PT30M", delay = 15, delayUnit = TimeUnit.SECONDS) // We need to wait for liquibase to finish, but is executed in parallel - void syncEmployeesWithDatabase() { + void syncEmployees() { syncService.syncEmployees(); } @Scheduled(identity = "Generate step entries on the last day of a month at 00:00", cron = "0 0 0 L * ? *") - void generateStepEntriesDefault() { - stepEntrySyncService.generateStepEntriesFromScheduler(); + void generateStepEntries() { + stepEntrySyncService.generateStepEntries(getFirstDayOfCurrentMonth()); } @Scheduled(identity = "Update project entries every 30 minutes", every = "PT30M", delay = 30, delayUnit = TimeUnit.SECONDS) void generateProjects() { - projectSyncService.generateProjects(); + projectSyncService.generateProjects(getFirstDayOfCurrentMonth()); } @Scheduled(identity = "Generate enterprise entries on the last day of a month at 00:00", cron = "0 0 0 L * ? *") void generateEnterpriseEntries() { - enterpriseSyncService.generateEnterpriseEntries(LocalDate.now().withDayOfMonth(1)); + enterpriseSyncService.generateEnterpriseEntries(getFirstDayOfCurrentMonth()); } @Scheduled(identity = "Send E-Mail reminder to Users", @@ -89,6 +89,6 @@ void receiveMails() { @Scheduled(identity = "Take existing PrematureEmployeeChecks and update StepEntries accordingly on the last day of a month at 06:00", cron = "0 0 6 L * ? *") void syncPrematureEmployeeChecksWithStepEntries() { - prematureEmployeeCheckSyncService.syncPrematureEmployeeChecksWithStepEntries(DateUtils.getCurrentYearMonth()); + prematureEmployeeCheckSyncService.syncPrematureEmployeeChecksWithStepEntries(getFirstDayOfCurrentMonth()); } } diff --git a/src/main/java/com/gepardec/mega/domain/utils/DateUtils.java b/src/main/java/com/gepardec/mega/domain/utils/DateUtils.java index 91ee96745..d85253db7 100644 --- a/src/main/java/com/gepardec/mega/domain/utils/DateUtils.java +++ b/src/main/java/com/gepardec/mega/domain/utils/DateUtils.java @@ -104,8 +104,7 @@ public static LocalDate getFirstDayOfCurrentMonth() { return LocalDate.now().with(TemporalAdjusters.firstDayOfMonth()); } - public static YearMonth getCurrentYearMonth() { - LocalDate today = today(); - return YearMonth.of(today().getYear(), today.getMonth()); + public static LocalDate getFirstOfYearMonth(YearMonth yearMonth) { + return yearMonth.atDay(1); } } diff --git a/src/main/java/com/gepardec/mega/rest/impl/SyncResourceImpl.java b/src/main/java/com/gepardec/mega/rest/impl/SyncResourceImpl.java index 7185392ff..de5fb7bef 100644 --- a/src/main/java/com/gepardec/mega/rest/impl/SyncResourceImpl.java +++ b/src/main/java/com/gepardec/mega/rest/impl/SyncResourceImpl.java @@ -1,6 +1,5 @@ package com.gepardec.mega.rest.impl; -import com.gepardec.mega.domain.utils.DateUtils; import com.gepardec.mega.rest.api.SyncResource; import com.gepardec.mega.service.api.EnterpriseSyncService; import com.gepardec.mega.service.api.PrematureEmployeeCheckSyncService; @@ -14,6 +13,10 @@ import java.time.LocalDate; import java.time.YearMonth; +import java.util.function.Function; + +import static com.gepardec.mega.domain.utils.DateUtils.getFirstDayOfCurrentMonth; +import static com.gepardec.mega.domain.utils.DateUtils.getFirstOfYearMonth; @RequestScoped @IfBuildProperty(name = "mega.endpoint.test.enable", stringValue = "true", enableIfMissing = true) @@ -34,24 +37,6 @@ public class SyncResourceImpl implements SyncResource { @Inject PrematureEmployeeCheckSyncService prematureEmployeeCheckSyncService; - @Override - public Response syncProjects(YearMonth from, YearMonth to) { - if (from == null) { - return Response.ok(projectSyncService.generateProjects()).build(); - } - - if (to == null) { - return Response.ok(projectSyncService.generateProjects(from.atDay(1))).build(); - } - - while (from.isBefore(to)) { - projectSyncService.generateProjects(from.atDay(1)); - from = from.plusMonths(1); - } - - return Response.ok(projectSyncService.generateProjects(from.atDay(1))).build(); - } - @Override public Response syncEmployees() { syncService.syncEmployees(); @@ -59,57 +44,23 @@ public Response syncEmployees() { } @Override - public Response generateEnterpriseEntries(YearMonth from, YearMonth to) { - if (from == null) { - return Response.ok(enterpriseSyncService.generateEnterpriseEntries(LocalDate.now().withDayOfMonth(1))).build(); - } - if (to == null) { - return Response.ok(enterpriseSyncService.generateEnterpriseEntries(from.atDay(1))).build(); - } - - while (from.isBefore(to)) { - enterpriseSyncService.generateEnterpriseEntries(from.atDay(1)); - from = from.plusMonths(1); - } + public Response syncProjects(YearMonth from, YearMonth to) { + return syncFromTo(projectSyncService::generateProjects, from, to); + } - return Response.ok(enterpriseSyncService.generateEnterpriseEntries(from.atDay(1))).build(); + @Override + public Response generateEnterpriseEntries(YearMonth from, YearMonth to) { + return syncFromTo(enterpriseSyncService::generateEnterpriseEntries, from, to); } @Override public Response generateStepEntries(YearMonth from, YearMonth to) { - if (from == null) { - return Response.ok(stepEntrySyncService.generateStepEntriesFromEndpoint()).build(); - } - if (to == null) { - return Response.ok(stepEntrySyncService.generateStepEntriesFromEndpoint(from)).build(); - } - - while (from.isBefore(to)) { - stepEntrySyncService.generateStepEntriesFromEndpoint(from); - from = from.plusMonths(1); - } - - return Response.ok(stepEntrySyncService.generateStepEntriesFromEndpoint(from)).build(); + return syncFromTo(stepEntrySyncService::generateStepEntries, from, to); } @Override public Response syncPrematureEmployeeChecks(YearMonth from, YearMonth to) { - if (from == null) { - prematureEmployeeCheckSyncService.syncPrematureEmployeeChecksWithStepEntries(DateUtils.getCurrentYearMonth()); - return Response.ok().build(); - } - - if (to == null) { - prematureEmployeeCheckSyncService.syncPrematureEmployeeChecksWithStepEntries(from); - return Response.ok().build(); - } - - do { - prematureEmployeeCheckSyncService.syncPrematureEmployeeChecksWithStepEntries(from); - from = from.plusMonths(1); - } while (from.compareTo(to) <= 0); - - return Response.ok().build(); + return syncFromTo(prematureEmployeeCheckSyncService::syncPrematureEmployeeChecksWithStepEntries, from, to); } @Override @@ -118,7 +69,25 @@ public Response syncAll(YearMonth from, YearMonth to) { syncProjects(from, to); generateEnterpriseEntries(from, to); generateStepEntries(from, to); + syncPrematureEmployeeChecks(from, to); return Response.ok("ok").build(); } + + private Response syncFromTo(Function syncFunction, YearMonth from, YearMonth to) { + if (from == null) { + return Response.ok(syncFunction.apply(getFirstDayOfCurrentMonth())).build(); + } + + if (to == null) { + return Response.ok(syncFunction.apply(getFirstOfYearMonth(from))).build(); + } + + while (from.isBefore(to)) { + syncFunction.apply(getFirstOfYearMonth(from)); + from = from.plusMonths(1); + } + + return Response.ok(syncFunction.apply(getFirstOfYearMonth(from))).build(); + } } diff --git a/src/main/java/com/gepardec/mega/service/api/PrematureEmployeeCheckSyncService.java b/src/main/java/com/gepardec/mega/service/api/PrematureEmployeeCheckSyncService.java index 8d0af5357..15c7349ab 100644 --- a/src/main/java/com/gepardec/mega/service/api/PrematureEmployeeCheckSyncService.java +++ b/src/main/java/com/gepardec/mega/service/api/PrematureEmployeeCheckSyncService.java @@ -1,8 +1,8 @@ package com.gepardec.mega.service.api; -import java.time.YearMonth; +import java.time.LocalDate; public interface PrematureEmployeeCheckSyncService { - boolean syncPrematureEmployeeChecksWithStepEntries(YearMonth yearMonth); + boolean syncPrematureEmployeeChecksWithStepEntries(LocalDate date); } diff --git a/src/main/java/com/gepardec/mega/service/api/ProjectSyncService.java b/src/main/java/com/gepardec/mega/service/api/ProjectSyncService.java index 3550a7107..c0c22f61e 100644 --- a/src/main/java/com/gepardec/mega/service/api/ProjectSyncService.java +++ b/src/main/java/com/gepardec/mega/service/api/ProjectSyncService.java @@ -4,7 +4,5 @@ public interface ProjectSyncService { - boolean generateProjects(); - boolean generateProjects(LocalDate date); } diff --git a/src/main/java/com/gepardec/mega/service/api/StepEntrySyncService.java b/src/main/java/com/gepardec/mega/service/api/StepEntrySyncService.java index 148edc0ad..38862d032 100644 --- a/src/main/java/com/gepardec/mega/service/api/StepEntrySyncService.java +++ b/src/main/java/com/gepardec/mega/service/api/StepEntrySyncService.java @@ -1,12 +1,8 @@ package com.gepardec.mega.service.api; -import java.time.YearMonth; +import java.time.LocalDate; public interface StepEntrySyncService { - boolean generateStepEntriesFromEndpoint(); - - boolean generateStepEntriesFromEndpoint(YearMonth date); - - boolean generateStepEntriesFromScheduler(); + boolean generateStepEntries(LocalDate date); } diff --git a/src/main/java/com/gepardec/mega/service/impl/PrematureEmployeeCheckSyncServiceImpl.java b/src/main/java/com/gepardec/mega/service/impl/PrematureEmployeeCheckSyncServiceImpl.java index 54b2960fb..06e5f878b 100644 --- a/src/main/java/com/gepardec/mega/service/impl/PrematureEmployeeCheckSyncServiceImpl.java +++ b/src/main/java/com/gepardec/mega/service/impl/PrematureEmployeeCheckSyncServiceImpl.java @@ -13,7 +13,6 @@ import org.slf4j.Logger; import java.time.LocalDate; -import java.time.YearMonth; import java.util.List; import java.util.stream.Collectors; @@ -33,10 +32,9 @@ public class PrematureEmployeeCheckSyncServiceImpl implements PrematureEmployeeC Logger logger; @Override - public boolean syncPrematureEmployeeChecksWithStepEntries(YearMonth yearMonth) { + public boolean syncPrematureEmployeeChecksWithStepEntries(LocalDate date) { boolean allEntriesUpdated = true; - LocalDate selectedMonth = yearMonth.atDay(1); - List prematureEmployeeCheckEntities = prematureEmployeeCheckService.findAllForMonth(selectedMonth) + List prematureEmployeeCheckEntities = prematureEmployeeCheckService.findAllForMonth(date) .stream() .filter(pec -> pec.getState().equals(PrematureEmployeeCheckState.DONE) || pec.getState().equals(PrematureEmployeeCheckState.IN_PROGRESS)) .collect(Collectors.toList()); @@ -44,7 +42,7 @@ public boolean syncPrematureEmployeeChecksWithStepEntries(YearMonth yearMonth) { logger.info( String.format("Syncing %s PrematureEmployeeChecks with StepEntries for Month: %s", prematureEmployeeCheckEntities.size(), - selectedMonth) + date) ); for (PrematureEmployeeCheck pec : prematureEmployeeCheckEntities) { @@ -63,7 +61,7 @@ public boolean syncPrematureEmployeeChecksWithStepEntries(YearMonth yearMonth) { } } - prematureEmployeeCheckService.deleteAllForMonthWithState(selectedMonth, List.of(PrematureEmployeeCheckState.CANCELLED, PrematureEmployeeCheckState.IN_PROGRESS)); + prematureEmployeeCheckService.deleteAllForMonthWithState(date, List.of(PrematureEmployeeCheckState.CANCELLED, PrematureEmployeeCheckState.IN_PROGRESS)); return allEntriesUpdated; } diff --git a/src/main/java/com/gepardec/mega/service/impl/ProjectSyncServiceImpl.java b/src/main/java/com/gepardec/mega/service/impl/ProjectSyncServiceImpl.java index f78bd6306..937c25f4a 100644 --- a/src/main/java/com/gepardec/mega/service/impl/ProjectSyncServiceImpl.java +++ b/src/main/java/com/gepardec/mega/service/impl/ProjectSyncServiceImpl.java @@ -75,12 +75,6 @@ public boolean generateProjects(LocalDate date) { return !projects.isEmpty(); } - - @Override - public boolean generateProjects() { - return generateProjects(LocalDate.now().minusMonths(1).withDayOfMonth(1)); - } - private List createProjects(List activeUsers, List projects, LocalDate date) { return projects.stream() .map(project -> createProjectEntityFromProject(activeUsers, project, date)) diff --git a/src/main/java/com/gepardec/mega/service/impl/StepEntrySyncServiceImpl.java b/src/main/java/com/gepardec/mega/service/impl/StepEntrySyncServiceImpl.java index b1247c633..f8cae40d5 100644 --- a/src/main/java/com/gepardec/mega/service/impl/StepEntrySyncServiceImpl.java +++ b/src/main/java/com/gepardec/mega/service/impl/StepEntrySyncServiceImpl.java @@ -51,22 +51,7 @@ public class StepEntrySyncServiceImpl implements StepEntrySyncService { NotificationConfig notificationConfig; @Override - public boolean generateStepEntriesFromEndpoint() { - return generateStepEntries(LocalDate.now().minusMonths(1).with(TemporalAdjusters.firstDayOfMonth())); - } - - @Override - public boolean generateStepEntriesFromEndpoint(YearMonth date) { - return generateStepEntries(date.atDay(1)); - } - - @Override - public boolean generateStepEntriesFromScheduler() { - return generateStepEntries(LocalDate.now().with(TemporalAdjusters.firstDayOfMonth())); - } - - - private boolean generateStepEntries(LocalDate date) { + public boolean generateStepEntries(LocalDate date) { final StopWatch stopWatch = new StopWatch(); stopWatch.start(); diff --git a/src/test/java/com/gepardec/mega/service/impl/init/StepEntrySyncServiceImplTest.java b/src/test/java/com/gepardec/mega/service/impl/init/StepEntrySyncServiceImplTest.java index 6f69c42e1..bc5232cd5 100644 --- a/src/test/java/com/gepardec/mega/service/impl/init/StepEntrySyncServiceImplTest.java +++ b/src/test/java/com/gepardec/mega/service/impl/init/StepEntrySyncServiceImplTest.java @@ -25,6 +25,7 @@ import java.util.Set; import java.util.stream.Collectors; +import static com.gepardec.mega.domain.utils.DateUtils.getFirstDayOfCurrentMonth; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.*; @@ -152,7 +153,7 @@ void whenAllDataIsProvided_thenInsertDefinedNumberOfItems() { // default setup // When - stepEntrySyncService.generateStepEntriesFromEndpoint(); + stepEntrySyncService.generateStepEntries(getFirstDayOfCurrentMonth()); // Then verify(stepEntryService, times(22)).addStepEntry(Mockito.any()); @@ -165,7 +166,7 @@ void whenNoProjectsProvided_thenDoNotInsertProjectLead() { when(projectService.getProjectsForMonthYear(Mockito.any(), Mockito.anyList())).thenReturn(List.of()); // When - stepEntrySyncService.generateStepEntriesFromEndpoint(); + stepEntrySyncService.generateStepEntries(getFirstDayOfCurrentMonth()); // Then final ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(StepEntry.class); @@ -202,7 +203,7 @@ void whenProjectLeadIsInactive_thenDoNotInsertProjectLead() { .build())); // When - stepEntrySyncService.generateStepEntriesFromEndpoint(); + stepEntrySyncService.generateStepEntries(getFirstDayOfCurrentMonth()); // Then final ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(StepEntry.class); @@ -227,7 +228,7 @@ void whenDefaultDataIsProvided_thenInsertProjectLead() { // default setup when(notificationConfig.getOmMailAddresses()).thenReturn(List.of()); // When - stepEntrySyncService.generateStepEntriesFromEndpoint(); + stepEntrySyncService.generateStepEntries(getFirstDayOfCurrentMonth()); // Then final ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(StepEntry.class); @@ -252,7 +253,7 @@ void whenOfficeManagmentIsInactive_thenDoNotInsertOfficeManagment() { when(notificationConfig.getOmMailAddresses()).thenReturn(List.of("some.user@gepardec.com")); // When - stepEntrySyncService.generateStepEntriesFromEndpoint(); + stepEntrySyncService.generateStepEntries(getFirstDayOfCurrentMonth()); // Then final ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(StepEntry.class); @@ -273,7 +274,7 @@ void whenNoOfficeManagmentIsProvided_thenDoNotInsertOfficeManagment() { when(notificationConfig.getOmMailAddresses()).thenReturn(List.of()); // When - stepEntrySyncService.generateStepEntriesFromEndpoint(); + stepEntrySyncService.generateStepEntries(getFirstDayOfCurrentMonth()); // Then final ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(StepEntry.class); @@ -294,7 +295,7 @@ void whenDefaultDataIsProvided_thenInsertOfficeManagment() { // default setup // When - stepEntrySyncService.generateStepEntriesFromEndpoint(); + stepEntrySyncService.generateStepEntries(getFirstDayOfCurrentMonth()); // Then final ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(StepEntry.class); @@ -315,7 +316,7 @@ void whenNoActiveUsers_thenDoNotInsertEmployees() { when(userService.findActiveUsers()).thenReturn(List.of()); // When - stepEntrySyncService.generateStepEntriesFromEndpoint(); + stepEntrySyncService.generateStepEntries(getFirstDayOfCurrentMonth()); // Then verify(stepEntryService, never()).addStepEntry(Mockito.any()); @@ -327,7 +328,7 @@ void whenDefaultDataIsProvided_thenInsertEmployees() { // default setup // When - stepEntrySyncService.generateStepEntriesFromEndpoint(); + stepEntrySyncService.generateStepEntries(getFirstDayOfCurrentMonth()); // Then final ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(StepEntry.class); @@ -356,7 +357,7 @@ void whenNoStepsProvided_thenDoNotInsertSteps() { when(stepService.getSteps()).thenReturn(List.of()); // When - stepEntrySyncService.generateStepEntriesFromEndpoint(); + stepEntrySyncService.generateStepEntries(getFirstDayOfCurrentMonth()); // Then verify(stepEntryService, never()).addStepEntry(Mockito.any()); @@ -368,7 +369,7 @@ void whenDefaultDataIsProvided_thenInsertSteps() { // default setup // When - stepEntrySyncService.generateStepEntriesFromEndpoint(); + stepEntrySyncService.generateStepEntries(getFirstDayOfCurrentMonth()); // Then final ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(StepEntry.class); @@ -391,7 +392,7 @@ void whenDefaultDataIsProvided_thenInsertSteps2() { // default setup // When - stepEntrySyncService.generateStepEntriesFromEndpoint(); + stepEntrySyncService.generateStepEntries(getFirstDayOfCurrentMonth()); // Then final ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(StepEntry.class); diff --git a/src/test/java/com/gepardec/mega/service/impl/stepentry/PrematureEmployeeCheckSyncServiceTest.java b/src/test/java/com/gepardec/mega/service/impl/stepentry/PrematureEmployeeCheckSyncServiceTest.java index 5a03ed569..3c03a5582 100644 --- a/src/test/java/com/gepardec/mega/service/impl/stepentry/PrematureEmployeeCheckSyncServiceTest.java +++ b/src/test/java/com/gepardec/mega/service/impl/stepentry/PrematureEmployeeCheckSyncServiceTest.java @@ -15,7 +15,6 @@ import org.junit.jupiter.api.Test; import java.time.LocalDate; -import java.time.YearMonth; import java.util.List; import java.util.Optional; @@ -52,7 +51,7 @@ void syncPrematureEmployeeChecksWithStepEntries_matchingStepEntryAndPrematureEmp // When boolean updatedAllEntries = prematureEmployeeCheckSyncService.syncPrematureEmployeeChecksWithStepEntries( - YearMonth.of(testDate.getYear(), testDate.getMonth()) + testDate.withDayOfMonth(1) ); // Then @@ -77,7 +76,7 @@ void syncPrematureEmployeeChecksWithStepEntries_multipleMatchingStepEntryAndPrem // When boolean updatedAllEntries = prematureEmployeeCheckSyncService.syncPrematureEmployeeChecksWithStepEntries( - YearMonth.of(testDate.getYear(), testDate.getMonth()) + testDate.withDayOfMonth(1) ); // Then @@ -97,7 +96,7 @@ void syncPrematureEmployeeChecksWithStepEntries_nonMatchingStepEntryAndPremature // When boolean updatedAllEntries = prematureEmployeeCheckSyncService.syncPrematureEmployeeChecksWithStepEntries( - YearMonth.of(testDate.getYear(), testDate.getMonth()) + testDate.withDayOfMonth(1) ); // Then @@ -124,7 +123,7 @@ void syncPrematureEmployeeChecksWithStepEntries_mishedMatchingStepEntryAndPremat // When boolean updatedAllEntries = prematureEmployeeCheckSyncService.syncPrematureEmployeeChecksWithStepEntries( - YearMonth.of(testDate.getYear(), testDate.getMonth()) + testDate.withDayOfMonth(1) ); // Then