From a4bbb152f3c0dbf52a723e20781d0bfa558d8cf1 Mon Sep 17 00:00:00 2001
From: Jan Tymel <jan.tymel@notix.cz>
Date: Mon, 6 Jul 2020 13:15:14 +0200
Subject: [PATCH] Add initial version of entities

---
 pom.xml                                       |  8 +++++
 .../com/example/demo/DemoApplication.java     | 23 +++++++++++++++
 .../example/demo/domain/AssessmentLevel.java  | 19 ++++++++++++
 .../com/example/demo/domain/BaseLevel.java    | 12 ++++++++
 .../com/example/demo/domain/GameLevel.java    | 29 +++++++++++++++++++
 .../java/com/example/demo/domain/Hint.java    | 18 ++++++++++++
 .../com/example/demo/domain/InfoLevel.java    | 15 ++++++++++
 .../com/example/demo/{ => domain}/Person.java |  2 +-
 .../repository/AssessmentLevelRepository.java |  7 +++++
 .../demo/repository/BaseLevelRepository.java  |  7 +++++
 .../demo/repository/GameLevelRepository.java  |  7 +++++
 .../{ => repository}/PersonRepository.java    |  3 +-
 12 files changed, 148 insertions(+), 2 deletions(-)
 create mode 100644 src/main/java/com/example/demo/domain/AssessmentLevel.java
 create mode 100644 src/main/java/com/example/demo/domain/BaseLevel.java
 create mode 100644 src/main/java/com/example/demo/domain/GameLevel.java
 create mode 100644 src/main/java/com/example/demo/domain/Hint.java
 create mode 100644 src/main/java/com/example/demo/domain/InfoLevel.java
 rename src/main/java/com/example/demo/{ => domain}/Person.java (97%)
 create mode 100644 src/main/java/com/example/demo/repository/AssessmentLevelRepository.java
 create mode 100644 src/main/java/com/example/demo/repository/BaseLevelRepository.java
 create mode 100644 src/main/java/com/example/demo/repository/GameLevelRepository.java
 rename src/main/java/com/example/demo/{ => repository}/PersonRepository.java (69%)

diff --git a/pom.xml b/pom.xml
index e2432201..8e0c6095 100644
--- a/pom.xml
+++ b/pom.xml
@@ -17,6 +17,8 @@
 
 	<properties>
 		<java.version>11</java.version>
+
+		<projectlombok.version>1.18.12</projectlombok.version>
 	</properties>
 
 	<dependencies>
@@ -45,6 +47,12 @@
 				</exclusion>
 			</exclusions>
 		</dependency>
+
+		<dependency>
+			<groupId>org.projectlombok</groupId>
+			<artifactId>lombok</artifactId>
+			<version>${projectlombok.version}</version>
+		</dependency>
 	</dependencies>
 
 	<build>
diff --git a/src/main/java/com/example/demo/DemoApplication.java b/src/main/java/com/example/demo/DemoApplication.java
index 41072b94..41df739f 100644
--- a/src/main/java/com/example/demo/DemoApplication.java
+++ b/src/main/java/com/example/demo/DemoApplication.java
@@ -1,5 +1,9 @@
 package com.example.demo;
 
+import com.example.demo.domain.GameLevel;
+import com.example.demo.domain.Person;
+import com.example.demo.repository.GameLevelRepository;
+import com.example.demo.repository.PersonRepository;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.boot.CommandLineRunner;
@@ -9,6 +13,7 @@ import org.springframework.context.annotation.Bean;
 
 import java.util.Arrays;
 import java.util.List;
+import java.util.Optional;
 
 @SpringBootApplication
 public class DemoApplication {
@@ -56,4 +61,22 @@ public class DemoApplication {
 					"\t" + personRepository.findByName(person.getName()).toString()));
 		};
 	}
