From bfe0f438d32a819073100a4b5822fd18b4ea8403 Mon Sep 17 00:00:00 2001
From: c2038058 <gillj8@cardiff.ac.uk>
Date: Thu, 9 Dec 2021 14:26:32 +0000
Subject: [PATCH] New Entities Repos for Logs and Events, all other required
 entities updated with new data

---
 .../clientproject/data/events/Events.java     | 27 ++++++++++++
 .../clientproject/data/events/EventsRepo.java | 19 ++++++++
 .../example/clientproject/data/logs/Logs.java | 43 +++++++++++++++++++
 .../clientproject/data/logs/LogsRepo.java     | 43 +++++++++++++++++++
 .../clientproject/data/users/Users.java       |  5 +++
 5 files changed, 137 insertions(+)
 create mode 100644 src/main/java/com/example/clientproject/data/events/Events.java
 create mode 100644 src/main/java/com/example/clientproject/data/events/EventsRepo.java
 create mode 100644 src/main/java/com/example/clientproject/data/logs/Logs.java
 create mode 100644 src/main/java/com/example/clientproject/data/logs/LogsRepo.java

diff --git a/src/main/java/com/example/clientproject/data/events/Events.java b/src/main/java/com/example/clientproject/data/events/Events.java
new file mode 100644
index 0000000..9a48c0f
--- /dev/null
+++ b/src/main/java/com/example/clientproject/data/events/Events.java
@@ -0,0 +1,27 @@
+package com.example.clientproject.data.events;
+
+import com.example.clientproject.data.logs.Logs;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.*;
+import java.util.Set;
+
+/**
+ * Entity object for events which trigger a log
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Entity
+public class Events {
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private long eventId;
+    private String eventName;
+
+    @OneToMany(cascade=CascadeType.ALL, orphanRemoval = true)
+    @JoinColumn(name="Event_Id", nullable = false)
+    private Set<Logs> logs;
+}
diff --git a/src/main/java/com/example/clientproject/data/events/EventsRepo.java b/src/main/java/com/example/clientproject/data/events/EventsRepo.java
new file mode 100644
index 0000000..69b5d3e
--- /dev/null
+++ b/src/main/java/com/example/clientproject/data/events/EventsRepo.java
@@ -0,0 +1,19 @@
+package com.example.clientproject.data.events;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+
+import java.util.Optional;
+
+/**
+ * Repository for the "Events" Entity
+ */
+public interface EventsRepo extends JpaRepository<Events, Long> {
+    /**
+     * Find an event by its name
+     * @param name - the name to search by
+     * @return - the event as an optional
+     */
+    @Query("select e from Events e where e.eventName = ?1")
+    Optional<Events> findByEventName(String name);
+}
diff --git a/src/main/java/com/example/clientproject/data/logs/Logs.java b/src/main/java/com/example/clientproject/data/logs/Logs.java
new file mode 100644
index 0000000..190fee8
--- /dev/null
+++ b/src/main/java/com/example/clientproject/data/logs/Logs.java
@@ -0,0 +1,43 @@
+package com.example.clientproject.data.logs;
+
+import com.example.clientproject.data.converters.TinyIntToBoolean;
+import com.example.clientproject.data.events.Events;
+import com.example.clientproject.data.users.Users;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.*;
+
+/**
+ * Entity object for logs
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Entity
+public class Logs {
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private long logId;
+    private String logDetails;
+    private String logDateTime;
+    @Convert(converter = TinyIntToBoolean.class)
+    private boolean logSuperAdmin;
+
+    @ManyToOne
+    @JoinColumn(name="User_Id", nullable=false)
+    private Users user;
+
+    @ManyToOne
+    @JoinColumn(name="Event_Id", nullable=false)
+    private Events event;
+
+    public Logs(String details, String dateTime, boolean superAdmin, Users aUser, Events aEvent) {
+        logDetails = details;
+        logDateTime = dateTime;
+        logSuperAdmin = superAdmin;
+        user = aUser;
+        event = aEvent;
+    }
+}
diff --git a/src/main/java/com/example/clientproject/data/logs/LogsRepo.java b/src/main/java/com/example/clientproject/data/logs/LogsRepo.java
new file mode 100644
index 0000000..7c59219
--- /dev/null
+++ b/src/main/java/com/example/clientproject/data/logs/LogsRepo.java
@@ -0,0 +1,43 @@
+package com.example.clientproject.data.logs;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+
+import java.util.List;
+
+/**
+ * JPA Repo for the Logs entity
+ */
+public interface LogsRepo extends JpaRepository<Logs, Long> {
+    /**
+     * Find all the logs from a specific date time
+     * @param dateTime - the datetime to search by
+     * @return - list of logs from that date time
+     */
+    @Query("select l from Logs l where l.logDateTime like ?1")
+    List<Logs> findByDateTime(String dateTime);
+
+    /**
+     * Find all the logs for a specific event
+     * @param eventId - the id of the event to search by
+     * @return - a list of logs with that event
+     */
+    @Query("select l from Logs l where l.event.eventId = ?1")
+    List<Logs> findByEventId(long eventId);
+
+    /**
+     * Find all the logs for a specific user
+     * @param userId - the id of the user to search by
+     * @return - a list of all the logs for that user
+     */
+    @Query("select l from Logs l where l.user.userId = ?1")
+    List<Logs> findByUserId(long userId);
+
+    /**
+     * Find all the logs by a specific super admin status
+     * @param superAdminStatus - the status to search by
+     * @return - a list of the logs found
+     */
+    @Query("select l from Logs l where l.logSuperAdmin = ?1")
+    List<Logs> findBySuperAdminStatus(boolean superAdminStatus);
+}
diff --git a/src/main/java/com/example/clientproject/data/users/Users.java b/src/main/java/com/example/clientproject/data/users/Users.java
index f5c4834..96803f2 100644
--- a/src/main/java/com/example/clientproject/data/users/Users.java
+++ b/src/main/java/com/example/clientproject/data/users/Users.java
@@ -1,5 +1,6 @@
 package com.example.clientproject.data.users;
 
+import com.example.clientproject.data.logs.Logs;
 import com.example.clientproject.data.shops.Shops;
 import com.example.clientproject.data.userStampBoards.UserStampBoards;
 import com.example.clientproject.data.tags.Tags;
@@ -91,6 +92,10 @@ public class Users {
     )
     private List<Tags> favouriteTags;
 
+    @OneToMany(cascade=CascadeType.ALL, orphanRemoval = true)
+    @JoinColumn(name="User_Id", nullable=false)
+    private Set<Logs> logs;
+
     public String toString(){
         return "User:" + this.getUserFirstName();
     }
-- 
GitLab