From 88a155337d489a29fa5a3a824fc0552ae0e89c3b Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Sat, 19 Oct 2024 13:00:39 +0200
Subject: [PATCH] OZG-6867 OZG-6903 implement sync scheduler

---
 .../admin/SchedulingConfiguration.java        | 10 +++++++
 .../organisationseinheit/SyncScheduler.java   | 18 ++++++++++++
 src/main/resources/application.yaml           |  4 +++
 .../SyncSchedulerTest.java                    | 29 +++++++++++++++++++
 4 files changed, 61 insertions(+)
 create mode 100644 src/main/java/de/ozgcloud/admin/SchedulingConfiguration.java
 create mode 100644 src/main/java/de/ozgcloud/admin/organisationseinheit/SyncScheduler.java
 create mode 100644 src/test/java/de/ozgcloud/admin/organisationseinheit/SyncSchedulerTest.java

diff --git a/src/main/java/de/ozgcloud/admin/SchedulingConfiguration.java b/src/main/java/de/ozgcloud/admin/SchedulingConfiguration.java
new file mode 100644
index 00000000..3c9fdbd2
--- /dev/null
+++ b/src/main/java/de/ozgcloud/admin/SchedulingConfiguration.java
@@ -0,0 +1,10 @@
+package de.ozgcloud.admin;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+
+@Configuration
+@EnableScheduling
+public class SchedulingConfiguration {
+
+}
diff --git a/src/main/java/de/ozgcloud/admin/organisationseinheit/SyncScheduler.java b/src/main/java/de/ozgcloud/admin/organisationseinheit/SyncScheduler.java
new file mode 100644
index 00000000..26739cdd
--- /dev/null
+++ b/src/main/java/de/ozgcloud/admin/organisationseinheit/SyncScheduler.java
@@ -0,0 +1,18 @@
+package de.ozgcloud.admin.organisationseinheit;
+
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import lombok.RequiredArgsConstructor;
+
+@Component
+@RequiredArgsConstructor
+class SyncScheduler {
+
+	private final SyncService syncService;
+
+	@Scheduled(cron = "${ozgcloud.administration.sync.organisationseinheiten.cron}")
+	public void syncOrganisationsEinheitenFromKeycloak() {
+		syncService.syncOrganisationsEinheitenFromKeycloak();
+	}
+}
diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml
index 563cb144..c100cc4d 100644
--- a/src/main/resources/application.yaml
+++ b/src/main/resources/application.yaml
@@ -82,6 +82,10 @@ ozgcloud:
       realm: ${ozgcloud.oauth2.realm}
       client: ${ozgcloud.oauth2.resource}
       organisations-einheit-id-key: organisationseinheitId
+  administration:
+    sync:
+      organisationseinheiten:
+        cron: "0 15 0 * * *"
 
 grpc:
   client:
diff --git a/src/test/java/de/ozgcloud/admin/organisationseinheit/SyncSchedulerTest.java b/src/test/java/de/ozgcloud/admin/organisationseinheit/SyncSchedulerTest.java
new file mode 100644
index 00000000..f6eec2b9
--- /dev/null
+++ b/src/test/java/de/ozgcloud/admin/organisationseinheit/SyncSchedulerTest.java
@@ -0,0 +1,29 @@
+package de.ozgcloud.admin.organisationseinheit;
+
+import static org.mockito.Mockito.*;
+
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+
+class SyncSchedulerTest {
+
+	@InjectMocks
+	private SyncScheduler scheduler;
+
+	@Mock
+	private SyncService syncService;
+
+	@Nested
+	class TestSyncOrganisationsEinheitenFromKeycloak {
+
+		@Test
+		void shouldCallService() {
+			scheduler.syncOrganisationsEinheitenFromKeycloak();
+
+			verify(syncService).syncOrganisationsEinheitenFromKeycloak();
+		}
+	}
+
+}
\ No newline at end of file
-- 
GitLab