+
+	@Bean
+	CommandLineRunner anotherDemo(GameLevelRepository gameLevelRepository) {
+		return args -> {
+
+			gameLevelRepository.deleteAll();
+
+			GameLevel gameLevel = new GameLevel();
+			gameLevel.setTitle("Title");
+
+
+			GameLevel savedGameLevel = gameLevelRepository.save(gameLevel);
+			log.info("Saved game level: {}", savedGameLevel);
+
+			Optional<GameLevel> foundGameLevel = gameLevelRepository.findById(savedGameLevel.getId());
+			log.info("Saved game level: {}", foundGameLevel);
+		};
+	}
 }
diff --git a/src/main/java/com/example/demo/domain/AssessmentLevel.java b/src/main/java/com/example/demo/domain/AssessmentLevel.java
new file mode 100644
index 00000000..3b813c47
--- /dev/null
+++ b/src/main/java/com/example/demo/domain/AssessmentLevel.java
@@ -0,0 +1,19 @@
+package com.example.demo.domain;
+
+import lombok.Data;
+import org.neo4j.ogm.annotation.GeneratedValue;
+import org.neo4j.ogm.annotation.Id;
+import org.neo4j.ogm.annotation.NodeEntity;
+
+@NodeEntity
+@Data
+public class AssessmentLevel extends BaseLevel {
+
+    @Id
+    @GeneratedValue
+    private Long id;
+
+    private String assessmentType;
+
+
+}
diff --git a/src/main/java/com/example/demo/domain/BaseLevel.java b/src/main/java/com/example/demo/domain/BaseLevel.java
new file mode 100644
index 00000000..988e4a5c
--- /dev/null
+++ b/src/main/java/com/example/demo/domain/BaseLevel.java
@@ -0,0 +1,12 @@
+package com.example.demo.domain;
+
+import lombok.Data;
+import org.neo4j.ogm.annotation.NodeEntity;
+
+@NodeEntity
+@Data
+public class BaseLevel {
+    private String title;
+    private String estimatedDuration;
+    private Long maxScore;
+}
diff --git a/src/main/java/com/example/demo/domain/GameLevel.java b/src/main/java/com/example/demo/domain/GameLevel.java
new file mode 100644
index 00000000..27a33160
--- /dev/null
+++ b/src/main/java/com/example/demo/domain/GameLevel.java
@@ -0,0 +1,29 @@
+package com.example.demo.domain;
+
+import lombok.Data;
+import org.neo4j.ogm.annotation.GeneratedValue;
+import org.neo4j.ogm.annotation.Id;
+import org.neo4j.ogm.annotation.NodeEntity;
+import org.neo4j.ogm.annotation.Relationship;
+
+import java.util.List;
+
+
+@NodeEntity
+@Data
+public class GameLevel extends BaseLevel {
+
+    @Id
+    @GeneratedValue
+    private Long id;
+
+    private String content;
+    private String solutionPenalized;
+    private String flag;
+    private String solution;
+    private String attachments;
+    private String incorrectFlagLimit;
+
+    @Relationship(type = "GAME_LEVEL_HINTS", direction = Relationship.UNDIRECTED)
+    private List<Hint> hints;
+}
diff --git a/src/main/java/com/example/demo/domain/Hint.java b/src/main/java/com/example/demo/domain/Hint.java
new file mode 100644
index 00000000..e4a2c414
--- /dev/null
+++ b/src/main/java/com/example/demo/domain/Hint.java
@@ -0,0 +1,18 @@
+package com.example.demo.domain;
+
+import lombok.Data;
+import org.neo4j.ogm.annotation.GeneratedValue;
+import org.neo4j.ogm.annotation.Id;
+
+@Data
+public class Hint {
+
+    @Id
+    @GeneratedValue
+    private Long id;
+
+    private String title;
+    private String content;
+    private String hintPenalty;
+    private String orderInLevel;
+}
diff --git a/src/main/java/com/example/demo/domain/InfoLevel.java b/src/main/java/com/example/demo/domain/InfoLevel.java
new file mode 100644
index 00000000..eaed3579
--- /dev/null
+++ b/src/main/java/com/example/demo/domain/InfoLevel.java
@@ -0,0 +1,15 @@
+package com.example.demo.domain;
+
+import org.neo4j.ogm.annotation.GeneratedValue;
+import org.neo4j.ogm.annotation.Id;
+import org.neo4j.ogm.annotation.NodeEntity;
+
+@NodeEntity
+public class InfoLevel extends BaseLevel {
+
+    @Id
+    @GeneratedValue
+    private Long id;
+
+    private String content;
+}
diff --git a/src/main/java/com/example/demo/Person.java b/src/main/java/com/example/demo/domain/Person.java
similarity index 97%
rename from src/main/java/com/example/demo/Person.java
rename to src/main/java/com/example/demo/domain/Person.java
index e764ec89..bea7fdb3 100644
--- a/src/main/java/com/example/demo/Person.java
+++ b/src/main/java/com/example/demo/domain/Person.java
@@ -1,5 +1,5 @@
 
