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/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 d1ba851..c055f2a 100644 --- a/src/main/java/dev/example/restaurantManager/model/MenuItem.java +++ b/src/main/java/dev/example/restaurantManager/model/MenuItem.java @@ -1,16 +1,17 @@ package dev.example.restaurantManager.model; +import dev.example.restaurantManager.Interfaces.IMenuItem; import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import org.springframework.boot.autoconfigure.web.WebProperties; + import java.util.List; -@Data -@AllArgsConstructor -@NoArgsConstructor @Entity -public class MenuItem { +@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) +public abstract class MenuItem implements IMenuItem { @Id private String id; @@ -21,10 +22,62 @@ public 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; this.description = description; this.price = price; } + + @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 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 { +} diff --git a/src/main/java/dev/example/restaurantManager/utilities/DataLoader.java b/src/main/java/dev/example/restaurantManager/utilities/DataLoader.java index 760cf2a..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,15 +99,31 @@ 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( + MenuItem menuItem; + menuItem = new Dessert( UUID.randomUUID().toString(), faker.food().dish(), - faker.food().ingredient() + " " + faker.food().ingredient() , - faker.number().randomDouble(2, 5, 30) + 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()); + } +}