diff --git a/pom.xml b/pom.xml
index 99302c7..a088f23 100644
--- a/pom.xml
+++ b/pom.xml
@@ -108,7 +108,15 @@
-
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 7
+ 7
+
+
+
diff --git a/pom.xml~ b/pom.xml~
new file mode 100644
index 0000000..5e696c8
--- /dev/null
+++ b/pom.xml~
@@ -0,0 +1,114 @@
+
+
+ 4.0.0
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 3.3.4
+
+
+ dev.example
+ restaurantManager
+ 0.0.1-SNAPSHOT
+ restaurantManager
+ Demo project for Spring Boot with API rest
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 21
+
+
+
+ me.paulschwarz
+ spring-dotenv
+ 2.5.4
+
+
+ org.springframework.boot
+ spring-boot-starter-data-jpa
+
+
+ org.springdoc
+ springdoc-openapi-starter-webmvc-ui
+ 2.1.0
+
+
+ io.rest-assured
+ rest-assured
+ 5.5.0
+ test
+
+
+ org.springframework.boot
+ spring-boot-starter-thymeleaf
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ org.springframework.boot
+ spring-boot-devtools
+ runtime
+ true
+
+
+
+
+ com.h2database
+ h2
+ 2.3.232
+
+
+ org.projectlombok
+ lombok
+ true
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ com.github.javafaker
+ javafaker
+ 1.0.2
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+ org.projectlombok
+ lombok
+
+
+
+ org.apache.maven.pluginsmaven-compiler-plugin77
+
+
+
+
diff --git a/src/main/java/dev/example/restaurantManager/model/Dessert.java b/src/main/java/dev/example/restaurantManager/model/Dessert.java
new file mode 100644
index 0000000..f10fcae
--- /dev/null
+++ b/src/main/java/dev/example/restaurantManager/model/Dessert.java
@@ -0,0 +1,13 @@
+package dev.example.restaurantManager.model;
+
+import jakarta.persistence.Entity;
+
+@Entity
+public class Dessert extends MenuItem {
+ private String dessertSpecificProperty;
+
+ public Dessert(String id, String name, String description, double price, String dessertSpecificProperty) {
+ super(id, name, description, price);
+ this.dessertSpecificProperty = dessertSpecificProperty;
+ }
+}
diff --git a/src/main/java/dev/example/restaurantManager/model/IMenuItem.java b/src/main/java/dev/example/restaurantManager/model/IMenuItem.java
new file mode 100644
index 0000000..babe33d
--- /dev/null
+++ b/src/main/java/dev/example/restaurantManager/model/IMenuItem.java
@@ -0,0 +1,20 @@
+package dev.example.restaurantManager.model;
+
+public interface IMenuItem {
+
+ String getId();
+
+ String getName();
+
+ String getDescription();
+
+ double getPrice();
+
+ void setId(String id);
+
+ void setName(String name);
+
+ void setDescription(String description);
+
+ void setPrice(double price);
+}
diff --git a/src/main/java/dev/example/restaurantManager/model/MainCourse.java b/src/main/java/dev/example/restaurantManager/model/MainCourse.java
new file mode 100644
index 0000000..4d2d67a
--- /dev/null
+++ b/src/main/java/dev/example/restaurantManager/model/MainCourse.java
@@ -0,0 +1,14 @@
+package dev.example.restaurantManager.model;
+
+import jakarta.persistence.Entity;
+
+@Entity
+public class MainCourse extends MenuItem {
+
+ private String mainCourseSpecificProperty;
+
+ public MainCourse(String id, String name, String description, double price, String mainCourseSpecificProperty) {
+ super(id, name, description, price);
+ this.mainCourseSpecificProperty = mainCourseSpecificProperty;
+ }
+}
diff --git a/src/main/java/dev/example/restaurantManager/model/MenuItem.java b/src/main/java/dev/example/restaurantManager/model/MenuItem.java
index 45a6c84..1be2f24 100644
--- a/src/main/java/dev/example/restaurantManager/model/MenuItem.java
+++ b/src/main/java/dev/example/restaurantManager/model/MenuItem.java
@@ -11,7 +11,8 @@
@AllArgsConstructor
@NoArgsConstructor
@Entity
-public class MenuItem {
+@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
+public abstract class MenuItem implements IMenuItem {
@Id
private String id;
diff --git a/src/main/java/dev/example/restaurantManager/utilities/DataLoader.java b/src/main/java/dev/example/restaurantManager/utilities/DataLoader.java
index 760cf2a..0923c18 100644
--- a/src/main/java/dev/example/restaurantManager/utilities/DataLoader.java
+++ b/src/main/java/dev/example/restaurantManager/utilities/DataLoader.java
@@ -96,14 +96,40 @@ private void createTables() {
// we are going to create 25 menu items
// and save them in the H2 local database
+// private void createMenuItemsOld() {
+// for (int i = 0; i < 25; i++) {
+// MenuItem menuItem = new MenuItem(
+// UUID.randomUUID().toString(),
+// faker.food().dish(),
+// faker.food().ingredient() + " " + faker.food().ingredient() ,
+// faker.number().randomDouble(2, 5, 30)
+// );
+// menuItemRepository.save(menuItem);
+// }
+// }
+
private void createMenuItems() {
for (int i = 0; i < 25; i++) {
- MenuItem menuItem = new MenuItem(
- UUID.randomUUID().toString(),
- faker.food().dish(),
- faker.food().ingredient() + " " + faker.food().ingredient() ,
- faker.number().randomDouble(2, 5, 30)
- );
+ MenuItem menuItem;
+ if (faker.random().nextBoolean()) {
+ // Create a MainCourse
+ menuItem = new MainCourse(
+ UUID.randomUUID().toString(),
+ faker.food().dish(),
+ faker.food().ingredient() + " " + faker.food().ingredient() ,
+ faker.number().randomDouble(2, 5, 30),
+ "Some main course specific property"
+ );
+ } else {
+ // Create a Dessert
+ menuItem = new Dessert(
+ UUID.randomUUID().toString(),
+ faker.food().dish(),
+ faker.food().ingredient() + " " + faker.food().ingredient() ,
+ faker.number().randomDouble(2, 5, 30),
+ "Some dessert specific property"
+ );
+ }
menuItemRepository.save(menuItem);
}
}
diff --git a/src/test/java/dev/example/restaurantManager/menuItem/MenuItemTest.java b/src/test/java/dev/example/restaurantManager/menuItem/MenuItemTest.java
new file mode 100644
index 0000000..14a04f7
--- /dev/null
+++ b/src/test/java/dev/example/restaurantManager/menuItem/MenuItemTest.java
@@ -0,0 +1,48 @@
+package dev.example.restaurantManager.menuItem;
+
+import dev.example.restaurantManager.model.Dessert;
+import dev.example.restaurantManager.model.IMenuItem;
+import dev.example.restaurantManager.model.MainCourse;
+import org.junit.jupiter.api.Test;
+
+import java.util.UUID;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class MenuItemTest {
+ @Test
+ public void testIMenuItemInterface() {
+ IMenuItem mainCourse = new MainCourse(
+ UUID.randomUUID().toString(),
+ "Grilled Chicken",
+ "Grilled chicken breast with roasted vegetables",
+ 15.99,
+ "Some main course specific property"
+ );
+ IMenuItem dessert = new Dessert(
+ UUID.randomUUID().toString(),
+ "Chocolate Cake",
+ "Moist chocolate cake with vanilla ice cream",
+ 6.99,
+ "Some dessert specific property"
+ );
+ assertEquals(mainCourse.getName(), "Grilled Chicken");
+ assertEquals(mainCourse.getDescription(), "Grilled chicken breast with roasted vegetables");
+ assertEquals(mainCourse.getPrice(), 15.99, 0.01);
+ assertEquals(dessert.getName(), "Chocolate Cake");
+ assertEquals(dessert.getDescription(), "Moist chocolate cake with vanilla ice cream");
+ assertEquals(dessert.getPrice(), 6.99, 0.01);
+ mainCourse.setName("Grilled Steak");
+ mainCourse.setDescription("Grilled steak with roasted potatoes");
+ mainCourse.setPrice(19.99);
+ dessert.setName("Cheesecake");
+ dessert.setDescription("Creamy cheesecake with strawberry sauce");
+ dessert.setPrice(7.99);
+ assertEquals(mainCourse.getName(), "Grilled Steak");
+ assertEquals(mainCourse.getDescription(), "Grilled steak with roasted potatoes");
+ assertEquals(mainCourse.getPrice(), 19.99, 0.01);
+ assertEquals(dessert.getName(), "Cheesecake");
+ assertEquals(dessert.getDescription(), "Creamy cheesecake with strawberry sauce");
+ assertEquals(dessert.getPrice(), 7.99, 0.01);
+ }
+}