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); + } +}