Skip to content
Open
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
package dev.example.restaurantManager.controller;

import dev.example.restaurantManager.model.EatInOrderRestaurant;
import dev.example.restaurantManager.service.EatInOrderService;
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/eatinorder")
@RestController
public class EatInOrderController {

@Autowired
private EatInOrderService eatInOrderService;


// manage request by ResponseEntity with all eatInOrders
@GetMapping("/allEatInOrders")
public ResponseEntity<List<EatInOrderRestaurant>> getAllEatInOrders( ) {
List<EatInOrderRestaurant> eatInOrders = eatInOrderService.getAllEatInOrders();
HttpHeaders headers = getCommonHeaders("Get all eatInOrders");

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

@PostMapping
public ResponseEntity<EatInOrderRestaurant> createEatInOrder(@RequestBody EatInOrderRestaurant eatInOrder) {
EatInOrderRestaurant createdEatInOrder = eatInOrderService.createEatInOrder(eatInOrder);
HttpHeaders headers = getCommonHeaders("Create a new eatInOrder");

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

@PutMapping("/{id}")
public ResponseEntity<EatInOrderRestaurant> updateEatInOrder(@PathVariable String id, @RequestBody EatInOrderRestaurant eatInOrderDetails) {
EatInOrderRestaurant updatedEatInOrder = eatInOrderService.updateEatInOrder(id, eatInOrderDetails);
HttpHeaders headers = getCommonHeaders("Update a eatInOrder");

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

@DeleteMapping("/{id}")
public ResponseEntity<Void> deleteEatInOrder(@PathVariable String id) {
boolean deleted = eatInOrderService.deleteEatInOrder(id);
HttpHeaders headers = getCommonHeaders("Delete a eatInOrder");
headers.add("deleted", String.valueOf(deleted));


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

@GetMapping("/{id}")
public ResponseEntity<EatInOrderRestaurant> getEatInOrderById(@PathVariable String id) {
EatInOrderRestaurant eatInOrder = eatInOrderService.getEatInOrderById(id);
HttpHeaders headers = getCommonHeaders("Get a eatInOrder by Id");

return eatInOrder != null
? new ResponseEntity<>(eatInOrder, 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("eatinorders-count", String.valueOf(eatInOrderService.countEatInOrders()));
headers.add("object", "eatinorder");
return headers;
}



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

import dev.example.restaurantManager.model.TableRestaurant;
import dev.example.restaurantManager.service.TableService;
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/table")
@RestController
public class TableController {

@Autowired
private TableService tableService;


// manage request by ResponseEntity with all tables
@GetMapping("/allTables")
public ResponseEntity<List<TableRestaurant>> getAllTables( ) {
List<TableRestaurant> tables = tableService.getAllTables();
HttpHeaders headers = getCommonHeaders("Get all tables");

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

@PostMapping
public ResponseEntity<TableRestaurant> createTable(@RequestBody TableRestaurant table) {
TableRestaurant createdTable = tableService.createTable(table);
HttpHeaders headers = getCommonHeaders("Create a new table");

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

@PutMapping("/{id}")
public ResponseEntity<TableRestaurant> updateTable(@PathVariable String id, @RequestBody TableRestaurant tableDetails) {
TableRestaurant updatedTable = tableService.updateTable(id, tableDetails);
HttpHeaders headers = getCommonHeaders("Update a table");

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

@DeleteMapping("/{id}")
public ResponseEntity<Void> deleteTable(@PathVariable String id) {
boolean deleted = tableService.deleteTable(id);
HttpHeaders headers = getCommonHeaders("Delete a table");
headers.add("deleted", String.valueOf(deleted));


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

@GetMapping("/{id}")
public ResponseEntity<TableRestaurant> getTableById(@PathVariable String id) {
TableRestaurant table = tableService.getTableById(id);
HttpHeaders headers = getCommonHeaders("Get a table by Id");

return table != null
? new ResponseEntity<>(table, 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("table-count", String.valueOf(tableService.countTables()));
headers.add("object", "tables");
return headers;
}

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

import jakarta.persistence.Entity;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
Expand All @@ -8,26 +11,31 @@
import java.util.Date;
import java.util.stream.Collectors;

@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
public class EatInOrderRestaurant extends OrderRestaurant {

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

@ManyToOne
@JoinColumn(name="TABLE_EIO_FK")
private TableRestaurant tableEatInOrder;


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

@Override
public String toString() {
return super.toString() + "\n" +
"Type: Eat In\n" +
"Tables: " + tableRestaurants.stream().map(TableRestaurant::getName).collect(Collectors.joining(", "));
"Table EatInOrder: " + tableEatInOrder;
// "Tables: " + tableRestaurants.stream().map(TableRestaurant::getName).collect(Collectors.joining(", "));
}
}
Original file line number Diff line number Diff line change
@@ -1,17 +1,12 @@
package dev.example.restaurantManager.model;

import jakarta.persistence.CascadeType;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.OneToMany;
import lombok.AllArgsConstructor;
import jakarta.persistence.*;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.ArrayList;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
public class TableRestaurant {
Expand All @@ -26,9 +21,29 @@ public class TableRestaurant {
@OneToMany(mappedBy = "tableRestaurantMapped", cascade = CascadeType.ALL)
private ArrayList<Booking> bookings ;

@OneToMany(mappedBy = "tableEatInOrder", cascade = CascadeType.ALL)
private ArrayList<EatInOrderRestaurant> eatInOrders ;


public TableRestaurant(String id,String name, String description , int qty, boolean busy, ArrayList<Booking> bookings, ArrayList<EatInOrderRestaurant> eatInOrders) {
this.id=id;
this.name= name;
this.description=description;
this.qty=qty;
this.busy=busy;
this.bookings = bookings;
this.eatInOrders = eatInOrders;
}



// we must create a VERY CONCRETE constructor to RUN the OLD tests
public TableRestaurant(String id,String name, String description , int qty, boolean busy,ArrayList<Booking> bookings) {
this(id,name, description , qty, busy,bookings,new ArrayList<>());
}
// we must create a VERY CONCRETE constructor to RUN the OLD tests
public TableRestaurant(String name, String description , int qty, boolean busy) {
this(name,name, description , qty, busy,new ArrayList<>(),new ArrayList<>());
}


Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package dev.example.restaurantManager.repository;

import dev.example.restaurantManager.model.EatInOrderRestaurant;
import org.springframework.data.jpa.repository.JpaRepository;

public interface EatInOrderRepository extends JpaRepository<EatInOrderRestaurant,String> {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package dev.example.restaurantManager.service;

import dev.example.restaurantManager.model.EatInOrderRestaurant;

import java.util.List;

public interface EatInOrderService {
List<EatInOrderRestaurant> getAllEatInOrders();
EatInOrderRestaurant createEatInOrder(EatInOrderRestaurant eatInOrder);
EatInOrderRestaurant getEatInOrderById(String id);
EatInOrderRestaurant updateEatInOrder(String id, EatInOrderRestaurant eatInOrderDetails);
boolean deleteEatInOrder(String id);
long countEatInOrders();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
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;

@Service
public class EatInOrderServiceImpl implements EatInOrderService{

@Autowired
private EatInOrderRepository eatInOrderRepository;

@Override
public List<EatInOrderRestaurant> getAllEatInOrders() {
return eatInOrderRepository.findAll();
}

@Override
public EatInOrderRestaurant createEatInOrder(EatInOrderRestaurant eatInOrder) {
return eatInOrderRepository.save(eatInOrder);
}

@Override
public EatInOrderRestaurant getEatInOrderById(String id) {
return eatInOrderRepository.findById(id).orElse(null);
}

@Override
public EatInOrderRestaurant updateEatInOrder(String id, EatInOrderRestaurant eatInOrderDetails) {
EatInOrderRestaurant eatInOrder = getEatInOrderById(id);
if(eatInOrder== null){
return null;
}
return eatInOrderRepository.save(eatInOrderDetails);
}

@Override
public boolean deleteEatInOrder(String id) {
EatInOrderRestaurant eatInOrder = getEatInOrderById(id);
eatInOrderRepository.deleteById(id);
return eatInOrder != null;
}

@Override
public long countEatInOrders() {
return eatInOrderRepository.count();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package dev.example.restaurantManager.service;

import dev.example.restaurantManager.model.TableRestaurant;

import java.util.List;

public interface TableService {
List<TableRestaurant> getAllTables();
TableRestaurant createTable(TableRestaurant table);
TableRestaurant getTableById(String id);
TableRestaurant updateTable(String id, TableRestaurant tableDetails);
boolean deleteTable(String id);
long countTables();
}
Loading