Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
@@ -1,7 +1,15 @@
package dev.example.restaurantManager;


import dev.example.restaurantManager.utilities.CustomerDataLoader;
//import dev.example.restaurantManager.utilities.EatInOrderDataLoader;
import dev.example.restaurantManager.utilities.MenuDataLoader;
import dev.example.restaurantManager.utilities.TableDataLoader;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;


@SpringBootApplication
public class RestaurantManagerApplication {
Expand All @@ -10,4 +18,23 @@ public static void main(String[] args) {
SpringApplication.run(RestaurantManagerApplication.class, args);
}

@Bean
public ApplicationRunner CustomerDataLoader(CustomerDataLoader customerDataLoader) {
return args -> customerDataLoader.createFakeCustomers();
}

@Bean
public ApplicationRunner TableDataLoader(TableDataLoader tableDataLoader) {
return args -> tableDataLoader.createFakeTables();
}

@Bean
public ApplicationRunner MenuDataLoader(MenuDataLoader menuDataLoader) {
return args -> menuDataLoader.createFakeMenus();
}

/*@Bean
public ApplicationRunner EatInOrderDataLoader(EatInOrderDataLoader eatInOrderDataLoader) {
return args -> eatInOrderDataLoader.createFakeEatInOrders();
}*/
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
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.beans.factory.annotation.Value;
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 TableRestaurantController {

// inject from application.properties endpoint.url.tables
@Value("${endpoint.url.tables}")
private String endpointUrlTables;

@Autowired
private TableService tableService;

@GetMapping("/show-endpoint")
public String showEndpointTables() {

return "The tables endpoint URL is: " + endpointUrlTables;
}

// manage request by ResponseEntity with all tables
@GetMapping("/allTables")
public ResponseEntity<List<TableRestaurant>> getAllCustomers( ) {
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> createCustomer(@RequestBody TableRestaurant tables) {
TableRestaurant createdTable = tableService.createTable(tables);
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("customer-count", String.valueOf(tableService.countTables()));
headers.add("object", "tables");
return headers;
}
}
Original file line number Diff line number Diff line change
@@ -1,32 +1,43 @@
package dev.example.restaurantManager.model;

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.Date;
import java.util.stream.Collectors;

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

private ArrayList<TableRestaurant> tableRestaurants = new ArrayList<>();
//private TableRestaurant orderedTableRestaurant;
@Id
@GeneratedValue(strategy = GenerationType.AUTO) // Generate ID automatically
private String id;
//Relation with RestaurantTable Many to One
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "TABLE_EATIN_FK_ID")
@JsonIgnore
//private ArrayList<RestaurantTable> tableRestaurants = new ArrayList<>();
private TableRestaurant orderedTableRestaurant;



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

@Override
public String toString() {
return super.toString() + "\n" +
"Type: Eat In\n" +
"Tables: " + tableRestaurants.stream().map(TableRestaurant::getName).collect(Collectors.joining(", "));
"Tables: " + (orderedTableRestaurant != null ? orderedTableRestaurant.getName() : "No table assigned");
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
@Entity
@Table(name = "ORDER_RESTAURANT")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)

public class OrderRestaurant {

@Id
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.ArrayList;
import java.util.UUID;

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

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

// we must create a VERY CONCRETE constructor to RUN the OLD tests
//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;
this.description = description;
this.qty = qty;
this.busy = busy;

}

public TableRestaurant(String id, String name, String description, Integer qty, Boolean busy, ArrayList<EatInOrderRestaurant> EatInOrders) {
this.id = id;
this.name = name;
this.description = description;
this.qty = qty;
this.busy = busy;
this.EatInOrders = EatInOrders;
}



//method to add
public void addBooking(Booking booking) {
this.getBookings().add(booking);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package dev.example.restaurantManager.repository;

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

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

public interface EatInOrderRepository extends JpaRepository<EatInOrderRestaurant, String> {

// 0. Count tables by name
int countByDate(Date date);
// 1. Find tables by name
ArrayList<EatInOrderRestaurant> findByDate(Date date);
// 3. Find tables by name
long count();


// 1. Find tables by id
//EatInOrderRestaurant findById(String id);

// 2. Find tables by capacity
//Table findByPhoneNumber(String phoneNumber);

// 3. Find orders by waiter
EatInOrderRestaurant findByWaiter(String waiter);

// 4. Find Orders by date
//EatInOrderRestaurant findByDate(Date date);

// 5. Find tables by age greater than a specified value
//List<Customer> findByAgeGreaterThan(int age);

// 6. Find tables by age less than a specified value and not deleted
//List<Customer> findByAgeLessThanAndDeletedFalse(int age);

// 7. Find tables by name containing a specific string (case-insensitive)
//List<EatInOrderRestaurant> findByNameContainingIgnoreCase(String namePart);

// 8. Count tables by age
//long countByAge(int age);

// 9. Find tables by email ending with a specific domain
//List<Customer> findByEmailEndingWith(String domain);

// 10. Find top 5 oldest customers
//List<Customer> findTop5ByOrderByAgeDesc();

// 11. Find customers by name and age
//List<Customer> findByNameAndAge(String name, int age);

// 12. Find non-deleted tables ordered by name
//List<Table> findByVipCustomerFalseOrderByNameAsc();


}
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,54 @@
import dev.example.restaurantManager.model.MenuRestaurant;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.ArrayList;
import java.util.List;

public interface MenuRestaurantRepository extends JpaRepository<MenuRestaurant, String> {
}

// 0. Count menu by name
int countByName(String name);
// 1. Find menus by name
ArrayList<MenuRestaurant> findByName(String name);
// 3. Find menus by name
long count();


// 1. Find menus by email
//Optional<Menu> findByEmail(String email);

// 2. Find menus by phone number
//Menu findByPhoneNumber(String phoneNumber);

// 3. Find menus by name
//Menu findByNameAndEmail(String name, String email);

// 4. Find menus by name
MenuRestaurant findByNameContaining(String letter);

// 5. Find menus by age greater than a specified value
//List<Menu> findByAgeGreaterThan(int age);

// 6. Find menus by age less than a specified value and not deleted
//List<Menu> findByAgeLessThanAndDeletedFalse(int age);

// 7. Find menus by name containing a specific string (case-insensitive)
List<MenuRestaurant> findByNameContainingIgnoreCase(String namePart);

// 8. Count menus by age
//long countByAge(int age);

// 9. Find menus by email ending with a specific domain
//List<Menu> findByEmailEndingWith(String domain);

// 10. Find top 5 oldest menus
//List<Menu> findTop5ByOrderByAgeDesc();

// 11. Find menus by name and age
//List<Menu> findByNameAndAge(String name, int age);

// 12. Find non-deleted menus ordered by name
//List<Menu> findByVipCustomerFalseOrderByNameAsc();


}
Original file line number Diff line number Diff line change
@@ -1,9 +1,16 @@
package dev.example.restaurantManager.repository;



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

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

public interface TableRestaurantRepository extends JpaRepository<TableRestaurant, String> {
}



Optional<TableRestaurant> findByName(String name);

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


import dev.example.restaurantManager.model.EatInOrderRestaurant;

import java.util.List;

public interface EatInOrderService {
List<EatInOrderRestaurant> getAllEatInOrders();
EatInOrderRestaurant createEatInOrder(EatInOrderRestaurant eatInOrderRestaurant);
EatInOrderRestaurant getEatInOrderById(String id);
EatInOrderRestaurant updateEatInOrder(String id, EatInOrderRestaurant eatInOrderRestaurantDetails);
boolean deleteEatInOrder(String id);
long countEatInOrders();
}


Loading