From d05ad97744e5f0f170d6dc73002d386e19b0215f Mon Sep 17 00:00:00 2001 From: emy Date: Fri, 1 Nov 2024 14:09:48 +0100 Subject: [PATCH 1/5] PRA02-Task1-DesignEntityClass-Case-Unidirectional --- .../restaurantManager/model/EatInOrderRestaurant.java | 11 ++++++++++- .../restaurantManager/model/TableRestaurant.java | 3 +++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/java/dev/example/restaurantManager/model/EatInOrderRestaurant.java b/src/main/java/dev/example/restaurantManager/model/EatInOrderRestaurant.java index 692c186..d2ab325 100644 --- a/src/main/java/dev/example/restaurantManager/model/EatInOrderRestaurant.java +++ b/src/main/java/dev/example/restaurantManager/model/EatInOrderRestaurant.java @@ -1,5 +1,10 @@ package dev.example.restaurantManager.model; +import com.fasterxml.jackson.annotation.JsonIgnore; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -9,13 +14,17 @@ import java.util.stream.Collectors; @Data +@Entity @AllArgsConstructor @NoArgsConstructor public class EatInOrderRestaurant extends OrderRestaurant { private ArrayList tableRestaurants = new ArrayList<>(); - //private TableRestaurant orderedTableRestaurant; +// @JsonIgnore +// @ManyToOne(fetch = FetchType.LAZY) +// @JoinColumn(name = "TABLE_RESTAURANT_EAT_IN_ORDER_FK_ID") +// private TableRestaurant orderedTableRestaurant; public EatInOrderRestaurant(String id, Date date, String waiter, int peopleQty, double totalPayment, boolean paid, ArrayList menus, diff --git a/src/main/java/dev/example/restaurantManager/model/TableRestaurant.java b/src/main/java/dev/example/restaurantManager/model/TableRestaurant.java index bbd18fd..f5e9449 100644 --- a/src/main/java/dev/example/restaurantManager/model/TableRestaurant.java +++ b/src/main/java/dev/example/restaurantManager/model/TableRestaurant.java @@ -26,6 +26,9 @@ public class TableRestaurant { @OneToMany(mappedBy = "tableRestaurantMapped", cascade = CascadeType.ALL) private ArrayList bookings ; + @OneToMany(mappedBy = "orderedTableRestaurant", cascade = CascadeType.ALL) + private ArrayList eatInOrderRestaurant ; + // we must create a VERY CONCRETE constructor to RUN the OLD tests public TableRestaurant(String name, String description , int qty, boolean busy) { From 13173f21e8c2010d23b40d5711464dbb5dcc0a27 Mon Sep 17 00:00:00 2001 From: emy Date: Fri, 1 Nov 2024 15:03:42 +0100 Subject: [PATCH 2/5] PRA02-Task1-DesignEntityClass-Case-Bidirectional --- .../model/EatInOrderRestaurant.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/dev/example/restaurantManager/model/EatInOrderRestaurant.java b/src/main/java/dev/example/restaurantManager/model/EatInOrderRestaurant.java index d2ab325..35fcfed 100644 --- a/src/main/java/dev/example/restaurantManager/model/EatInOrderRestaurant.java +++ b/src/main/java/dev/example/restaurantManager/model/EatInOrderRestaurant.java @@ -21,14 +21,14 @@ public class EatInOrderRestaurant extends OrderRestaurant { private ArrayList tableRestaurants = new ArrayList<>(); -// @JsonIgnore -// @ManyToOne(fetch = FetchType.LAZY) -// @JoinColumn(name = "TABLE_RESTAURANT_EAT_IN_ORDER_FK_ID") -// private TableRestaurant orderedTableRestaurant; + @JsonIgnore + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "TABLE_RESTAURANT_EAT_IN_ORDER_FK_ID") + private TableRestaurant orderedTableRestaurant; public EatInOrderRestaurant(String id, Date date, String waiter, int peopleQty, - double totalPayment, boolean paid, ArrayList menus, - ArrayList tableRestaurants) { + double totalPayment, boolean paid, ArrayList menus + ,ArrayList tableRestaurants) { super(id, date, waiter, peopleQty, totalPayment, paid, menus); this.tableRestaurants = tableRestaurants; } From 4ac8c87ea5f5233bbe5fbc443634c0ede4e5f2be Mon Sep 17 00:00:00 2001 From: emy Date: Fri, 1 Nov 2024 15:13:16 +0100 Subject: [PATCH 3/5] PRA02-Task2-Implement-JPA-Repositories-and-custom-queries-methods --- .../repository/EatInOrderRepository.java | 9 +++++++++ .../repository/TableRestaurantRepository.java | 2 ++ 2 files changed, 11 insertions(+) create mode 100644 src/main/java/dev/example/restaurantManager/repository/EatInOrderRepository.java diff --git a/src/main/java/dev/example/restaurantManager/repository/EatInOrderRepository.java b/src/main/java/dev/example/restaurantManager/repository/EatInOrderRepository.java new file mode 100644 index 0000000..3a2ec86 --- /dev/null +++ b/src/main/java/dev/example/restaurantManager/repository/EatInOrderRepository.java @@ -0,0 +1,9 @@ +package dev.example.restaurantManager.repository; + +import dev.example.restaurantManager.model.Customer; +import dev.example.restaurantManager.model.EatInOrderRestaurant; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface EatInOrderRepository extends JpaRepository { + EatInOrderRestaurant findByOrderedTableRestaurant(String orderedTableRestaurant); +} diff --git a/src/main/java/dev/example/restaurantManager/repository/TableRestaurantRepository.java b/src/main/java/dev/example/restaurantManager/repository/TableRestaurantRepository.java index f789c82..981da2a 100644 --- a/src/main/java/dev/example/restaurantManager/repository/TableRestaurantRepository.java +++ b/src/main/java/dev/example/restaurantManager/repository/TableRestaurantRepository.java @@ -6,4 +6,6 @@ import org.springframework.data.jpa.repository.JpaRepository; public interface TableRestaurantRepository extends JpaRepository { + + TableRestaurant findByName(String name); } From 5115f51d6070fe9ebe4a18118178b49c373d6b1e Mon Sep 17 00:00:00 2001 From: emy Date: Mon, 4 Nov 2024 12:10:17 +0100 Subject: [PATCH 4/5] PRA02-Task2-Implement-Unit-Test-Repository-Service-Controller-with-relationship --- .../RestaurantManagerApplication.java | 4 +- .../EatInOrderRestaurantController.java | 82 +++++++++++++++++++ .../controller/TableRestaurantController.java | 82 +++++++++++++++++++ .../model/EatInOrderRestaurant.java | 10 +-- .../model/TableRestaurant.java | 5 +- .../repository/EatInOrderRepository.java | 3 +- .../service/EatInOrderRestaurantService.java | 18 ++++ .../EatInOrderRestaurantServiceImpl.java | 56 +++++++++++++ .../service/TableRestaurantService.java | 15 ++++ .../service/TableRestaurantServiceImpl.java | 56 +++++++++++++ .../utilities/ResourceDataLoader.java | 24 ++++++ .../utilities/fakers/CustomerFaker.java | 45 ++++++++++ .../utilities/fakers/IFaker.java | 8 ++ .../restaurantManager/BookingTableTest.java | 6 +- .../RelationshipsOrderRestaurantTest.java | 11 ++- .../Tests/TableRestaurantControllerTest.java | 35 ++++++++ .../Tests/TableRestaurantRepositoryTest.java | 70 ++++++++++++++++ .../Tests/TableRestaurantServiceTest.java | 69 ++++++++++++++++ 18 files changed, 583 insertions(+), 16 deletions(-) create mode 100644 src/main/java/dev/example/restaurantManager/controller/EatInOrderRestaurantController.java create mode 100644 src/main/java/dev/example/restaurantManager/controller/TableRestaurantController.java create mode 100644 src/main/java/dev/example/restaurantManager/service/EatInOrderRestaurantService.java create mode 100644 src/main/java/dev/example/restaurantManager/service/EatInOrderRestaurantServiceImpl.java create mode 100644 src/main/java/dev/example/restaurantManager/service/TableRestaurantService.java create mode 100644 src/main/java/dev/example/restaurantManager/service/TableRestaurantServiceImpl.java create mode 100644 src/main/java/dev/example/restaurantManager/utilities/ResourceDataLoader.java create mode 100644 src/main/java/dev/example/restaurantManager/utilities/fakers/CustomerFaker.java create mode 100644 src/main/java/dev/example/restaurantManager/utilities/fakers/IFaker.java create mode 100644 src/test/java/dev/example/restaurantManager/Tests/TableRestaurantControllerTest.java create mode 100644 src/test/java/dev/example/restaurantManager/Tests/TableRestaurantRepositoryTest.java create mode 100644 src/test/java/dev/example/restaurantManager/Tests/TableRestaurantServiceTest.java diff --git a/src/main/java/dev/example/restaurantManager/RestaurantManagerApplication.java b/src/main/java/dev/example/restaurantManager/RestaurantManagerApplication.java index cfe02ce..a7484dc 100644 --- a/src/main/java/dev/example/restaurantManager/RestaurantManagerApplication.java +++ b/src/main/java/dev/example/restaurantManager/RestaurantManagerApplication.java @@ -17,8 +17,8 @@ public static void main(String[] args) { /* @Bean - public ApplicationRunner dataLoader(CustomerDataLoader customerDataLoader) { - return args -> customerDataLoader.createFakeCustomers(); + public ApplicationRunner dataLoader(ResourceDataLoader resourceDataLoader) { + return args -> resourceDataLoader.createFakeCustomers(); } */ diff --git a/src/main/java/dev/example/restaurantManager/controller/EatInOrderRestaurantController.java b/src/main/java/dev/example/restaurantManager/controller/EatInOrderRestaurantController.java new file mode 100644 index 0000000..9a1fe1b --- /dev/null +++ b/src/main/java/dev/example/restaurantManager/controller/EatInOrderRestaurantController.java @@ -0,0 +1,82 @@ +package dev.example.restaurantManager.controller; + +import dev.example.restaurantManager.model.EatInOrderRestaurant; +import dev.example.restaurantManager.model.TableRestaurant; +import dev.example.restaurantManager.service.EatInOrderRestaurantService; +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/EatInOrderRestaurant") +@RestController +public class EatInOrderRestaurantController { + + @Autowired + EatInOrderRestaurantService eatInOrderRestaurantService; + + @GetMapping("/allEatInOrderRestaurant") + public ResponseEntity> getAllTableRestaurants(){ + List lstEatInRestaurant = eatInOrderRestaurantService.getAllEatInOrderRestaurant(); + HttpHeaders headers = this.getCommonHeaders("Eat in restaurant"); + return lstEatInRestaurant != null + ? new ResponseEntity<>(lstEatInRestaurant, headers, HttpStatus.OK) + : new ResponseEntity<>(headers, HttpStatus.NOT_FOUND); + + } + + @PostMapping + public ResponseEntity saveTableRestaurant(@RequestBody + EatInOrderRestaurant eatInOrderRestaurant){ + HttpHeaders headers = this.getCommonHeaders("Eat in restaurant"); + EatInOrderRestaurant newEatInOrderRestaurant = eatInOrderRestaurantService.createEatInOrderRestaurant(eatInOrderRestaurant); + return newEatInOrderRestaurant != null + ? new ResponseEntity<>(newEatInOrderRestaurant, headers, HttpStatus.OK) + : new ResponseEntity<>(headers, HttpStatus.NOT_FOUND); + } + + @PutMapping("/{id}") + public ResponseEntity updateTableRestaurant(@PathVariable String id, @RequestBody EatInOrderRestaurant eatInOrderRestaurantDetails) { + EatInOrderRestaurant updatedeatInOrderRestaurant = eatInOrderRestaurantService.updateEatInOrderRestaurant(id, eatInOrderRestaurantDetails); + HttpHeaders headers = getCommonHeaders("Update a table restaurant"); + + return updatedeatInOrderRestaurant != null + ? new ResponseEntity<>(updatedeatInOrderRestaurant, headers, HttpStatus.OK) + : new ResponseEntity<>(headers, HttpStatus.NOT_FOUND); + } + + @DeleteMapping("/{id}") + public ResponseEntity deleteTableRestaurant(@PathVariable String id) { + boolean deleted = eatInOrderRestaurantService.deleteEatInOrderRestaurant(id); + HttpHeaders headers = getCommonHeaders("Delete a eat in order restaurant"); + headers.add("deleted", String.valueOf(deleted)); + + return deleted + ? new ResponseEntity<>(headers, HttpStatus.NO_CONTENT) + : new ResponseEntity<>(headers, HttpStatus.NOT_FOUND); + } + + @GetMapping("/{id}") + public ResponseEntity getEatInOrderRestaurantById(@PathVariable String id) { + EatInOrderRestaurant eatInOrderRestaurant = eatInOrderRestaurantService.getEatInOrderRestaurantById(id); + HttpHeaders headers = getCommonHeaders("Get a eat in order restaurant by Id"); + + return eatInOrderRestaurant != null + ? new ResponseEntity<>(eatInOrderRestaurant, 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"); + return headers; + } +} diff --git a/src/main/java/dev/example/restaurantManager/controller/TableRestaurantController.java b/src/main/java/dev/example/restaurantManager/controller/TableRestaurantController.java new file mode 100644 index 0000000..ee0a794 --- /dev/null +++ b/src/main/java/dev/example/restaurantManager/controller/TableRestaurantController.java @@ -0,0 +1,82 @@ +package dev.example.restaurantManager.controller; + +import dev.example.restaurantManager.model.Customer; +import dev.example.restaurantManager.model.TableRestaurant; +import dev.example.restaurantManager.service.TableRestaurantService; +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/tableRestaurant") +@RestController +public class TableRestaurantController { + + @Autowired + TableRestaurantService tableRestaurantService; + + @GetMapping("/allTableRestaurants") + public ResponseEntity> getAllTableRestaurants(){ + HttpHeaders headers = this.getCommonHeaders("Table Restaurant"); + List lstTableRestaurant = tableRestaurantService.getAllTableRestaurant(); + return lstTableRestaurant != null + ? new ResponseEntity<>(lstTableRestaurant, headers, HttpStatus.OK) + : new ResponseEntity<>(headers, HttpStatus.NOT_FOUND); + + } + + @PostMapping + public ResponseEntity saveTableRestaurant(@RequestBody + TableRestaurant tableRestaurant){ + HttpHeaders headers = this.getCommonHeaders("Table Restaurant"); + TableRestaurant newTableRestaurant = tableRestaurantService.createTableRestaurant(tableRestaurant); + return newTableRestaurant != null + ? new ResponseEntity<>(newTableRestaurant, headers, HttpStatus.OK) + : new ResponseEntity<>(headers, HttpStatus.NOT_FOUND); + } + + @PutMapping("/{id}") + public ResponseEntity updateTableRestaurant(@PathVariable String id, @RequestBody TableRestaurant tableRestaurantDetails) { + TableRestaurant updatedTableRestaurant = tableRestaurantService.updateTableRestaurant(id, tableRestaurantDetails); + HttpHeaders headers = getCommonHeaders("Update a table restaurant"); + + return updatedTableRestaurant != null + ? new ResponseEntity<>(updatedTableRestaurant, headers, HttpStatus.OK) + : new ResponseEntity<>(headers, HttpStatus.NOT_FOUND); + } + + @DeleteMapping("/{id}") + public ResponseEntity deleteTableRestaurant(@PathVariable String id) { + boolean deleted = tableRestaurantService.deleteTableRestaurant(id); + HttpHeaders headers = getCommonHeaders("Delete a table restaurant"); + headers.add("deleted", String.valueOf(deleted)); + + return deleted + ? new ResponseEntity<>(headers, HttpStatus.NO_CONTENT) + : new ResponseEntity<>(headers, HttpStatus.NOT_FOUND); + } + + @GetMapping("/{id}") + public ResponseEntity getTableRestaurantById(@PathVariable String id) { + TableRestaurant tableRestaurant = tableRestaurantService.getTableRestaurantById(id); + HttpHeaders headers = getCommonHeaders("Get a table restaurant by Id"); + + return tableRestaurant != null + ? new ResponseEntity<>(tableRestaurant, 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"); + return headers; + } +} diff --git a/src/main/java/dev/example/restaurantManager/model/EatInOrderRestaurant.java b/src/main/java/dev/example/restaurantManager/model/EatInOrderRestaurant.java index 35fcfed..86e21ee 100644 --- a/src/main/java/dev/example/restaurantManager/model/EatInOrderRestaurant.java +++ b/src/main/java/dev/example/restaurantManager/model/EatInOrderRestaurant.java @@ -19,24 +19,24 @@ @NoArgsConstructor public class EatInOrderRestaurant extends OrderRestaurant { - private ArrayList tableRestaurants = new ArrayList<>(); @JsonIgnore @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "TABLE_RESTAURANT_EAT_IN_ORDER_FK_ID") + @JoinColumn(name = "TABLE_RESTAURANT_FK_ID") private TableRestaurant orderedTableRestaurant; public EatInOrderRestaurant(String id, Date date, String waiter, int peopleQty, double totalPayment, boolean paid, ArrayList menus - ,ArrayList tableRestaurants) { + ,TableRestaurant tableRestaurant) { + super(id, date, waiter, peopleQty, totalPayment, paid, menus); - this.tableRestaurants = tableRestaurants; + this.orderedTableRestaurant = tableRestaurant; } @Override public String toString() { return super.toString() + "\n" + "Type: Eat In\n" + - "Tables: " + tableRestaurants.stream().map(TableRestaurant::getName).collect(Collectors.joining(", ")); + "Table Id: " + this.orderedTableRestaurant; } } diff --git a/src/main/java/dev/example/restaurantManager/model/TableRestaurant.java b/src/main/java/dev/example/restaurantManager/model/TableRestaurant.java index f5e9449..a7bb113 100644 --- a/src/main/java/dev/example/restaurantManager/model/TableRestaurant.java +++ b/src/main/java/dev/example/restaurantManager/model/TableRestaurant.java @@ -9,6 +9,7 @@ import lombok.NoArgsConstructor; import java.util.ArrayList; +import java.util.List; @Data @AllArgsConstructor @@ -24,10 +25,10 @@ public class TableRestaurant { private boolean busy; @OneToMany(mappedBy = "tableRestaurantMapped", cascade = CascadeType.ALL) - private ArrayList bookings ; + private List bookings = new ArrayList<>(); @OneToMany(mappedBy = "orderedTableRestaurant", cascade = CascadeType.ALL) - private ArrayList eatInOrderRestaurant ; + private List eatInOrderRestaurant = new ArrayList<>(); // we must create a VERY CONCRETE constructor to RUN the OLD tests diff --git a/src/main/java/dev/example/restaurantManager/repository/EatInOrderRepository.java b/src/main/java/dev/example/restaurantManager/repository/EatInOrderRepository.java index 3a2ec86..8dc8cab 100644 --- a/src/main/java/dev/example/restaurantManager/repository/EatInOrderRepository.java +++ b/src/main/java/dev/example/restaurantManager/repository/EatInOrderRepository.java @@ -1,9 +1,8 @@ package dev.example.restaurantManager.repository; -import dev.example.restaurantManager.model.Customer; import dev.example.restaurantManager.model.EatInOrderRestaurant; import org.springframework.data.jpa.repository.JpaRepository; public interface EatInOrderRepository extends JpaRepository { - EatInOrderRestaurant findByOrderedTableRestaurant(String orderedTableRestaurant); +// EatInOrderRestaurant findByOrderedTableRestaurant(String orderedTableRestaurant); } diff --git a/src/main/java/dev/example/restaurantManager/service/EatInOrderRestaurantService.java b/src/main/java/dev/example/restaurantManager/service/EatInOrderRestaurantService.java new file mode 100644 index 0000000..1368d3a --- /dev/null +++ b/src/main/java/dev/example/restaurantManager/service/EatInOrderRestaurantService.java @@ -0,0 +1,18 @@ +package dev.example.restaurantManager.service; + +import dev.example.restaurantManager.model.EatInOrderRestaurant; +import dev.example.restaurantManager.model.Menu; +import dev.example.restaurantManager.model.TableRestaurant; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public interface EatInOrderRestaurantService { + List getAllEatInOrderRestaurant(); + EatInOrderRestaurant createEatInOrderRestaurant(EatInOrderRestaurant eatInOrderRestaurant); + EatInOrderRestaurant getEatInOrderRestaurantById(String id); + EatInOrderRestaurant updateEatInOrderRestaurant(String id, EatInOrderRestaurant eatInOrderRestaurant); + boolean deleteEatInOrderRestaurant(String id); + +} diff --git a/src/main/java/dev/example/restaurantManager/service/EatInOrderRestaurantServiceImpl.java b/src/main/java/dev/example/restaurantManager/service/EatInOrderRestaurantServiceImpl.java new file mode 100644 index 0000000..4b8e3a8 --- /dev/null +++ b/src/main/java/dev/example/restaurantManager/service/EatInOrderRestaurantServiceImpl.java @@ -0,0 +1,56 @@ +package dev.example.restaurantManager.service; + +import dev.example.restaurantManager.model.EatInOrderRestaurant; +import dev.example.restaurantManager.repository.EatInOrderRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Optional; + +@Service +public class EatInOrderRestaurantServiceImpl implements EatInOrderRestaurantService { + + @Autowired + EatInOrderRepository eatInOrderRepository; + + @Override + public List getAllEatInOrderRestaurant() { + return eatInOrderRepository.findAll(); + } + + @Override + public EatInOrderRestaurant createEatInOrderRestaurant(EatInOrderRestaurant eatInOrderRestaurant) { + return eatInOrderRepository.save(eatInOrderRestaurant); + } + + @Override + public EatInOrderRestaurant getEatInOrderRestaurantById(String id) { + Optional eatInOrderRestaurant = eatInOrderRepository.findById(id); + return eatInOrderRestaurant.orElse(null); + } + + @Override + public EatInOrderRestaurant updateEatInOrderRestaurant(String id, EatInOrderRestaurant eatInOrderRestaurant) { + EatInOrderRestaurant updateEatInOrderRestaurant = eatInOrderRepository.findById(id).orElse(null); + + if(updateEatInOrderRestaurant != null){ + updateEatInOrderRestaurant.setId(id); + updateEatInOrderRestaurant.setDate(eatInOrderRestaurant.getDate()); + updateEatInOrderRestaurant.setPaid(eatInOrderRestaurant.isPaid()); + updateEatInOrderRestaurant.setMenus(eatInOrderRestaurant.getMenus()); + updateEatInOrderRestaurant.setPeopleQty(eatInOrderRestaurant.getPeopleQty()); + updateEatInOrderRestaurant.setWaiter(eatInOrderRestaurant.getWaiter()); + updateEatInOrderRestaurant.setTotalPayment(eatInOrderRestaurant.getTotalPayment()); + updateEatInOrderRestaurant.setOrderedTableRestaurant(eatInOrderRestaurant.getOrderedTableRestaurant()); + return eatInOrderRepository.save(updateEatInOrderRestaurant); + } + + return null; + } + + @Override + public boolean deleteEatInOrderRestaurant(String id) { + eatInOrderRepository.deleteById(id); + return eatInOrderRepository.findById(id).isPresent(); + } +} diff --git a/src/main/java/dev/example/restaurantManager/service/TableRestaurantService.java b/src/main/java/dev/example/restaurantManager/service/TableRestaurantService.java new file mode 100644 index 0000000..11e189f --- /dev/null +++ b/src/main/java/dev/example/restaurantManager/service/TableRestaurantService.java @@ -0,0 +1,15 @@ +package dev.example.restaurantManager.service; + +import dev.example.restaurantManager.model.Customer; +import dev.example.restaurantManager.model.TableRestaurant; + +import java.util.List; + +public interface TableRestaurantService { + List getAllTableRestaurant(); + TableRestaurant createTableRestaurant(TableRestaurant tableRestaurant); + TableRestaurant getTableRestaurantById(String id); + TableRestaurant updateTableRestaurant(String id, TableRestaurant tableRestaurant); + boolean deleteTableRestaurant(String id); + +} diff --git a/src/main/java/dev/example/restaurantManager/service/TableRestaurantServiceImpl.java b/src/main/java/dev/example/restaurantManager/service/TableRestaurantServiceImpl.java new file mode 100644 index 0000000..2a3faec --- /dev/null +++ b/src/main/java/dev/example/restaurantManager/service/TableRestaurantServiceImpl.java @@ -0,0 +1,56 @@ +package dev.example.restaurantManager.service; + +import dev.example.restaurantManager.model.TableRestaurant; +import dev.example.restaurantManager.repository.TableRestaurantRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Optional; + +@Service +public class TableRestaurantServiceImpl implements TableRestaurantService { + + @Autowired + TableRestaurantRepository tableRestaurantRepository; + + @Override + public List getAllTableRestaurant() { + return tableRestaurantRepository.findAll(); + } + + @Override + public TableRestaurant createTableRestaurant(TableRestaurant tableRestaurant) { + return tableRestaurantRepository.save(tableRestaurant); + } + + @Override + public TableRestaurant getTableRestaurantById(String id) { + Optional tableRestaurant = tableRestaurantRepository.findById(id); + return tableRestaurant.orElse(null); + } + + @Override + public TableRestaurant updateTableRestaurant(String id, TableRestaurant tableRestaurant) { + TableRestaurant updateTableRestaurant = tableRestaurantRepository.findById(id).orElse(null); + + if(tableRestaurant != null){ + tableRestaurant.setId(id); + tableRestaurant.setName(updateTableRestaurant.getName()); + tableRestaurant.setDescription(updateTableRestaurant.getDescription()); + tableRestaurant.setQty(updateTableRestaurant.getQty()); + tableRestaurant.setBusy(updateTableRestaurant.isBusy()); + tableRestaurant.setBookings(updateTableRestaurant.getBookings()); + tableRestaurant.setEatInOrderRestaurant(updateTableRestaurant.getEatInOrderRestaurant()); + return tableRestaurantRepository.save(tableRestaurant); + } + + return null; + } + + @Override + public boolean deleteTableRestaurant(String id) { + tableRestaurantRepository.deleteById(id); + return tableRestaurantRepository.findById(id).isPresent(); + } +} diff --git a/src/main/java/dev/example/restaurantManager/utilities/ResourceDataLoader.java b/src/main/java/dev/example/restaurantManager/utilities/ResourceDataLoader.java new file mode 100644 index 0000000..836057a --- /dev/null +++ b/src/main/java/dev/example/restaurantManager/utilities/ResourceDataLoader.java @@ -0,0 +1,24 @@ +package dev.example.restaurantManager.utilities; + +import dev.example.restaurantManager.repository.CustomerRepository; +import dev.example.restaurantManager.utilities.fakers.CustomerFaker; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class ResourceDataLoader { + + @Autowired + private CustomerRepository customerRepository; + + public void createFakeCustomers() { + // Check if the database is empty + if (customerRepository.count() == 0) { + System.out.println(" 0 records at the database found"); + CustomerFaker customerFaker = new CustomerFaker(); + int qty = 50; + customerRepository.saveAll(customerFaker.GetNObjects(qty)); + System.out.println(qty + " fake customers have been created and saved to the database."); + } + } +} \ No newline at end of file diff --git a/src/main/java/dev/example/restaurantManager/utilities/fakers/CustomerFaker.java b/src/main/java/dev/example/restaurantManager/utilities/fakers/CustomerFaker.java new file mode 100644 index 0000000..55614bf --- /dev/null +++ b/src/main/java/dev/example/restaurantManager/utilities/fakers/CustomerFaker.java @@ -0,0 +1,45 @@ +package dev.example.restaurantManager.utilities.fakers; + +import com.github.javafaker.Faker; +import dev.example.restaurantManager.model.Customer; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; +import java.util.UUID; + +public class CustomerFaker implements IFaker { + + private final Faker faker = new Faker(new Locale("en-US")); + + @Override + public Customer CreateObject(Customer object) { + return new Customer( + UUID.randomUUID().toString(), + faker.name().fullName(), + faker.internet().emailAddress(), + faker.phoneNumber().cellPhone(), + faker.random().nextInt(18, 130), + faker.random().nextBoolean(), + faker.random().nextBoolean() + + ); + } + + @Override + public List GetNObjects(int n) { + List lstCustomer = new ArrayList(); + for (int i = 0; i < n; i++) { + Customer customer = new Customer( + UUID.randomUUID().toString(), + faker.name().fullName(), + faker.internet().emailAddress(), + faker.phoneNumber().cellPhone(), + faker.random().nextInt(18, 130), + faker.random().nextBoolean(), + faker.random().nextBoolean() + ); + lstCustomer.add(customer); + } + return lstCustomer; + } +} \ No newline at end of file diff --git a/src/main/java/dev/example/restaurantManager/utilities/fakers/IFaker.java b/src/main/java/dev/example/restaurantManager/utilities/fakers/IFaker.java new file mode 100644 index 0000000..35c02e9 --- /dev/null +++ b/src/main/java/dev/example/restaurantManager/utilities/fakers/IFaker.java @@ -0,0 +1,8 @@ +package dev.example.restaurantManager.utilities.fakers; + +import java.util.List; + +public interface IFaker { + T CreateObject(T object); + List GetNObjects(int n); +} \ No newline at end of file diff --git a/src/test/java/dev/example/restaurantManager/BookingTableTest.java b/src/test/java/dev/example/restaurantManager/BookingTableTest.java index 2505e1f..e0e5296 100644 --- a/src/test/java/dev/example/restaurantManager/BookingTableTest.java +++ b/src/test/java/dev/example/restaurantManager/BookingTableTest.java @@ -36,8 +36,10 @@ public void TestCreateBookingTable() { booking1.setPhoneNumber("561-651-25-25"); // Create tableRestaurant object - TableRestaurant tableRestaurant1 = new TableRestaurant("TR01", "Table 01", - "TABLE 01 for 4 people outdoors", 4, false, new ArrayList<>()); +// TableRestaurant tableRestaurant1 = new TableRestaurant("TR01", "Table 01", +// "TABLE 01 for 4 people outdoors", 4, false, new ArrayList<>()); + + TableRestaurant tableRestaurant1 = new TableRestaurant("TR01", "Table 01", "TABLE 01 for 4 people outdoors", 4, false, new ArrayList<>(), new ArrayList<>()); // assign booking to tableRestaurant tableRestaurant1.getBookings().add(booking1); diff --git a/src/test/java/dev/example/restaurantManager/RelationshipsOrderRestaurantTest.java b/src/test/java/dev/example/restaurantManager/RelationshipsOrderRestaurantTest.java index 2e5c78b..11454a3 100644 --- a/src/test/java/dev/example/restaurantManager/RelationshipsOrderRestaurantTest.java +++ b/src/test/java/dev/example/restaurantManager/RelationshipsOrderRestaurantTest.java @@ -50,9 +50,14 @@ public void TestCreateOrder() { OrderRestaurant shippingOrder3 = new ShippingOrderRestaurant("SO3", new Date(), "Emily", 3, 32.97, false, new ArrayList<>(Arrays.asList(menu1, menu2, menu3)), "789 Oak St", "Chicago", "Lisa"); // Create 3 EatInOrder objects - OrderRestaurant eatInOrder1 = new EatInOrderRestaurant("EO1", new Date(), "David", 4, 43.96, true, new ArrayList<>(Arrays.asList(menu1, menu1, menu2, menu2)), new ArrayList<>(Arrays.asList(table1))); - OrderRestaurant eatInOrder2 = new EatInOrderRestaurant("EO2", new Date(), "Anna", 2, 21.98, false, new ArrayList<>(Arrays.asList(menu2, menu3)), new ArrayList<>(Arrays.asList(table2))); - OrderRestaurant eatInOrder3 = new EatInOrderRestaurant("EO3", new Date(), "Mark", 6, 65.94, true, new ArrayList<>(Arrays.asList(menu1, menu1, menu2, menu2, menu3, menu3)), new ArrayList<>(Arrays.asList(table1, table2))); +// OrderRestaurant eatInOrder1 = new EatInOrderRestaurant("EO1", new Date(), "David", 4, 43.96, true, new ArrayList<>(Arrays.asList(menu1, menu1, menu2, menu2)), new ArrayList<>(Arrays.asList(table1))); +// OrderRestaurant eatInOrder2 = new EatInOrderRestaurant("EO2", new Date(), "Anna", 2, 21.98, false, new ArrayList<>(Arrays.asList(menu2, menu3)), new ArrayList<>(Arrays.asList(table2))); +// OrderRestaurant eatInOrder3 = new EatInOrderRestaurant("EO3", new Date(), "Mark", 6, 65.94, true, new ArrayList<>(Arrays.asList(menu1, menu1, menu2, menu2, menu3, menu3)), new ArrayList<>(Arrays.asList(table1, table2))); + + OrderRestaurant eatInOrder1 = new EatInOrderRestaurant("EO1", new Date(), "David", 4, 43.96, true, new ArrayList<>(Arrays.asList(menu1, menu1, menu2, menu2)), new TableRestaurant()); + OrderRestaurant eatInOrder2 = new EatInOrderRestaurant("EO2", new Date(), "Anna", 2, 21.98, false, new ArrayList<>(Arrays.asList(menu2, menu3)), new TableRestaurant()); + OrderRestaurant eatInOrder3 = new EatInOrderRestaurant("EO3", new Date(), "Mark", 6, 65.94, true, new ArrayList<>(Arrays.asList(menu1, menu1, menu2, menu2, menu3, menu3)), new TableRestaurant()); + // Create 3 TakeAwayOrder objects OrderRestaurant takeAwayOrder1 = new TakeAwayOrder("TO1", new Date(), "Alice", 1, 10.99, true, new ArrayList<>(Arrays.asList(menu1)), customer1 ); diff --git a/src/test/java/dev/example/restaurantManager/Tests/TableRestaurantControllerTest.java b/src/test/java/dev/example/restaurantManager/Tests/TableRestaurantControllerTest.java new file mode 100644 index 0000000..7e474c9 --- /dev/null +++ b/src/test/java/dev/example/restaurantManager/Tests/TableRestaurantControllerTest.java @@ -0,0 +1,35 @@ +package dev.example.restaurantManager.Tests; + +import dev.example.restaurantManager.controller.TableRestaurantController; +import dev.example.restaurantManager.model.TableRestaurant; +import dev.example.restaurantManager.service.TableRestaurantService; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.web.servlet.MockMvc; + +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + + + +@WebMvcTest(TableRestaurantController.class) +public class TableRestaurantControllerTest { + @Autowired + private MockMvc mockMvc; + + @MockBean + private TableRestaurantService tableRestaurantService; + + @Test + public void testControllerMethod_getAllTableRestaurant() throws Exception{ + //Arrange + + //Act + + //Assert + mockMvc.perform(get("/api/v1/tableRestaurant/allTableRestaurants")).andExpect(status().isOk()) + .andExpect(content().contentType("application/json")); + } +} diff --git a/src/test/java/dev/example/restaurantManager/Tests/TableRestaurantRepositoryTest.java b/src/test/java/dev/example/restaurantManager/Tests/TableRestaurantRepositoryTest.java new file mode 100644 index 0000000..c9be32f --- /dev/null +++ b/src/test/java/dev/example/restaurantManager/Tests/TableRestaurantRepositoryTest.java @@ -0,0 +1,70 @@ +package dev.example.restaurantManager.Tests; + +import dev.example.restaurantManager.model.Booking; +import dev.example.restaurantManager.model.EatInOrderRestaurant; +import dev.example.restaurantManager.model.TableRestaurant; +import dev.example.restaurantManager.repository.TableRestaurantRepository; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; +import org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Optional; + +import static org.assertj.core.api.Assertions.assertThat; + +@DataJpaTest +public class TableRestaurantRepositoryTest { + + @Autowired + private TestEntityManager entityManager; + + @Autowired + private TableRestaurantRepository tableRestaurantRepository; + + @Test + public void whenFindById_thenReturnTableRestaurant() { + // given + Booking bk1 = new Booking(); + bk1.setId("book1"); + bk1.setName("Juan"); + bk1.setDate(new Date("25/12/2024")); + bk1.setConfirmed(true); + bk1.setPeopleQty(10); + //entityManager.persist(bk1); + //entityManager.flush(); + //ArrayList lstBookings = new ArrayList<>(); + //lstBookings.add(bk1); + + TableRestaurant tabla1 = new TableRestaurant(); + tabla1.setId("tabla1"); + tabla1.setQty(4); + tabla1.setName("Juan"); + tabla1.setDescription("Tabla Sala 1"); + tabla1.setBusy(true); + tabla1.getBookings().add(bk1); + + EatInOrderRestaurant eatInOrder01 = new EatInOrderRestaurant("Eat01",new Date("15/12/2024"),"waiter01",10,0.0,false,new ArrayList<>(), tabla1); + //ArrayList lstEatInOrders = new ArrayList<>(); + //entityManager.persist(eatInOrder01); + //entityManager.flush(); + + //lstEatInOrders.add(eatInOrder01); + + tabla1.getEatInOrderRestaurant().add(eatInOrder01); + + entityManager.persist(tabla1); + entityManager.flush(); + + // when + Optional found = tableRestaurantRepository.findById(tabla1.getId()); + + // then + assertThat(found).isPresent(); + assertThat(found.get().getName()).isEqualTo(tabla1.getName()); + } + +} \ No newline at end of file diff --git a/src/test/java/dev/example/restaurantManager/Tests/TableRestaurantServiceTest.java b/src/test/java/dev/example/restaurantManager/Tests/TableRestaurantServiceTest.java new file mode 100644 index 0000000..da79da9 --- /dev/null +++ b/src/test/java/dev/example/restaurantManager/Tests/TableRestaurantServiceTest.java @@ -0,0 +1,69 @@ +package dev.example.restaurantManager.Tests; + +import dev.example.restaurantManager.model.Booking; +import dev.example.restaurantManager.model.EatInOrderRestaurant; +import dev.example.restaurantManager.model.TableRestaurant; +import dev.example.restaurantManager.repository.TableRestaurantRepository; +import dev.example.restaurantManager.service.TableRestaurantService; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; + +import java.util.ArrayList; +import java.util.Date; +import java.util.Optional; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +@SpringBootTest +public class TableRestaurantServiceTest { + + @Autowired + private TableRestaurantService tableRestaurantService; + + @MockBean + private TableRestaurantRepository tableRestaurantRepository; + + // @BeforeEach +// public void setup() { +// MockitoAnnotations.initMocks(this); +// } + + @Test + public void check_add_new_table_restaurant(){ + // Define the behavior of the mocked dependency + Booking bk1 = new Booking(); + bk1.setId("book1"); + bk1.setName("Juan"); + bk1.setDate(new Date("25/12/2024")); + bk1.setConfirmed(true); + bk1.setPeopleQty(10); + + TableRestaurant tabla1 = new TableRestaurant(); + tabla1.setId("tabla1"); + tabla1.setQty(4); + tabla1.setName("Juan"); + tabla1.setDescription("Tabla Sala 1"); + tabla1.setBusy(true); + tabla1.getBookings().add(bk1); + + EatInOrderRestaurant eatInOrder01 = new EatInOrderRestaurant("Eat01",new Date("15/12/2024"),"waiter01",10,0.0,false,new ArrayList<>(), tabla1); + tabla1.getEatInOrderRestaurant().add(eatInOrder01); + + when(tableRestaurantRepository.save(any(TableRestaurant.class))).thenReturn(tabla1); + when(tableRestaurantRepository.findById(any(String.class))).thenReturn(Optional.of(tabla1)); + // Arrange + + TableRestaurant tb1 = tableRestaurantService.createTableRestaurant(tabla1); + + // Act + TableRestaurant findTableAfterToSave = tableRestaurantService.getTableRestaurantById(tabla1.getId()); + TableRestaurant findTableRestaurant = tableRestaurantRepository.findById(tabla1.getId()).orElse(null); + + // Assert + assertThat(findTableAfterToSave.getName()).isEqualTo(findTableRestaurant.getName()); + } +} From 3dac783be231ce9e86ee96baa9a54646f1cfebfb Mon Sep 17 00:00:00 2001 From: emy Date: Wed, 6 Nov 2024 12:51:50 +0100 Subject: [PATCH 5/5] PRA02-Task2-Implement-Unit-Test-Repository-Service-Controller-with-relationship-Swagger --- .../controller/TableRestaurantController.java | 7 ++-- .../example/restaurantManager/model/Menu.java | 1 + .../service/BookingService.java | 14 ++++++++ .../service/BookingServiceImpl.java | 32 +++++++++++++++++++ .../Tests/TableRestaurantServiceTest.java | 9 ++++-- 5 files changed, 58 insertions(+), 5 deletions(-) create mode 100644 src/main/java/dev/example/restaurantManager/service/BookingService.java create mode 100644 src/main/java/dev/example/restaurantManager/service/BookingServiceImpl.java diff --git a/src/main/java/dev/example/restaurantManager/controller/TableRestaurantController.java b/src/main/java/dev/example/restaurantManager/controller/TableRestaurantController.java index ee0a794..6d22218 100644 --- a/src/main/java/dev/example/restaurantManager/controller/TableRestaurantController.java +++ b/src/main/java/dev/example/restaurantManager/controller/TableRestaurantController.java @@ -1,7 +1,8 @@ package dev.example.restaurantManager.controller; -import dev.example.restaurantManager.model.Customer; -import dev.example.restaurantManager.model.TableRestaurant; +import dev.example.restaurantManager.model.*; +import dev.example.restaurantManager.service.BookingService; +import dev.example.restaurantManager.service.EatInOrderRestaurantService; import dev.example.restaurantManager.service.TableRestaurantService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpHeaders; @@ -32,7 +33,9 @@ public ResponseEntity> getAllTableRestaurants(){ @PostMapping public ResponseEntity saveTableRestaurant(@RequestBody TableRestaurant tableRestaurant){ + HttpHeaders headers = this.getCommonHeaders("Table Restaurant"); + TableRestaurant newTableRestaurant = tableRestaurantService.createTableRestaurant(tableRestaurant); return newTableRestaurant != null ? new ResponseEntity<>(newTableRestaurant, headers, HttpStatus.OK) diff --git a/src/main/java/dev/example/restaurantManager/model/Menu.java b/src/main/java/dev/example/restaurantManager/model/Menu.java index 2d0e2ce..ffafbb3 100644 --- a/src/main/java/dev/example/restaurantManager/model/Menu.java +++ b/src/main/java/dev/example/restaurantManager/model/Menu.java @@ -13,6 +13,7 @@ public class Menu implements Serializable { // Add a serialVersionUID private static final long serialVersionUID = 1L; + private Integer Id; private String name; private Double price; private String content; diff --git a/src/main/java/dev/example/restaurantManager/service/BookingService.java b/src/main/java/dev/example/restaurantManager/service/BookingService.java new file mode 100644 index 0000000..65676cf --- /dev/null +++ b/src/main/java/dev/example/restaurantManager/service/BookingService.java @@ -0,0 +1,14 @@ +package dev.example.restaurantManager.service; + +import dev.example.restaurantManager.model.Booking; + +import java.util.List; + +public interface BookingService { + List getAllBookings(); + Booking createBooking(Booking booking); + Booking getBookingById(String id); + Booking updateBooking(String id, Booking bookingDetails); + boolean deleteBooking(String id); + +} diff --git a/src/main/java/dev/example/restaurantManager/service/BookingServiceImpl.java b/src/main/java/dev/example/restaurantManager/service/BookingServiceImpl.java new file mode 100644 index 0000000..d1eddcb --- /dev/null +++ b/src/main/java/dev/example/restaurantManager/service/BookingServiceImpl.java @@ -0,0 +1,32 @@ +package dev.example.restaurantManager.service; + +import dev.example.restaurantManager.model.Booking; + +import java.util.List; + +public class BookingServiceImpl implements BookingService{ + @Override + public List getAllBookings() { + return List.of(); + } + + @Override + public Booking createBooking(Booking booking) { + return null; + } + + @Override + public Booking getBookingById(String id) { + return null; + } + + @Override + public Booking updateBooking(String id, Booking bookingDetails) { + return null; + } + + @Override + public boolean deleteBooking(String id) { + return false; + } +} diff --git a/src/test/java/dev/example/restaurantManager/Tests/TableRestaurantServiceTest.java b/src/test/java/dev/example/restaurantManager/Tests/TableRestaurantServiceTest.java index da79da9..496624a 100644 --- a/src/test/java/dev/example/restaurantManager/Tests/TableRestaurantServiceTest.java +++ b/src/test/java/dev/example/restaurantManager/Tests/TableRestaurantServiceTest.java @@ -24,9 +24,10 @@ public class TableRestaurantServiceTest { @Autowired private TableRestaurantService tableRestaurantService; - @MockBean + @Autowired private TableRestaurantRepository tableRestaurantRepository; + //comment for other use mockito // @BeforeEach // public void setup() { // MockitoAnnotations.initMocks(this); @@ -53,8 +54,10 @@ public void check_add_new_table_restaurant(){ EatInOrderRestaurant eatInOrder01 = new EatInOrderRestaurant("Eat01",new Date("15/12/2024"),"waiter01",10,0.0,false,new ArrayList<>(), tabla1); tabla1.getEatInOrderRestaurant().add(eatInOrder01); - when(tableRestaurantRepository.save(any(TableRestaurant.class))).thenReturn(tabla1); - when(tableRestaurantRepository.findById(any(String.class))).thenReturn(Optional.of(tabla1)); +//comment for other use mockito +// when(tableRestaurantRepository.save(any(TableRestaurant.class))).thenReturn(tabla1); +// when(tableRestaurantRepository.findById(any(String.class))).thenReturn(Optional.of(tabla1)); + // Arrange TableRestaurant tb1 = tableRestaurantService.createTableRestaurant(tabla1);