diff --git a/_PRA/PRA03.md b/_PRA/PRA03.md index 5866338..8a92fcc 100644 --- a/_PRA/PRA03.md +++ b/_PRA/PRA03.md @@ -20,13 +20,13 @@ Implement and test a `ManyToMany` relationship between `Menu` and `MenuItem` ent Summary tasks: -- [ ] Design Entity Classes -- [ ] Implement JPA Repositories -- [ ] Create Service Layer -- [ ] Develop REST Controllers -- [ ] Configure H2 Database -- [ ] Write Unit Tests -- [ ] Test with Swagger API +- [X] Design Entity Classes +- [X] Implement JPA Repositories +- [X] Create Service Layer +- [X] Develop REST Controllers +- [X] Configure H2 Database +- [X] Write Unit Tests +- [X] Test with Swagger API Tasks: diff --git a/src/main/java/dev/example/restaurantManager/controller/MenuItemController.java b/src/main/java/dev/example/restaurantManager/controller/MenuItemController.java new file mode 100644 index 0000000..cbb693d --- /dev/null +++ b/src/main/java/dev/example/restaurantManager/controller/MenuItemController.java @@ -0,0 +1,81 @@ +package dev.example.restaurantManager.controller; + + +import dev.example.restaurantManager.model.MenuItem; +import dev.example.restaurantManager.service.MenuItemService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; + +@RequestMapping("/api/v1/menuItems") +@RestController +public class MenuItemController { + + @Autowired + private MenuItemService menuItemService; + + @GetMapping("/allMenuItems") + public ResponseEntity> getAllMenuItems() { + List menuItems = menuItemService.getAllMenuItems(); + HttpHeaders headers = getCommonHeaders("Get all menu items"); + return menuItems != null && !menuItems.isEmpty() + ? new ResponseEntity<>(menuItems, headers, HttpStatus.OK) + : new ResponseEntity<>(headers, HttpStatus.NOT_FOUND); + + } + + @PostMapping("/addMenuItem") + public ResponseEntity createMenuItem(@RequestBody MenuItem menuItem) { + MenuItem createdMenuItem = menuItemService.createMenuItem(menuItem); + HttpHeaders headers = getCommonHeaders("Create a new menu item"); + return createdMenuItem != null + ? new ResponseEntity<>(createdMenuItem, headers, HttpStatus.CREATED) + : new ResponseEntity<>(headers, HttpStatus.BAD_REQUEST); + } + + @PutMapping("/updateMenuItem/{id}") + public ResponseEntity updateMenuItem(@PathVariable String id, @RequestBody MenuItem menuItemDetails) { + MenuItem updatedMenuItem = menuItemService.updateMenuItem(id, menuItemDetails); + HttpHeaders headers = getCommonHeaders("Update a menu item"); + return updatedMenuItem != null + ? new ResponseEntity<>(updatedMenuItem, headers, HttpStatus.OK) + : new ResponseEntity<>(headers, HttpStatus.NOT_FOUND); + } + + @DeleteMapping("/deleteMenuItem/{id}") + public ResponseEntity deleteMenuItem(@PathVariable String id) { + boolean deleted = menuItemService.deleteMenuItem(id); + HttpHeaders headers = getCommonHeaders("Delete a menu item"); + headers.add("deleted", String.valueOf(deleted)); + return deleted + ? new ResponseEntity<>(headers, HttpStatus.NO_CONTENT) + : new ResponseEntity<>(headers, HttpStatus.NOT_FOUND); + } + + @GetMapping("/getMenuItem/{id}") + public ResponseEntity getMenuItemById(@PathVariable String id) { + MenuItem menuItem = menuItemService.getMenuItemById(id); + HttpHeaders headers = getCommonHeaders("Get a menu item by Id"); + return menuItem != null + ? new ResponseEntity<>(menuItem, headers, HttpStatus.OK) + : new ResponseEntity<>(headers, HttpStatus.NOT_FOUND); + } + + + private HttpHeaders getCommonHeaders(String description) { + HttpHeaders headers = new HttpHeaders(); + headers.add("desc", description); + headers.add("content-type", "application/json"); + headers.add("date", new Date().toString()); + headers.add("server", "H2 Database"); + headers.add("version", "1.0.0"); + headers.add("customer-count", String.valueOf(menuItemService.countMenuItems())); + headers.add("object", "customers"); + return headers; + } +} \ No newline at end of file diff --git a/src/main/java/dev/example/restaurantManager/controller/MenuRestaurantController.java b/src/main/java/dev/example/restaurantManager/controller/MenuRestaurantController.java new file mode 100644 index 0000000..4126c7e --- /dev/null +++ b/src/main/java/dev/example/restaurantManager/controller/MenuRestaurantController.java @@ -0,0 +1,83 @@ +package dev.example.restaurantManager.controller; + +import dev.example.restaurantManager.model.MenuRestaurant; +import dev.example.restaurantManager.service.MenuRestaurantService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; + +@RequestMapping("/api/v1/menu") +@RestController +public class MenuRestaurantController { + + @Autowired + private MenuRestaurantService menuRestaurantService; + + + @GetMapping("/allMenus") + public ResponseEntity> getAllMenus( ) { + List menuRestaurants = menuRestaurantService.getAllMenus(); + HttpHeaders headers = getCommonHeaders("Get all menus"); + + return menuRestaurants != null && !menuRestaurants.isEmpty() + ? new ResponseEntity<>(menuRestaurants, headers, HttpStatus.OK) + : new ResponseEntity<>(headers, HttpStatus.NOT_FOUND); + } + + @PostMapping("/add") + public ResponseEntity createMenu(@RequestBody MenuRestaurant menuRestaurant) { + MenuRestaurant createdMenu = menuRestaurantService.createMenu(menuRestaurant); + HttpHeaders headers = getCommonHeaders("Create a new menu"); + + return createdMenu != null + ? new ResponseEntity<>(createdMenu, headers, HttpStatus.CREATED) + : new ResponseEntity<>(headers, HttpStatus.BAD_REQUEST); + } + @PutMapping("/update/{id}") + public ResponseEntity updateMenu(@PathVariable String id, @RequestBody MenuRestaurant menuRestaurantDetails) { + MenuRestaurant updatedMenu = menuRestaurantService.updateMenu(id, menuRestaurantDetails); + HttpHeaders headers = getCommonHeaders("Update a menu"); + + return updatedMenu != null + ? new ResponseEntity<>(updatedMenu, headers, HttpStatus.OK) + : new ResponseEntity<>(headers, HttpStatus.NOT_FOUND); + } + + @DeleteMapping("/delete/{id}") + public ResponseEntity deleteMenu(@PathVariable String id) { + boolean deleted = menuRestaurantService.deleteMenu(id); + HttpHeaders headers = getCommonHeaders("Delete a menu"); + headers.add("deleted", String.valueOf(deleted)); + + return deleted + ? new ResponseEntity<>(headers, HttpStatus.NO_CONTENT) + : new ResponseEntity<>(headers, HttpStatus.NOT_FOUND); + } + + @GetMapping("/get/{id}") + public ResponseEntity getMenuById(@PathVariable String id) { + MenuRestaurant menu = menuRestaurantService.getMenuById(id); + HttpHeaders headers = getCommonHeaders("Get a menu"); + + return menu != null + ? new ResponseEntity<>(menu, headers, HttpStatus.OK) + : new ResponseEntity<>(headers, HttpStatus.NOT_FOUND); + } + + private HttpHeaders getCommonHeaders(String description) { + HttpHeaders headers = new HttpHeaders(); + headers.add("desc", description); + headers.add("content-type", "application/json"); + headers.add("date", new Date().toString()); + headers.add("server", "H2 Database"); + headers.add("version", "1.0.0"); + headers.add("menu-count", String.valueOf(menuRestaurantService.countMenus())); + headers.add("object", "customers"); + return headers; + } +} \ No newline at end of file diff --git a/src/main/java/dev/example/restaurantManager/model/CourseType.java b/src/main/java/dev/example/restaurantManager/model/CourseType.java new file mode 100644 index 0000000..4f21359 --- /dev/null +++ b/src/main/java/dev/example/restaurantManager/model/CourseType.java @@ -0,0 +1,7 @@ +package dev.example.restaurantManager.model; + +public enum CourseType { + STARTER, + MAIN, + DESSERT +} diff --git a/src/main/java/dev/example/restaurantManager/model/MenuItem.java b/src/main/java/dev/example/restaurantManager/model/MenuItem.java new file mode 100644 index 0000000..2ff97c2 --- /dev/null +++ b/src/main/java/dev/example/restaurantManager/model/MenuItem.java @@ -0,0 +1,91 @@ +package dev.example.restaurantManager.model; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import jakarta.persistence.*; +import lombok.*; +import org.hibernate.annotations.GenericGenerator; + +import java.awt.*; +import java.util.*; +import java.util.List; + +@AllArgsConstructor +@Entity +@Data +public class MenuItem { + @Id + @GeneratedValue(generator = "UUID") + @GenericGenerator(name = "UUID", strategy = "org.hibernate.id.UUIDGenerator") + private String id; + + private String name; + private String description; + private boolean isSpicy; + private boolean hasGluten; + private boolean isAvailable; + + @Enumerated(EnumType.STRING) + private CourseType courseType; + +// @ManyToMany(mappedBy = "menuItems") +// private Set menus = new HashSet<>(); + + // Many to many with + @JsonIgnore + @ManyToMany(mappedBy = "menuItems", fetch = FetchType.LAZY) + private List menuRestaurants; + + // Create add method + public void addItem(MenuRestaurant menu){ + this.menuRestaurants.add(menu); + menu.getMenuItems().add(this); + + } + // Create remove method + public void removeItem(MenuRestaurant menu) { + this.menuRestaurants.remove(menu); + menu.getMenuItems().remove(this); + } + + // Default constructor + public MenuItem() { + // this.id = UUID.randomUUID().toString(); + } +// Getters and setters + + @Override + public String toString() { + return "MenuRestaurant{" + + "id='" + id + '\'' + + ", name='" + name + '\'' + + ", description=" + description + + ", spicy=" + isSpicy + '\'' + + ", hasGluten=" + hasGluten + + ", available=" + isAvailable + + ", courseType=" + courseType + + //", menus=" + menuRestaurants + + '}'; + } + // Updated equals() method to compare all fields except 'menuRestaurants' + @Override + public boolean equals(Object object) { + if (this == object) return true; + if (!(object instanceof MenuItem)) return false; + MenuItem that = (MenuItem) object; + return isAvailable == that.isAvailable && + hasGluten == that.hasGluten && + isSpicy == that.isSpicy && + Objects.equals(id, that.id) && + Objects.equals(name, that.name) && + Objects.equals(description, that.description) && + Objects.equals(courseType, that.courseType); + } + + @Override + public int hashCode() { + return Objects.hash(id, name, description, isSpicy, hasGluten,isAvailable, courseType); + } + + +} + diff --git a/src/main/java/dev/example/restaurantManager/model/MenuRestaurant.java b/src/main/java/dev/example/restaurantManager/model/MenuRestaurant.java index 1d2d819..f1d9544 100644 --- a/src/main/java/dev/example/restaurantManager/model/MenuRestaurant.java +++ b/src/main/java/dev/example/restaurantManager/model/MenuRestaurant.java @@ -1,14 +1,13 @@ package dev.example.restaurantManager.model; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToMany; +import com.fasterxml.jackson.annotation.JsonIgnore; +import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.util.ArrayList; import java.util.List; +import java.util.Objects; @Data @AllArgsConstructor @@ -24,8 +23,34 @@ public class MenuRestaurant { private boolean active; private boolean water; + // Many to Many with Orders + @JsonIgnore @ManyToMany(mappedBy = "menus", fetch = FetchType.LAZY) - private List orders = new ArrayList<>(); + private List orders; + + // Many to Many with MenuItems + @JsonIgnore + @ManyToMany(fetch = FetchType.LAZY, cascade = + {CascadeType.PERSIST, CascadeType.MERGE}) + @JoinTable( + name = "menu_items", + joinColumns = @JoinColumn(name = "MENU_FK_ID"), + inverseJoinColumns = @JoinColumn(name = "ITEM_FK_ID") + ) + private List menuItems = new ArrayList<>(); + + // Create add method + public void addItem(MenuItem item){ + this.menuItems.add(item); + item.getMenuRestaurants().add(this); + + } + // Create remove method + public void removeItem(MenuItem item) { + this.menuItems.remove(item); + item.getMenuRestaurants().remove(this); + + } public MenuRestaurant(String id, String name, Double price, String content, boolean active, boolean water) { this.id = id; @@ -47,9 +72,29 @@ public String toString() { ", active=" + active + ", water=" + water + ", ordersCount=" + (orders != null ? orders.size() : 0) + - ", orders=" + orders + + //", orders=" + orders + + ", menuItems=" + menuItems + '}'; } + // Updated equals() method to compare all fields except 'order' + @Override + public boolean equals(Object object) { + if (this == object) return true; + if (!(object instanceof MenuRestaurant)) return false; + MenuRestaurant that = (MenuRestaurant) object; + return active == that.active && + water == that.water && + Objects.equals(id, that.id) && + Objects.equals(name, that.name) && + Objects.equals(price, that.price) && + Objects.equals(content, that.content); + } + + @Override + public int hashCode() { + return Objects.hash(id, name, price, content, active, water); + } + } diff --git a/src/main/java/dev/example/restaurantManager/model/OrderRestaurant.java b/src/main/java/dev/example/restaurantManager/model/OrderRestaurant.java index 177c3b6..6107744 100644 --- a/src/main/java/dev/example/restaurantManager/model/OrderRestaurant.java +++ b/src/main/java/dev/example/restaurantManager/model/OrderRestaurant.java @@ -3,6 +3,8 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; + +import com.fasterxml.jackson.annotation.JsonIgnore; import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Data; @@ -24,7 +26,9 @@ public class OrderRestaurant { private double totalPayment; private boolean paid; - @ManyToMany(fetch = FetchType.LAZY) + @JsonIgnore + @ManyToMany(fetch = FetchType.LAZY, cascade = + {CascadeType.PERSIST, CascadeType.MERGE}) @JoinTable( name = "order_menu", joinColumns = @JoinColumn(name = "order_id"), @@ -41,7 +45,7 @@ public void removeMenu(MenuRestaurant menu) { this.menus.remove(menu); menu.getOrders().remove(this); } - +/* public List getMenus() { return menus; } @@ -49,7 +53,7 @@ public List getMenus() { public void setMenus(List menus) { this.menus = menus; } - +*/ @Override public String toString() { return "OrderRestaurant{" + @@ -64,4 +68,6 @@ public String toString() { '}'; } + + } \ No newline at end of file diff --git a/src/main/java/dev/example/restaurantManager/model/TableRestaurant.java b/src/main/java/dev/example/restaurantManager/model/TableRestaurant.java index bc13e0a..2296de5 100644 --- a/src/main/java/dev/example/restaurantManager/model/TableRestaurant.java +++ b/src/main/java/dev/example/restaurantManager/model/TableRestaurant.java @@ -30,7 +30,6 @@ public class TableRestaurant { public TableRestaurant(String name, String description , int qty, boolean busy) { } - //method to add public void addBooking(Booking booking) { this.getBookings().add(booking); diff --git a/src/main/java/dev/example/restaurantManager/repository/MenuItemRepository.java b/src/main/java/dev/example/restaurantManager/repository/MenuItemRepository.java new file mode 100644 index 0000000..3be0660 --- /dev/null +++ b/src/main/java/dev/example/restaurantManager/repository/MenuItemRepository.java @@ -0,0 +1,11 @@ +package dev.example.restaurantManager.repository; + +import dev.example.restaurantManager.model.MenuItem; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.Optional; + +public interface MenuItemRepository extends JpaRepository { + //Optional findByNameOptional(String name); + MenuItem findByName(String name); +} diff --git a/src/main/java/dev/example/restaurantManager/service/MenuItemService.java b/src/main/java/dev/example/restaurantManager/service/MenuItemService.java new file mode 100644 index 0000000..37e6d73 --- /dev/null +++ b/src/main/java/dev/example/restaurantManager/service/MenuItemService.java @@ -0,0 +1,19 @@ +package dev.example.restaurantManager.service; + +import dev.example.restaurantManager.model.MenuItem; + + +import java.util.List; + +public interface MenuItemService { + List getAllMenuItems(); + MenuItem createMenuItem(MenuItem menuItem); + MenuItem getMenuItemById(String id); + MenuItem updateMenuItem(String id, MenuItem menuItemDetails); + boolean deleteMenuItem(String id); + long countMenuItems(); + List getMenuItemsByMenuId(String menuId); +} + + + diff --git a/src/main/java/dev/example/restaurantManager/service/MenuItemServiceImpl.java b/src/main/java/dev/example/restaurantManager/service/MenuItemServiceImpl.java new file mode 100644 index 0000000..66cc9fd --- /dev/null +++ b/src/main/java/dev/example/restaurantManager/service/MenuItemServiceImpl.java @@ -0,0 +1,88 @@ +package dev.example.restaurantManager.service; + +import dev.example.restaurantManager.model.MenuItem; +import dev.example.restaurantManager.model.MenuRestaurant; +import dev.example.restaurantManager.repository.MenuItemRepository; +import dev.example.restaurantManager.repository.MenuRestaurantRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +@Service +public class MenuItemServiceImpl implements MenuItemService{ + + @Autowired + MenuItemRepository menuItemRepository; + + @Autowired + MenuRestaurantRepository menuRepository; + + @Override + public List getAllMenuItems() { + return menuItemRepository.findAll(); + } + + @Override + public MenuItem createMenuItem(MenuItem menuItem) { + // not needed because it's already generated in the own entity + //menuItem.setId(UUID.randomUUID().toString()); + Optional menuItemCreated = menuItemRepository.findById(menuItem.getId()); + if(menuItemCreated.isPresent()){ + return null; + } + menuItemRepository.save(menuItem); + return menuItem; + } + + + @Override + public MenuItem getMenuItemById(String id) { + return menuItemRepository.findById(id).orElse(null); + } + + @Override + public MenuItem updateMenuItem(String id, MenuItem menuItemDetails) { + MenuItem menuItem = menuItemRepository.findById(id).orElse(null); + if (menuItem !=null){ + if (menuItemDetails.getName() != null){ + menuItem.setName(menuItemDetails.getName()); + } + if (menuItemDetails.getDescription() != null){ + menuItem.setDescription(menuItemDetails.getDescription()); + } + if (menuItemDetails.isSpicy()){ + menuItem.setSpicy(menuItemDetails.isSpicy()); + } + if (menuItemDetails.isHasGluten()){ + menuItem.setHasGluten(menuItemDetails.isHasGluten()); + } + if (menuItemDetails.isAvailable()){ + menuItem.setAvailable(menuItemDetails.isAvailable()); + } + return menuItemRepository.save(menuItem); + } + return null; + } + + @Override + public boolean deleteMenuItem(String id) { + menuItemRepository.deleteById(id); + Optional menuItem = menuItemRepository.findById(id); + return menuItem.isEmpty() + ? false : true ; + } + + @Override + public long countMenuItems() { + return menuItemRepository.count(); + } + + @Override + public List getMenuItemsByMenuId(String menuId) { + + MenuRestaurant menu = menuRepository.findById(menuId).orElse(null); + return menu != null ? menu.getMenuItems() : new ArrayList<>(); + } +} diff --git a/src/main/java/dev/example/restaurantManager/service/MenuRestaurantService.java b/src/main/java/dev/example/restaurantManager/service/MenuRestaurantService.java new file mode 100644 index 0000000..8c230ad --- /dev/null +++ b/src/main/java/dev/example/restaurantManager/service/MenuRestaurantService.java @@ -0,0 +1,15 @@ +package dev.example.restaurantManager.service; + +import dev.example.restaurantManager.model.MenuRestaurant; + +import java.util.List; + +public interface MenuRestaurantService { + + List getAllMenus(); + MenuRestaurant createMenu(MenuRestaurant menuRestaurant); + MenuRestaurant getMenuById(String id); + MenuRestaurant updateMenu(String id, MenuRestaurant menuRestaurantDetails); + boolean deleteMenu(String id); + long countMenus(); +} diff --git a/src/main/java/dev/example/restaurantManager/service/MenuRestaurantServiceImpl.java b/src/main/java/dev/example/restaurantManager/service/MenuRestaurantServiceImpl.java new file mode 100644 index 0000000..aae349c --- /dev/null +++ b/src/main/java/dev/example/restaurantManager/service/MenuRestaurantServiceImpl.java @@ -0,0 +1,67 @@ +package dev.example.restaurantManager.service; + +import dev.example.restaurantManager.model.MenuRestaurant; +import dev.example.restaurantManager.repository.MenuRestaurantRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.util.Optional; +import java.util.UUID; +import java.util.List; + +@Service +public class MenuRestaurantServiceImpl implements MenuRestaurantService { + + @Autowired + private MenuRestaurantRepository menuRepository; + + @Override + public List getAllMenus() { + return menuRepository.findAll(); + } + + @Override + public MenuRestaurant createMenu(MenuRestaurant menu) { + Optional menuOptional = menuRepository.findById(menu.getId()); + if (menuOptional.isPresent()) { + return null; + } else { + menuRepository.save(menu); + return menu; + } + } + + @Override + public MenuRestaurant getMenuById(String id) { + return menuRepository.findById(id).orElse(null); + } + + @Override + public MenuRestaurant updateMenu(String id, MenuRestaurant menuDetails) { + Optional menuOptional = menuRepository.findById(id); + if (menuOptional.isPresent()) { + MenuRestaurant menu = menuOptional.get(); + menu.setName(menuDetails.getName()); + menu.setPrice(menuDetails.getPrice()); + menu.setContent(menuDetails.getContent()); + menu.setActive(menuDetails.isActive()); + menu.setWater(menuDetails.isWater()); + menuRepository.save(menu); + return menu; + } else { + return null; + } + } + + @Override + public boolean deleteMenu(String id) { + menuRepository.deleteById(id); + Optional menu = menuRepository.findById(id); + + return menu.isPresent(); + } + @Override + public long countMenus() { + return menuRepository.count(); + } + +} \ No newline at end of file diff --git a/src/main/java/dev/example/restaurantManager/utilities/MenuDataLoader.java b/src/main/java/dev/example/restaurantManager/utilities/MenuDataLoader.java new file mode 100644 index 0000000..6f03c2a --- /dev/null +++ b/src/main/java/dev/example/restaurantManager/utilities/MenuDataLoader.java @@ -0,0 +1,43 @@ +package dev.example.restaurantManager.utilities; + +import com.github.javafaker.Faker; +import dev.example.restaurantManager.model.MenuRestaurant; +import dev.example.restaurantManager.repository.MenuRestaurantRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Locale; +import java.util.UUID; + +@Component +public class MenuDataLoader { + + @Autowired + private MenuRestaurantRepository menuRepository; + + public void createFakeMenus() { + // Check if the database is empty + if (menuRepository.count() == 0) { + System.out.println(" 0 records at the database found"); + Faker faker = new Faker(new Locale("en-US")); + + // Create and save 5 fake menus + for (int i = 0; i < 5; i++) { + MenuRestaurant menu = new MenuRestaurant( + UUID.randomUUID().toString(), + faker.name().fullName(), + faker.random().nextDouble(), + faker.lorem().sentence(), + faker.random().nextBoolean(), + faker.random().nextBoolean() + + ); + menuRepository.save(menu); + } + + System.out.println(5 + " fake menus have been created and saved to the database."); + } + } + + +} \ No newline at end of file diff --git a/src/main/java/dev/example/restaurantManager/utilities/MenuItemDataLoader.java b/src/main/java/dev/example/restaurantManager/utilities/MenuItemDataLoader.java new file mode 100644 index 0000000..d1aad10 --- /dev/null +++ b/src/main/java/dev/example/restaurantManager/utilities/MenuItemDataLoader.java @@ -0,0 +1,6 @@ +package dev.example.restaurantManager.utilities; + +public class MenuItemDataLoader { + + +} diff --git a/src/main/java/dev/example/restaurantManager/utilities/TableDataLoader.java b/src/main/java/dev/example/restaurantManager/utilities/TableDataLoader.java new file mode 100644 index 0000000..d638d86 --- /dev/null +++ b/src/main/java/dev/example/restaurantManager/utilities/TableDataLoader.java @@ -0,0 +1,49 @@ +package dev.example.restaurantManager.utilities; + +import com.github.javafaker.Faker; + + +import dev.example.restaurantManager.model.TableRestaurant; +import dev.example.restaurantManager.repository.TableRestaurantRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Locale; +import java.util.UUID; + +@Component +public class TableDataLoader { + + @Autowired + private TableRestaurantRepository tableRepository; + + public void createFakeTables(){ + + // Check if the database is empty + if (tableRepository.count() == 0) { + System.out.println(" 0 records at the database found"); + Faker faker = new Faker(new Locale("en-US")); + + int qty = 50; + // Create and save 100 fake customers + for (int i = 0; i < qty; i++) { + TableRestaurant table = new TableRestaurant(); + + // Using Faker to generate fake data + table.setId(UUID.randomUUID().toString()); + table.setName("Table " + (i + 1)); + table.setDescription(faker.lorem().sentence()); + table.setQty(faker.number().numberBetween(1, 10)); + table.setBusy(faker.bool().bool()); // + + + + tableRepository.save(table); + } + + System.out.println(qty + " fake tables have been created and saved to the database."); + } + } + + +} \ No newline at end of file diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index b773357..71173db 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -2,9 +2,13 @@ # H2 LOCAL DB SERVER -spring.datasource.url=jdbc:h2:/home/albert/MyProjects/DataBase/customerdb -spring.datasource.username=albert -spring.datasource.password=1234 +spring.datasource.url=jdbc:h2:/D:\DataBases\H2\PR03 +spring.datasource.driverClassName=org.h2.Driver +spring.datasource.username=albertemb +spring.datasource.password= +spring.datasource.platform=h2 +spring.h2.console.enabled=true + # DDL OPTIONS: create-drop, create, update, none, validate spring.jpa.hibernate.ddl-auto=update diff --git a/src/main/resources/application-memory.properties b/src/main/resources/application-memory.properties index dd79a7c..adb0dc4 100644 --- a/src/main/resources/application-memory.properties +++ b/src/main/resources/application-memory.properties @@ -2,8 +2,8 @@ # H2 IN MEMORY -spring.datasource.url=jdbc:h2:mem:testdb -spring.datasource.username=sa +spring.datasource.url=jdbc:h2:mem:PR03 +spring.datasource.username=albertemb spring.datasource.password= diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 56fa3b7..30409b3 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -28,4 +28,6 @@ endpoint.url.customers=/api/v1/customers/ # Enable debug logging #logging.level.org.springframework=DEBUG -#logging.level.dev.example.restaurantManager=DEBUG \ No newline at end of file +#logging.level.dev.example.restaurantManager=DEBUG + +server.port=8081 diff --git a/src/test/java/dev/example/restaurantManager/RelationshipMenuMenuItemTest.java b/src/test/java/dev/example/restaurantManager/RelationshipMenuMenuItemTest.java new file mode 100644 index 0000000..d9087bf --- /dev/null +++ b/src/test/java/dev/example/restaurantManager/RelationshipMenuMenuItemTest.java @@ -0,0 +1,99 @@ +package dev.example.restaurantManager; + +import dev.example.restaurantManager.model.CourseType; +import dev.example.restaurantManager.model.MenuItem; +import dev.example.restaurantManager.model.MenuRestaurant; +import dev.example.restaurantManager.repository.MenuItemRepository; +import dev.example.restaurantManager.repository.MenuRestaurantRepository; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Optional; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +@DataJpaTest +public class RelationshipMenuMenuItemTest { + + @Autowired + private MenuRestaurantRepository menuRestaurantRepository; + @Autowired + private MenuItemRepository menuItemRepository; + + @Test + public void TestRelationshipMenuMenuItem() { + // Create MenuItems + MenuItem item1 = new MenuItem("I01", "Tacos", "Fresh",true, false, true, CourseType.MAIN, new ArrayList<>()); + MenuItem item2 = new MenuItem("I02", "Brownie","Rich and fudgy brownie without gluten.", false, false, true, CourseType.DESSERT, new ArrayList<>() ); + MenuItem item3 = new MenuItem("I03", "Salad", "Classic Caesar salad with a creamy dressing.", false, true, false, CourseType.STARTER, new ArrayList<>()); + menuItemRepository.save(item1); + menuItemRepository.save(item2); + menuItemRepository.save(item3); + + // Create menus + MenuRestaurant menu1 = new MenuRestaurant("M01", "Burger Menu", 10.99, "Burger, fries, and drink", true, true); + MenuRestaurant menu2 = new MenuRestaurant("M02", "Pizza Menu", 12.99, "Pizza and salad", true, false); + MenuRestaurant menu3 = new MenuRestaurant("M03", "Salad Menu", 8.99, "Mixed salad and dressing", true, true); + + // Adding items to menus + menu1.addItem(menuItemRepository.findByName("Tacos")); + menu1.addItem(menuItemRepository.findByName("Brownie")); + menuRestaurantRepository.save(menu1); + menu2.addItem(menuItemRepository.findByName("Brownie")); + menuRestaurantRepository.save(menu2); + menu3.addItem(menuItemRepository.findByName("Salad")); + menuRestaurantRepository.save(menu3); + +// // Create a list of all menu +// ArrayList menus = new ArrayList<>(); +// menus.addAll(Arrays.asList(menu1, menu2, menu3)); +// // Print the number of orders +// System.out.println("Menus"); +// System.out.println("Total number of orders: " + menus.size() + " menus."); +// System.out.println("--------------------"); +// +// // Create a list of all menuItems +// ArrayList menuItems = new ArrayList<>(); +// menuItems.addAll(Arrays.asList(item1, item2, item3)); +// // Print the number of items +// System.out.println("Menu Items"); +// System.out.println("Total number of items: " + menuItems.size() + " items."); +// System.out.println("--------------------"); +// + + + // MenuRestaurant + // When + Optional foundMenu = menuRestaurantRepository.findById("M01"); + System.out.println("--------------------"); + System.out.println("Menu ID: " + foundMenu.get().getId()); + System.out.println(foundMenu.get()); + // Then + assertThat(foundMenu).isPresent(); + assertThat(foundMenu.get().getMenuItems().get(0).getName().equals(item1.getName())); + + // MenuItem + // When + + Optional foundItem = Optional.ofNullable(menuItemRepository.findByName("Tacos")); + System.out.println("--------------------"); + System.out.println(menuItemRepository.count()); + //menuItemRepository.findAll().forEach(System.out::println); + System.out.println(foundItem.isPresent()); + System.out.println("Item name: " + foundItem.get().getName()); + + System.out.println(foundItem.get()); + // Then + assertThat(foundItem).isPresent(); + + + //assertNotNull(foundItem, "Not null is expected"); + + } + + +} diff --git a/src/test/java/dev/example/restaurantManager/RelationshipsOrderRestaurantTest.java b/src/test/java/dev/example/restaurantManager/RelationshipsOrderRestaurantTest.java index a3c8f84..681b7ab 100644 --- a/src/test/java/dev/example/restaurantManager/RelationshipsOrderRestaurantTest.java +++ b/src/test/java/dev/example/restaurantManager/RelationshipsOrderRestaurantTest.java @@ -29,9 +29,9 @@ public class RelationshipsOrderRestaurantTest { @Test public void TestCreateOrder() { // Create sample menus - MenuRestaurant menuRestaurant1 = new MenuRestaurant("M01", "Burger Menu", 10.99, "Burger, fries, and drink", true, true, null); - MenuRestaurant menuRestaurant2 = new MenuRestaurant("M02","Pizza Menu", 12.99, "Pizza and salad", true, false, null); - MenuRestaurant menuRestaurant3 = new MenuRestaurant("M03","Salad Menu", 8.99, "Mixed salad and dressing", true, true, null); + MenuRestaurant menuRestaurant1 = new MenuRestaurant("M01", "Burger Menu", 10.99, "Burger, fries, and drink", true, true); + MenuRestaurant menuRestaurant2 = new MenuRestaurant("M02","Pizza Menu", 12.99, "Pizza and salad", true, false); + MenuRestaurant menuRestaurant3 = new MenuRestaurant("M03","Salad Menu", 8.99, "Mixed salad and dressing", true, true); // Save sample menus menuRestaurantRepository.save(menuRestaurant1); menuRestaurantRepository.save(menuRestaurant2); @@ -115,9 +115,9 @@ public void TestCreateOrder() { @Test public void TestCreateOrderMenu () { - MenuRestaurant menuRestaurant1 = new MenuRestaurant("M01", "Burger Menu", 10.99, "Burger, fries, and drink", true, true, null); - MenuRestaurant menuRestaurant2 = new MenuRestaurant("M02","Pizza Menu", 12.99, "Pizza and salad", true, false, null); - MenuRestaurant menuRestaurant3 = new MenuRestaurant("M03","Salad Menu", 8.99, "Mixed salad and dressing", true, true, null); + MenuRestaurant menuRestaurant1 = new MenuRestaurant("M01", "Burger Menu", 10.99, "Burger, fries, and drink", true, true); + MenuRestaurant menuRestaurant2 = new MenuRestaurant("M02","Pizza Menu", 12.99, "Pizza and salad", true, false); + MenuRestaurant menuRestaurant3 = new MenuRestaurant("M03","Salad Menu", 8.99, "Mixed salad and dressing", true, true); // Save sample menus menuRestaurantRepository.save(menuRestaurant1); menuRestaurantRepository.save(menuRestaurant2); @@ -167,8 +167,8 @@ public void TestCreateOrderMenu_stackOverflow () { // Save sample orders orderRestaurantRepository.save(orderRestaurant1); - //orderRestaurantRepository.save(orderRestaurant2); - //orderRestaurantRepository.save(orderRestaurant3); + orderRestaurantRepository.save(orderRestaurant2); + orderRestaurantRepository.save(orderRestaurant3); // set menus to orders and save menuRestaurant1.getOrders().add(orderRestaurant1);