Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
e284255
Creando primer test para comprobar OrderMenyQty
jc-programs Oct 29, 2024
8bf2e62
Creando primer test para comprobar OrderMenyQty
jc-programs Oct 29, 2024
034c008
arreglado para poder utilizar objetos lazy loading
jc-programs Oct 29, 2024
c7d9710
OrderMenyQty funcionando
jc-programs Oct 30, 2024
d83bab2
trying to fix old tests
jc-programs Oct 30, 2024
7dc7464
almost all test fixed
jc-programs Oct 30, 2024
41f625b
all tests ok
jc-programs Oct 30, 2024
05690e2
OrderMenuQtyRepository
jc-programs Oct 30, 2024
b82ba64
add some test. Not finished jet
jc-programs Oct 30, 2024
e30a796
some new test still not working
jc-programs Oct 30, 2024
ff54b77
all my test OK
jc-programs Oct 30, 2024
785bd7f
sync con home
jc-programs Oct 31, 2024
395a60b
nuevo test para comprobar borrado de OrderMenuQty. Solo funciona desd…
jc-programs Oct 31, 2024
4d8892f
sql por console log
jc-programs Nov 4, 2024
30a5cd2
createOrderAndDeleteSomeQtyMenusWithMenuQtyRepository not working
jc-programs Nov 4, 2024
fa5aee1
trying delete from orderMenuQtyRepository
jc-programs Nov 5, 2024
14143a1
created FakeDataLoader to generate fake data
jc-programs Nov 5, 2024
e0e72f4
Corrected OrderMenuQty ManyToOne
jc-programs Nov 5, 2024
52aa046
relations corrected. 1 test still not working
jc-programs Nov 5, 2024
351ad51
intentando @classId
jc-programs Nov 5, 2024
0be2860
all tests but one working
jc-programs Nov 6, 2024
de56283
all code working but one test
jc-programs Nov 6, 2024
97c4b63
intentando arreglar delete OrderMenuQty
jc-programs Nov 6, 2024
9d2f0f0
all test working but deleteSomeQtyMenusWithMenuQtyRepository
jc-programs Nov 6, 2024
068a0d6
add deleteByIdInMenuQtyRepository. Test don't work
jc-programs Nov 6, 2024
ad268cc
added delete menus from order
jc-programs Nov 6, 2024
5721c05
avoiding JSON recursion with @JsonIdentityInfo
jc-programs Nov 7, 2024
2c9c908
test OrderService: addMenus and removeMenus
jc-programs Nov 7, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package dev.example.restaurantManager.controller;

import dev.example.restaurantManager.model.MenuRestaurant;
import dev.example.restaurantManager.model.OrderRestaurant;
import dev.example.restaurantManager.service.MenuService;
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.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Date;
import java.util.List;

