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
Expand Up @@ -16,17 +16,17 @@
public class CustomerController {

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

@Autowired
private CustomerService customerService;

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

return "The customers endpoint URL is: " + endpointUrlCustomers;
}
// @GetMapping("/show-endpoint")
// public String showEndpointCustomers() {
//
// return "The customers endpoint URL is: " + endpointUrlCustomers;
// }

// manage request by ResponseEntity with all customers
@GetMapping("/allCustomers")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
package dev.example.restaurantManager.controller;


import dev.example.restaurantManager.model.MenuItemRestaurant;
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<List<MenuItemRestaurant>> getAllMenuItems() {
List<MenuItemRestaurant> menuItems = menuItemService.getAllItemMenus();
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<MenuItemRestaurant> createMenuItem(@RequestBody MenuItemRestaurant menuItem) {
MenuItemRestaurant createdMenuItem = menuItemService.createItemMenu(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<MenuItemRestaurant> updateMenuItem(@PathVariable String id, @RequestBody MenuItemRestaurant menuItemDetails) {
MenuItemRestaurant updatedMenuItem = menuItemService.updateItemMenu(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<Void> deleteMenuItem(@PathVariable String id) {
boolean deleted = menuItemService.deleteItemMenu(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<MenuItemRestaurant> getMenuItemById(@PathVariable String id) {
MenuItemRestaurant menuItem = menuItemService.getItemMenuById(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.countItemMenus()));
headers.add("object", "customers");
return headers;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
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<List<MenuRestaurant>> getAllMenus( ) {
List<MenuRestaurant> 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<MenuRestaurant> 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<MenuRestaurant> 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<Void> 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<MenuRestaurant> 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;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
package dev.example.restaurantManager.controller;public class MenuRestaurantController {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package dev.example.restaurantManager.enums;

public enum CourseType {
STARTER,
MAIN,
DESSERT
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
package dev.example.restaurantManager.model;

import com.fasterxml.jackson.annotation.JsonIgnore;
import dev.example.restaurantManager.enums.CourseType;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.GenericGenerator;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.UUID;


@Getter
@Setter
@Entity
@AllArgsConstructor
public class MenuItemRestaurant {

@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;
private double price;
@JsonIgnore
@ManyToMany(mappedBy = "menuItems", fetch = FetchType.EAGER)
private List<MenuRestaurant> menus = new ArrayList<>();
@Enumerated(EnumType.STRING)
private CourseType courseType;


public MenuItemRestaurant() {
this.id = UUID.randomUUID().toString();
}

public void addMenuRestaurant(MenuRestaurant menuRestaurant) {
this.menus.add(menuRestaurant);
if (!menuRestaurant.getMenuItems().contains(this)) {
menuRestaurant.getMenuItems().add(this);
}
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof MenuItemRestaurant)) return false;
MenuItemRestaurant that = (MenuItemRestaurant) o;
return Objects.equals(id, that.id) &&
Objects.equals(name, that.name) &&
Objects.equals(description, that.description) &&
Objects.equals(isSpicy, that.isSpicy) &&
Objects.equals(hasGluten, that.hasGluten) &&
Objects.equals(isAvailable, that.isAvailable) &&
Objects.equals(price, that.price) &&
courseType == that.courseType &&
Objects.equals(menus, that.menus);
}

@Override
public int hashCode() {
return Objects.hash(id, name, description, isSpicy, hasGluten, isAvailable, price, courseType, menus);
}

@Override
public String toString() {
return "MenuItemRestaurant{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", description='" + description + '\'' +
", isSpicy=" + isSpicy +
", hasGluten=" + hasGluten +
", isAvailable=" + isAvailable +
", price=" + price +
", courseType=" + courseType +
", menus=" + menus +
'}';
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
package dev.example.restaurantManager.model;

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

@Getter
@Setter
Expand All @@ -28,6 +26,45 @@ public class MenuRestaurant {
@ManyToMany(mappedBy = "menus", fetch = FetchType.LAZY)
private List<OrderRestaurant> orders = new ArrayList<>();

@JsonIgnore
@ManyToMany(fetch = FetchType.EAGER
, cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinTable(
name = "menu_item",
joinColumns = @JoinColumn(name = "menu_id"),
inverseJoinColumns = @JoinColumn(name = "menu_item_id"))
private List<MenuItemRestaurant> menuItems = new ArrayList<>();

public void addMenuItem(MenuItemRestaurant menuItemRestaurant) {
this.menuItems.add(menuItemRestaurant);
if (menuItemRestaurant.getMenus() == null) {
menuItemRestaurant.setMenus(new ArrayList<>());
}
if (!menuItemRestaurant.getMenus().contains(this)) {
menuItemRestaurant.getMenus().add(this);
}
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
MenuRestaurant that = (MenuRestaurant) o;
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) &&
Objects.equals(menuItems, that.menuItems);
}

@Override
public int hashCode() {
return Objects.hash(id, name, price, content, active, water, menuItems);
}


public MenuRestaurant(String id, String name, Double price, String content, boolean active, boolean water) {
this.id = id;
this.name = name;
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.MenuItemRestaurant;
import org.springframework.data.jpa.repository.JpaRepository;

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

import dev.example.restaurantManager.model.MenuItemRestaurant;

import java.util.List;

public interface MenuItemService {

List<MenuItemRestaurant> getAllItemMenus();
MenuItemRestaurant getItemMenuById(String id);
MenuItemRestaurant createItemMenu(MenuItemRestaurant menuItemRestaurant);
MenuItemRestaurant updateItemMenu(String id, MenuItemRestaurant menuItemRestaurant);
boolean deleteItemMenu(String id);
long countItemMenus();
}
Loading