-package com.example.demo;
+package com.example.demo.domain;
 
 import org.neo4j.ogm.annotation.GeneratedValue;
 import org.neo4j.ogm.annotation.Id;
diff --git a/src/main/java/com/example/demo/repository/AssessmentLevelRepository.java b/src/main/java/com/example/demo/repository/AssessmentLevelRepository.java
new file mode 100644
index 00000000..8f053645
--- /dev/null
+++ b/src/main/java/com/example/demo/repository/AssessmentLevelRepository.java
@@ -0,0 +1,7 @@
+package com.example.demo.repository;
+
+import com.example.demo.domain.AssessmentLevel;
+import org.springframework.data.neo4j.repository.Neo4jRepository;
+
+public interface AssessmentLevelRepository  extends Neo4jRepository<AssessmentLevel, Long> {
+}
diff --git a/src/main/java/com/example/demo/repository/BaseLevelRepository.java b/src/main/java/com/example/demo/repository/BaseLevelRepository.java
new file mode 100644
index 00000000..51a0b97b
--- /dev/null
+++ b/src/main/java/com/example/demo/repository/BaseLevelRepository.java
@@ -0,0 +1,7 @@
+package com.example.demo.repository;
+
+import com.example.demo.domain.BaseLevel;
+import org.springframework.data.neo4j.repository.Neo4jRepository;
+
+public interface BaseLevelRepository  extends Neo4jRepository<BaseLevel, Long> {
+}
diff --git a/src/main/java/com/example/demo/repository/GameLevelRepository.java b/src/main/java/com/example/demo/repository/GameLevelRepository.java
new file mode 100644
index 00000000..92a29e07
--- /dev/null
+++ b/src/main/java/com/example/demo/repository/GameLevelRepository.java
@@ -0,0 +1,7 @@
+package com.example.demo.repository;
+
+import com.example.demo.domain.GameLevel;
+import org.springframework.data.neo4j.repository.Neo4jRepository;
+
+public interface GameLevelRepository extends Neo4jRepository<GameLevel, Long> {
+}
diff --git a/src/main/java/com/example/demo/PersonRepository.java b/src/main/java/com/example/demo/repository/PersonRepository.java
similarity index 69%
rename from src/main/java/com/example/demo/PersonRepository.java
rename to src/main/java/com/example/demo/repository/PersonRepository.java
index 7d1a977f..a4ef5786 100644
--- a/src/main/java/com/example/demo/PersonRepository.java
+++ b/src/main/java/com/example/demo/repository/PersonRepository.java
@@ -1,5 +1,6 @@
-package com.example.demo;
+package com.example.demo.repository;
 
+import com.example.demo.domain.Person;
 import org.springframework.data.repository.CrudRepository;
 
 public interface PersonRepository extends CrudRepository<Person, Long> {
-- 
GitLab