@RestController
@RequestMapping("/api/menu")
public class MenuController {
@Autowired
private MenuService menuService;


@GetMapping("/allMenus")
public ResponseEntity<List<MenuRestaurant>> getAllMenus( ) {
List<MenuRestaurant> menus = menuService.getAllMenus();
HttpHeaders headers = getCommonHeaders("Get all menus");

return menus != null && !menus.isEmpty()
? new ResponseEntity<>(menus, 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(menuService.countMenus()));
headers.add("object", "menus");
return headers;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
package dev.example.restaurantManager.controller;

import dev.example.restaurantManager.model.MenuRestaurant;
import dev.example.restaurantManager.model.OrderMenuQty;
import dev.example.restaurantManager.model.OrderRestaurant;
import dev.example.restaurantManager.service.OrderService;
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/order")
@RestController
public class OrderController {

@Autowired
private OrderService orderService;

// manage request by ResponseEntity with all orders
@GetMapping("/allOrders")
public ResponseEntity<List<OrderRestaurant>> getAllOrders( ) {
List<OrderRestaurant> orders = orderService.getAllOrders();
HttpHeaders headers = getCommonHeaders("Get all orders");

return orders != null && !orders.isEmpty()
? new ResponseEntity<>(orders, headers, HttpStatus.OK)
: new ResponseEntity<>(headers, HttpStatus.NOT_FOUND);
}

@PostMapping
public ResponseEntity<OrderRestaurant> createOrder(@RequestBody OrderRestaurant order) {
OrderRestaurant createdOrder = orderService.createOrder(order);
HttpHeaders headers = getCommonHeaders("Create a new order");

return createdOrder != null
? new ResponseEntity<>(createdOrder, headers, HttpStatus.CREATED)
: new ResponseEntity<>(headers, HttpStatus.BAD_REQUEST);
}

@PutMapping("/{id}")
public ResponseEntity<OrderRestaurant> updateOrder(@PathVariable String id, @RequestBody OrderRestaurant orderDetails) {
OrderRestaurant updatedOrder = orderService.updateOrder(id, orderDetails);
HttpHeaders headers = getCommonHeaders("Update an order");

return updatedOrder != null
? new ResponseEntity<>(updatedOrder, headers, HttpStatus.OK)
: new ResponseEntity<>(headers, HttpStatus.NOT_FOUND);
}

@DeleteMapping("/{id}")
public ResponseEntity<Void> deleteOrder(@PathVariable String id) {
boolean deleted = orderService.deleteOrder(id);
HttpHeaders headers = getCommonHeaders("Delete an order");
headers.add("deleted", String.valueOf(deleted));


return deleted
? new ResponseEntity<>(headers, HttpStatus.NO_CONTENT)
: new ResponseEntity<>(headers, HttpStatus.NOT_FOUND);
}


@PutMapping("/{id}/menus/{menus}")
public ResponseEntity<OrderRestaurant> updateOrderAddMenuQty(@PathVariable String id, @RequestBody List<MenuRestaurant> menus) {
OrderRestaurant orderUpdated = orderService.addMenus(id,menus);
// OrderRestaurant order = orderService.getOrderById(id);
HttpHeaders headers = getCommonHeaders("Add menu qties to order");
return orderUpdated != null
? new ResponseEntity<>(orderUpdated, headers, HttpStatus.OK)
: new ResponseEntity<>(headers, HttpStatus.NOT_FOUND);
// if( orderUpdated==null ){
// return new ResponseEntity<>(headers, HttpStatus.NOT_FOUND);
// }
// for (MenuRestaurant m : menus) {
// order.addMenu(m);
// }
// OrderRestaurant orderUpdated = orderService.updateOrder(id,order);

}

@DeleteMapping("/{id}/menus/{menus}")
public ResponseEntity<OrderRestaurant> updateOrderDelMenuQty(@PathVariable String id, @RequestBody List<MenuRestaurant> menus) {
OrderRestaurant orderUpdated = orderService.deleteMenus(id,menus);
HttpHeaders headers = getCommonHeaders("Delete menu qties from order");
return orderUpdated != null
? new ResponseEntity<>(orderUpdated, headers, HttpStatus.OK)
: new ResponseEntity<>(headers, HttpStatus.NOT_FOUND);
}


@GetMapping("/{id}")
public ResponseEntity<OrderRestaurant> getOrderById(@PathVariable String id) {
OrderRestaurant order = orderService.getOrderById(id);
HttpHeaders headers = getCommonHeaders("Get an order by Id");

return order != null
? new ResponseEntity<>(order, 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("order-count", String.valueOf(orderService.countOrders()));
headers.add("object", "orders");
return headers;
}


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package dev.example.restaurantManager.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import dev.example.restaurantManager.utilities.FakeDataLoader;

@RestController
@RequestMapping("api/v1/populate")
public class PopulateDataController {

@Autowired
private FakeDataLoader dataLoader;

@PostMapping("/all")
public ResponseEntity<String> PopulateAllData(){
dataLoader.createDataAndSave2DBWithoutRelationship();
String idOrder = dataLoader.createSomeRelations();
return ResponseEntity.ok("All data populated successfully. Some relationship to order_id="+idOrder);
}

}
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package dev.example.restaurantManager.model;

import jakarta.persistence.Entity;
import jakarta.persistence.Transient;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;

@Data
Expand All @@ -14,10 +16,18 @@
@Entity
public class EatInOrderRestaurant extends OrderRestaurant {

@Transient
private ArrayList<TableRestaurant> tableRestaurants = new ArrayList<>();
//private TableRestaurant orderedTableRestaurant;


public EatInOrderRestaurant(String id, Date date, String waiter, int peopleQty,
double totalPayment, boolean paid, List<OrderMenuQty> menus,
ArrayList<TableRestaurant> tableRestaurants) {
super(id, date, waiter, peopleQty, totalPayment, paid, menus);
this.tableRestaurants = tableRestaurants;
}

public EatInOrderRestaurant(String id, Date date, String waiter, int peopleQty,
double totalPayment, boolean paid, ArrayList<MenuRestaurant> menus,
ArrayList<TableRestaurant> tableRestaurants) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,22 @@
package dev.example.restaurantManager.model;

import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.fasterxml.jackson.annotation.JsonIgnore;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.Id;
import jakarta.persistence.ManyToMany;
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
import jakarta.persistence.*;
import lombok.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

@Data
@AllArgsConstructor
// @AllArgsConstructor
@NoArgsConstructor
@Entity
// https://www.baeldung.com/jackson-bidirectional-relationships-and-infinite-recursion
@JsonIdentityInfo(
generator = ObjectIdGenerators.PropertyGenerator.class,
property = "id")
public class MenuRestaurant {

@Id
Expand All @@ -24,9 +27,20 @@ public class MenuRestaurant {
private boolean active;
private boolean water;

@JsonIgnore
@ManyToMany(mappedBy = "menus", fetch = FetchType.LAZY)
private List<OrderRestaurant> orders = new ArrayList<>();
// @JsonIgnore
// @ManyToMany(mappedBy = "menus", fetch = FetchType.LAZY)
// private List<OrderRestaurant> orders = new ArrayList<>();

@OneToMany(fetch = FetchType.LAZY,cascade = CascadeType.ALL)
@JoinColumn(name="menu_id") // sin esta anotación se crea la tabla menu_restaurant_menus_qty
private List<OrderMenuQty> menusQty;


// to execute old tests
public MenuRestaurant(String id, String name, Double price, String content, boolean active, boolean water,ArrayList<MenuRestaurant> orders){
this(id, name, price, content, active, water);
}


public MenuRestaurant(String id, String name, Double price, String content, boolean active, boolean water) {
this.id = id;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package dev.example.restaurantManager.model;

import com.fasterxml.jackson.annotation.JsonIgnore;
import jakarta.persistence.*;
import lombok.Data;
import org.hibernate.annotations.GenericGenerator;

import java.util.Objects;

@Data
@Entity
@Table(name = "ORDER_MENU_QTY")
@IdClass(PK_OrderMenuQty.class)
public class OrderMenuQty {
// @Id
// @GeneratedValue(generator = "UUID")
// @GenericGenerator(name = "UUID", strategy = "org.hibernate.id.UUIDGenerator")
// private String id;


@JsonIgnore
@Id
@ManyToOne
@JoinColumn(name="order_id", referencedColumnName="id", nullable = false)
// @JoinColumn(name = "order_id")
private OrderRestaurant order;

@JsonIgnore
@Id
@ManyToOne
@JoinColumn(name="menu_id", referencedColumnName="id", nullable = false)
// @JoinColumn(name = "menu_id")
private MenuRestaurant menu;

private int quantity;


public PK_OrderMenuQty getId() {
return new PK_OrderMenuQty(order,menu);
}

public void setId(PK_OrderMenuQty id) {
this.order = id.getOrder();
this.menu = id.getMenu();
}


@Override
public String toString(){
return "order_id: " + order.getId() + ", menu_id: " + menu.getId() + ", qty: " + this.quantity;
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof OrderMenuQty that)) return false;
// don't check because id it's set in db
// Objects.equals(id, that.id)
return quantity == that.quantity && order.getId().equals(that.order.getId()) && menu.getId().equals(that.menu.getId());
}


}
Loading