From 709c80fa37a7ccbf4c6df70328633ad8166563b1 Mon Sep 17 00:00:00 2001
From: localhorst <localhorst@mosad.xyz>
Date: Mon, 15 Jun 2020 10:43:16 +0200
Subject: [PATCH] add fist admin user after start

---
 .../components/AdminInitializer.java          | 37 +++++++++++++++++++
 .../ecommerce/components/SlotInitializer.java | 32 ++++++++--------
 .../ecommerce/repos/user/UserRepository.java  |  8 ++++
 3 files changed, 60 insertions(+), 17 deletions(-)
 create mode 100644 prototype/src/main/java/org/hso/ecommerce/components/AdminInitializer.java

diff --git a/prototype/src/main/java/org/hso/ecommerce/components/AdminInitializer.java b/prototype/src/main/java/org/hso/ecommerce/components/AdminInitializer.java
new file mode 100644
index 0000000..7b473c0
--- /dev/null
+++ b/prototype/src/main/java/org/hso/ecommerce/components/AdminInitializer.java
@@ -0,0 +1,37 @@
+package org.hso.ecommerce.components;
+
+import org.hso.ecommerce.entities.booking.PaymentMethod;
+import org.hso.ecommerce.entities.user.User;
+import org.hso.ecommerce.repos.user.UserRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.sql.Timestamp;
+import java.util.Optional;
+
+import javax.annotation.PostConstruct;
+
+@Component
+public class AdminInitializer {
+
+	@Autowired
+	private final UserRepository userRepository = null;
+
+	@PostConstruct
+	public void init() {
+		Optional<Integer> numberOfEmployees = userRepository.numberOfEmployees();
+		if (numberOfEmployees.orElse(0) == 0) {
+			// create first admin user
+			User firstAdmin = new User();
+			firstAdmin.created = new Timestamp(System.currentTimeMillis());
+			firstAdmin.name = "admin";
+			firstAdmin.defaultPayment = new PaymentMethod();
+			firstAdmin.defaultPayment.creditCardNumber = ""; //set empty number
+			firstAdmin.email = "admin";
+			firstAdmin.isActive = true;
+			firstAdmin.isEmployee = true;
+			firstAdmin.setPassword("admin");
+			userRepository.save(firstAdmin); //save to DB
+		}
+	}
+}
diff --git a/prototype/src/main/java/org/hso/ecommerce/components/SlotInitializer.java b/prototype/src/main/java/org/hso/ecommerce/components/SlotInitializer.java
index ce8c39b..72c4f8a 100644
--- a/prototype/src/main/java/org/hso/ecommerce/components/SlotInitializer.java
+++ b/prototype/src/main/java/org/hso/ecommerce/components/SlotInitializer.java
@@ -10,23 +10,21 @@ import javax.annotation.PostConstruct;
 @Component
 public class SlotInitializer {
 
-    @Autowired
-    private final SlotRepository slotRepository = null;
+	@Autowired
+	private final SlotRepository slotRepository = null;
 
-    // TODO: use values form cfg.
-    private final int NUM_SLOTS = 50;
-
-    @PostConstruct
-    public void init() {
-        for (int i = 1; i <= NUM_SLOTS; i++) {
-            if (!slotRepository.findBySlotNum(i).isPresent()) {
-                Slot slotAdded = new Slot();
-                slotAdded.slotNum = i;
-                slotRepository.save(slotAdded);
-
-                System.out.println("Added Slot " + i + " to DB");
-            }
-        }
-    }
+	// TODO: use values form cfg.
+	private final int NUM_SLOTS = 50;
 
+	@PostConstruct
+	public void init() {
+		for (int i = 1; i <= NUM_SLOTS; i++) {
+			if (!slotRepository.findBySlotNum(i).isPresent()) {
+				Slot slotAdded = new Slot();
+				slotAdded.slotNum = i;
+				slotRepository.save(slotAdded);
+				System.out.println("Added Slot " + i + " to DB");
+			}
+		}
+	}
 }
diff --git a/prototype/src/main/java/org/hso/ecommerce/repos/user/UserRepository.java b/prototype/src/main/java/org/hso/ecommerce/repos/user/UserRepository.java
index 9477763..abfbc9e 100644
--- a/prototype/src/main/java/org/hso/ecommerce/repos/user/UserRepository.java
+++ b/prototype/src/main/java/org/hso/ecommerce/repos/user/UserRepository.java
@@ -12,7 +12,15 @@ public interface UserRepository extends JpaRepository<User, Long> {
 
     @Query("SELECT c FROM User c WHERE c.email = :email")
     Optional<User> findByEmail(String email);
+    
+    /*SELECT count(*) FROM users WHERE is_employee == 1;
+     */
 
+    
+    @Query("SELECT count(*) FROM User WHERE isEmployee = true")
+    Optional<Integer> numberOfEmployees();
+    
+    
 }