From fe2621d95c314bfb1cdcdb68d8d77a67bc93a962 Mon Sep 17 00:00:00 2001 From: emy Date: Mon, 18 Nov 2024 15:38:34 +0100 Subject: [PATCH 1/5] Refactor MenuItem to Abstract Class --- src/main/java/dev/example/restaurantManager/model/MenuItem.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/dev/example/restaurantManager/model/MenuItem.java b/src/main/java/dev/example/restaurantManager/model/MenuItem.java index d1ba851..e036263 100644 --- a/src/main/java/dev/example/restaurantManager/model/MenuItem.java +++ b/src/main/java/dev/example/restaurantManager/model/MenuItem.java @@ -10,7 +10,7 @@ @AllArgsConstructor @NoArgsConstructor @Entity -public class MenuItem { +public abstract class MenuItem { @Id private String id; From 8af166f2b2fc72d296f609c7bd9601ce876bd065 Mon Sep 17 00:00:00 2001 From: emy Date: Mon, 18 Nov 2024 16:02:04 +0100 Subject: [PATCH 2/5] Create Subclasses --- .../restaurantManager/model/Dessert.java | 27 +++++++++++++++++++ .../restaurantManager/model/MainCourse.java | 24 +++++++++++++++++ .../restaurantManager/model/MenuItem.java | 10 ++++--- .../utilities/DataLoader.java | 14 +++++----- 4 files changed, 65 insertions(+), 10 deletions(-) create mode 100644 src/main/java/dev/example/restaurantManager/model/Dessert.java create mode 100644 src/main/java/dev/example/restaurantManager/model/MainCourse.java 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..a3399c3 --- /dev/null +++ b/src/main/java/dev/example/restaurantManager/model/Dessert.java @@ -0,0 +1,27 @@ +package dev.example.restaurantManager.model; + +import jakarta.persistence.Entity; + +@Entity +public class Dessert extends MenuItem{ + + private boolean sugarFree; + + public Dessert(){ + + } + + public Dessert(String id, String name, String description, double price, boolean sugarFree) { + super(id,name,description,price); + this.sugarFree = sugarFree; + } + + public boolean isSugarFree(){ + return sugarFree; + } + + public void setSugarFree(boolean sugarFree){ + this.sugarFree = sugarFree; + } + +} 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..b95c3cc --- /dev/null +++ b/src/main/java/dev/example/restaurantManager/model/MainCourse.java @@ -0,0 +1,24 @@ +package dev.example.restaurantManager.model; + +import jakarta.persistence.Entity; + +@Entity +public class MainCourse extends MenuItem{ + + private boolean vegan; + + public MainCourse(){ + + } + + public MainCourse(String id, String name, String description, double price, boolean vegan) { + super(id,name,description,price); + this.vegan = vegan; + } + public boolean isVegan(){ + return vegan; + } + public void setVegan(boolean vegan){ + this.vegan = vegan; + } +} diff --git a/src/main/java/dev/example/restaurantManager/model/MenuItem.java b/src/main/java/dev/example/restaurantManager/model/MenuItem.java index e036263..e909041 100644 --- a/src/main/java/dev/example/restaurantManager/model/MenuItem.java +++ b/src/main/java/dev/example/restaurantManager/model/MenuItem.java @@ -4,12 +4,12 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import org.springframework.boot.autoconfigure.web.WebProperties; + import java.util.List; -@Data -@AllArgsConstructor -@NoArgsConstructor @Entity +@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) public abstract class MenuItem { @Id @@ -27,4 +27,8 @@ public MenuItem(String id, String name, String description, double price) { this.description = description; this.price = price; } + + public MenuItem() { + + } } \ No newline at end of file diff --git a/src/main/java/dev/example/restaurantManager/utilities/DataLoader.java b/src/main/java/dev/example/restaurantManager/utilities/DataLoader.java index 760cf2a..36f9a31 100644 --- a/src/main/java/dev/example/restaurantManager/utilities/DataLoader.java +++ b/src/main/java/dev/example/restaurantManager/utilities/DataLoader.java @@ -98,13 +98,13 @@ private void createTables() { // and save them in the H2 local database 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) - ); - menuItemRepository.save(menuItem); +// 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); } } From 1c1fae63171ed266202b72bb35d19828968a0a59 Mon Sep 17 00:00:00 2001 From: emy Date: Mon, 18 Nov 2024 16:17:55 +0100 Subject: [PATCH 3/5] Create Interface Class --- .../Interfaces/IMenuItem.java | 12 +++++ .../restaurantManager/model/MenuItem.java | 53 ++++++++++++++++++- 2 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 src/main/java/dev/example/restaurantManager/Interfaces/IMenuItem.java diff --git a/src/main/java/dev/example/restaurantManager/Interfaces/IMenuItem.java b/src/main/java/dev/example/restaurantManager/Interfaces/IMenuItem.java new file mode 100644 index 0000000..c398a0f --- /dev/null +++ b/src/main/java/dev/example/restaurantManager/Interfaces/IMenuItem.java @@ -0,0 +1,12 @@ +package dev.example.restaurantManager.Interfaces; + +public interface IMenuItem { + String getId(); + void setId(String id); + String getName(); + void setName(String name); + String getDescription(); + void setDescription(String description); + double getPrice(); + void setPrice(double price); +} diff --git a/src/main/java/dev/example/restaurantManager/model/MenuItem.java b/src/main/java/dev/example/restaurantManager/model/MenuItem.java index e909041..c055f2a 100644 --- a/src/main/java/dev/example/restaurantManager/model/MenuItem.java +++ b/src/main/java/dev/example/restaurantManager/model/MenuItem.java @@ -1,5 +1,6 @@ package dev.example.restaurantManager.model; +import dev.example.restaurantManager.Interfaces.IMenuItem; import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Data; @@ -10,7 +11,7 @@ @Entity @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) -public abstract class MenuItem { +public abstract class MenuItem implements IMenuItem { @Id private String id; @@ -21,6 +22,10 @@ public abstract class MenuItem { @ManyToMany(mappedBy = "menuItems") private List menus; + public MenuItem() { + + } + public MenuItem(String id, String name, String description, double price) { this.id = id; this.name = name; @@ -28,7 +33,51 @@ public MenuItem(String id, String name, String description, double price) { this.price = price; } - public MenuItem() { + @Override + public void setId(String id) { + this.id = id; + } + + @Override + public String getId() { + return id; + } + + @Override + public void setName(String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } + + @Override + public void setPrice(double price) { + this.price = price; + } + + @Override + public double getPrice() { + return price; + } + + @Override + public void setDescription(String description) { + this.description = description; + } + + @Override + public String getDescription() { + return description; + } + @Override + public String toString(){ + return "id=" + this.getId() + + ", name=" + this.getName() + + ", description=" + this.getDescription() + + ", price=" + this.getPrice(); } } \ No newline at end of file From 782b9734e22457ab2734a48cde382254709fa263 Mon Sep 17 00:00:00 2001 From: emy Date: Mon, 18 Nov 2024 16:53:43 +0100 Subject: [PATCH 4/5] Update Repository and Service Classes --- .../restaurantManager/repository/DessertRepository.java | 7 +++++++ .../restaurantManager/repository/MainCourseRepository.java | 7 +++++++ 2 files changed, 14 insertions(+) create mode 100644 src/main/java/dev/example/restaurantManager/repository/DessertRepository.java create mode 100644 src/main/java/dev/example/restaurantManager/repository/MainCourseRepository.java diff --git a/src/main/java/dev/example/restaurantManager/repository/DessertRepository.java b/src/main/java/dev/example/restaurantManager/repository/DessertRepository.java new file mode 100644 index 0000000..3598271 --- /dev/null +++ b/src/main/java/dev/example/restaurantManager/repository/DessertRepository.java @@ -0,0 +1,7 @@ +package dev.example.restaurantManager.repository; + +import dev.example.restaurantManager.model.Dessert; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface DessertRepository extends JpaRepository { +} diff --git a/src/main/java/dev/example/restaurantManager/repository/MainCourseRepository.java b/src/main/java/dev/example/restaurantManager/repository/MainCourseRepository.java new file mode 100644 index 0000000..3e7f265 --- /dev/null +++ b/src/main/java/dev/example/restaurantManager/repository/MainCourseRepository.java @@ -0,0 +1,7 @@ +package dev.example.restaurantManager.repository; + +import dev.example.restaurantManager.model.MainCourse; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface MainCourseRepository extends JpaRepository { +} From 3c521c6c77d139d68dd2155a741d4b4cab33cbb9 Mon Sep 17 00:00:00 2001 From: emy Date: Mon, 18 Nov 2024 17:33:18 +0100 Subject: [PATCH 5/5] Create Test Classes --- .../utilities/DataLoader.java | 41 ++++++++++---- .../restaurantManager/MenuItemTest.java | 56 +++++++++++++++++++ 2 files changed, 87 insertions(+), 10 deletions(-) create mode 100644 src/test/java/dev/example/restaurantManager/MenuItemTest.java diff --git a/src/main/java/dev/example/restaurantManager/utilities/DataLoader.java b/src/main/java/dev/example/restaurantManager/utilities/DataLoader.java index 36f9a31..64ecdea 100644 --- a/src/main/java/dev/example/restaurantManager/utilities/DataLoader.java +++ b/src/main/java/dev/example/restaurantManager/utilities/DataLoader.java @@ -5,7 +5,6 @@ import dev.example.restaurantManager.repository.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; - import java.time.LocalDate; import java.util.*; import java.util.concurrent.TimeUnit; @@ -33,6 +32,11 @@ public class DataLoader { private ShippingOrderRepository shippingOrderRepository; @Autowired private TakeAwayOrderRepository takeAwayOrderRepository; + @Autowired + private MainCourseRepository mainCourseRepository; + @Autowired + private DessertRepository dessertRepository; + private final Faker faker = new Faker(new Locale("en-US")); // master method orchestrating all other methods to @@ -44,7 +48,8 @@ public void loadAllData() { // then create relationships between them createCustomers(); createTables(); - createMenuItems(); + createMainCourse(); + createDessert(); // create and assign menu items createMenusAndAssignMenuItems(); @@ -94,17 +99,33 @@ private void createTables() { } } + private void createMainCourse() { + for (int i = 0; i < 10; i++) { + MenuItem menuItem; + menuItem = new MainCourse( + UUID.randomUUID().toString(), + faker.food().dish(), + faker.food().ingredient() + " " + faker.food().ingredient(), + faker.number().randomDouble(2, 5, 30), + true + ); + menuItemRepository.save(menuItem); + } + } + // we are going to create 25 menu items // and save them in the H2 local database - private void createMenuItems() { + private void createDessert() { 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); + MenuItem menuItem; + menuItem = new Dessert( + UUID.randomUUID().toString(), + faker.food().dish(), + faker.food().ingredient() + " " + faker.food().ingredient(), + faker.number().randomDouble(2, 5, 30), + faker.random().nextBoolean() + ); + menuItemRepository.save(menuItem); } } diff --git a/src/test/java/dev/example/restaurantManager/MenuItemTest.java b/src/test/java/dev/example/restaurantManager/MenuItemTest.java new file mode 100644 index 0000000..36534f4 --- /dev/null +++ b/src/test/java/dev/example/restaurantManager/MenuItemTest.java @@ -0,0 +1,56 @@ +package dev.example.restaurantManager; + + +import dev.example.restaurantManager.model.Dessert; +import dev.example.restaurantManager.model.MainCourse; +import dev.example.restaurantManager.repository.DessertRepository; +import dev.example.restaurantManager.repository.MainCourseRepository; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; + +@DataJpaTest +public class MenuItemTest { + + @Autowired + private DessertRepository dessertRepository; + @Autowired + private MainCourseRepository mainCourseRepository; + + @Test + public void dessertTest() { + Dessert dessert = new Dessert( + "MD001", + "Carrot Cake", + "Carrot sweet", + 7.0, + true + ); + dessertRepository.save(dessert); + + Dessert found = dessertRepository.findById("MD001").orElse(null); + assertNotNull(found); + assertEquals(dessert.getDescription(), found.getDescription()); + assertTrue(found.isSugarFree()); + } + + @Test + public void mainCourseTest() { + + MainCourse mainCourse = new MainCourse( + "MC001", + "Toat", + "Potatoes with pig", + 17.50, + false + ); + mainCourseRepository.save(mainCourse); + + MainCourse found = mainCourseRepository.findById("MC001").orElse(null); + assertNotNull(found); + assertEquals(mainCourse.getName(), found.getName()); + assertEquals(mainCourse.getDescription(), found.getDescription()); + } +}