diff --git a/Intro.md b/Intro.md new file mode 100644 index 0000000..7177d31 --- /dev/null +++ b/Intro.md @@ -0,0 +1,2 @@ +My project called Super Sushi demostrates the usage of OOP within Java. +by creating an ``Item Class`` with two interferes, menu and totalAmount diff --git a/README.md b/README.md index ff3d45d..c03b833 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ ## 🍣 Super Sushi: A Spring Boot REST API Project 🚀 -This project, **Super Sushi**, is a **Spring Boot** application written in **Java** that demonstrates the development of a **REST API**. Beyond the core application functionality, it serves as a practical example of **version control best practices**, showcasing a clear history of committed features, bug fixes, and subsequent refactoring. +This project, **Super Sushi**, is a **Spring Boot** application written in **Java** that demonstrates the development of a **REST API** and using **OOP**. Beyond the core application functionality, it serves as a practical example of **version control best practices**, showcasing a clear history of committed features, bug fixes, and subsequent refactoring. ----- @@ -9,7 +9,7 @@ This project, **Super Sushi**, is a **Spring Boot** application written in **Jav * **RESTful API Implementation:** Super Sushi establishes a functional REST API, with its specific endpoints and structure detailed within the project's subfolders. * **Version Control Demonstration:** The project's commit history is an intentional artifact, illustrating the cyclical process of **committing features, encountering/fixing bugs, and re-fixing/refactoring** the codebase for improved stability and clarity. * **Web Application Foundation:** The choice of a web application provides a tangible platform for interacting with the developed API. - +* **OOP:** Using polymorphisms, interfaces, abstract and extending keywords. ----- ### 🎨 User Interface Development Disclaimer @@ -24,21 +24,19 @@ The User Interface (UI) for this project was developed with assistance from an * ## UML -*(Insert your professional UML diagram image/link here.)* +![UML.png](UML.png) ----- ### 💻 Code Highlight: Dynamic Configuration The following code snippet demonstrates a mechanism for **dynamically adjusting frontend variables** by editing the base HTML file. This technique ensures the application's client-side presentation remains correctly configured with the server-side state. - ```java // For example: // File: src/main/java/com/SushiAPI/SushiAPI/controller/Receipt/ReceiptController.java @GetMapping("/receipt") - public String showReceipt(Model model, @RequestBody String receiptData) { +public String showReceipt(Model model, @RequestBody String receiptData) { JSONObject jsonObject = new JSONObject(receiptData); - StringBuilder htmlBuilder = new StringBuilder(); JSONArray jsonArray = jsonObject.getJSONArray("items"); @@ -61,4 +59,10 @@ The following code snippet demonstrates a mechanism for **dynamically adjusting ``` ----- +## 🌐 FrontEnd Images: Home page +![img_3.png](img_3.png) +----- +## 🧭 API ROUTES +This image demostrates finding an item based on name +![img_2.png](img_2.png) \ No newline at end of file diff --git a/UML.png b/UML.png new file mode 100644 index 0000000..592b44a Binary files /dev/null and b/UML.png differ diff --git a/files/menus/Appetizers.csv b/files/menus/Appetizers.csv index 1096435..94e5233 100644 --- a/files/menus/Appetizers.csv +++ b/files/menus/Appetizers.csv @@ -1,4 +1,5 @@ -name|price|description|hot -Edamame|3.95|steamed Japanese soy bean W/ salt|false -Harumaki (4pcs)|3.95|Deep-fried japanese spring rolls|true -Gyoza (6pcs)|3.95|Pan fried Japanese dumpling|true \ No newline at end of file +name|price|ingredients|hot|type +Edamame|3.95|steamed Japanese soy bean W/ salt|false|0 +Harumaki (4pcs)|3.95|Deep-fried japanese spring rolls|true|0 +Gyoza (6pcs)|3.95|Pan fried Japanese dumpling|true|0 +Sunomono|10|Vinegary salad, octopus or shimp|false|1 \ No newline at end of file diff --git a/files/menus/Drinks.csv b/files/menus/Drinks.csv index 26d2ea0..fd6558c 100644 --- a/files/menus/Drinks.csv +++ b/files/menus/Drinks.csv @@ -1,6 +1,7 @@ -name|price|qty|hot -Ramune Soda|2.95|5|false -Soda|2.95|5|false -Sparking Soda|2.95|5|false -Orange Juice|2.95|5|false -Apple Juice|2.95|5|false +name|price|size|hot|alcohol +Ramune Soda|3|5|false|false +Soda|2.95|12|false|false +Sparking Soda|3|5|false|false +Orange Juice|3|5|false|false +Apple Juice|3|5|false|false +Sake|3|5|false|true \ No newline at end of file diff --git a/files/menus/Nigiri.csv b/files/menus/Nigiri.csv new file mode 100644 index 0000000..18f54e4 --- /dev/null +++ b/files/menus/Nigiri.csv @@ -0,0 +1,11 @@ +name|price|SpiceLevel|ingredients|raw|extra +Salmon Nigiri|4.50|1|Salmon, Sushi Rice, Wasabi|TRUE|Soy Sauce +Tuna Nigiri|4.75|1|Tuna, Sushi Rice, Wasabi|TRUE|Soy Sauce +Eel Nigiri|5.00|2|Grilled Eel, Sushi Rice, Sweet Soy Sauce|FALSE|Eel Sauce +Shrimp Nigiri|4.25|1|Boiled Shrimp, Sushi Rice, Wasabi|FALSE|Lemon Slice +Octopus Nigiri|4.00|1|Octopus, Sushi Rice, Wasabi|FALSE|Ponzu Sauce +Yellowtail Nigiri|4.75|2|Yellowtail, Sushi Rice, Wasabi|TRUE|Scallions +Scallop Nigiri|5.25|1|Scallop, Sushi Rice, Wasabi|TRUE|Yuzu Sauce +Tamago Nigiri|3.50|0|Sweet Egg Omelet, Sushi Rice, Nori|FALSE|Sesame Seeds +Ikura Nigiri|5.50|1|Salmon Roe, Sushi Rice, Nori|TRUE|Cucumber Slice +Uni Nigiri|6.00|1|Sea Urchin, Sushi Rice, Wasabi|TRUE|Shiso Leaf diff --git a/files/menus/Rolls.csv b/files/menus/Rolls.csv index 119f429..95340bc 100644 --- a/files/menus/Rolls.csv +++ b/files/menus/Rolls.csv @@ -1,4 +1,5 @@ -name|price|available|ingredients|raw|extra -Crystal Roll|7|true|spicy scallop, crunchy, masago, tempura shrimp, asparagus, rolled in soy wrap, w/house special creamy sauce, eel sauce, bonito flake|true|null -Hulk Roll|7|true|salmon, yellowtail, jalapeno, topped w/yellowtail, avocado, wasabi tobiko, honey wasabi mayo|true|null -Fuji Roll|7|true|Spicy tuna, crunchy topped w/salmon, avocado, tobikko arare, spicy mayo|true|null \ No newline at end of file +name|price|SpiceLevel|ingredients|raw|extra +Crystal Roll|7|0|spicy scallop, crunchy, masago, tempura shrimp, asparagus, rolled in soy wrap, w/house special creamy sauce, eel sauce, bonito flake|true|null +Hulk Roll|7|0|salmon, yellowtail, jalapeno, topped w/yellowtail, avocado, wasabi tobiko, honey wasabi mayo|true|null +Fuji Roll|7|0|Spicy tuna, crunchy topped w/salmon, avocado, tobikko arare, spicy mayo|true|null +dragon ball roll|20.0|5|null|true|null \ No newline at end of file diff --git a/img_1.png b/img_1.png new file mode 100644 index 0000000..66d4736 Binary files /dev/null and b/img_1.png differ diff --git a/img_2.png b/img_2.png new file mode 100644 index 0000000..bb20d07 Binary files /dev/null and b/img_2.png differ diff --git a/img_3.png b/img_3.png new file mode 100644 index 0000000..a012845 Binary files /dev/null and b/img_3.png differ diff --git a/src/TODO b/src/TODO new file mode 100644 index 0000000..db0d61b --- /dev/null +++ b/src/TODO @@ -0,0 +1 @@ +work on receipt \ No newline at end of file diff --git a/src/main/java/com/SushiAPI/SushiAPI/SushiApiApplication.java b/src/main/java/com/SushiAPI/SushiAPI/SushiApiApplication.java index 8e70456..b34e7b9 100644 --- a/src/main/java/com/SushiAPI/SushiAPI/SushiApiApplication.java +++ b/src/main/java/com/SushiAPI/SushiAPI/SushiApiApplication.java @@ -5,9 +5,7 @@ @SpringBootApplication public class SushiApiApplication { - public static void start() { SpringApplication.run(SushiApiApplication.class); } - } diff --git a/src/main/java/com/SushiAPI/SushiAPI/controller/API/Cart/CartController.java b/src/main/java/com/SushiAPI/SushiAPI/controller/API/Cart/CartController.java index e08ed69..a302c07 100644 --- a/src/main/java/com/SushiAPI/SushiAPI/controller/API/Cart/CartController.java +++ b/src/main/java/com/SushiAPI/SushiAPI/controller/API/Cart/CartController.java @@ -1,19 +1,17 @@ package com.SushiAPI.SushiAPI.controller.API.Cart; -import com.SushiAPI.SushiAPI.models.Item; -import com.SushiAPI.SushiAPI.models.appetizers.appetizers; -import com.SushiAPI.SushiAPI.models.drinks.Drink; -import com.SushiAPI.SushiAPI.models.extra.Extra; -import com.SushiAPI.SushiAPI.models.nigiri.nigiri; -import com.SushiAPI.SushiAPI.models.rolls.Roll; -import com.SushiAPI.SushiAPI.utils.CartService; -import com.SushiAPI.SushiAPI.utils.MenuServices; -import com.SushiAPI.SushiAPI.utils.utils; -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; + +import com.SushiAPI.SushiAPI.main; +import com.SushiAPI.SushiAPI.models.Appetizer.Seafoods; +import com.SushiAPI.SushiAPI.models.Appetizer.Traditional; +import com.SushiAPI.SushiAPI.models.Drinks.Alcohol; +import com.SushiAPI.SushiAPI.models.Drinks.Soda; +import com.SushiAPI.SushiAPI.models.MenuItem; +import com.SushiAPI.SushiAPI.models.Sushi.Nigiri; +import com.SushiAPI.SushiAPI.models.Sushi.Roll; +import com.SushiAPI.SushiAPI.utils.Services.CartService; import org.json.JSONArray; import org.json.JSONObject; -import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; @@ -21,62 +19,64 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; -import java.util.ArrayList; -import java.util.Collections; import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.IntStream; @RestController public class CartController { @GetMapping("/api/cart") - public ResponseEntity getMenu() { - return ResponseEntity.ok() - .contentType(MediaType.APPLICATION_JSON) - .body(CartService.allItemsAsJson().toString()); - - } + public ResponseEntity getMenu() { return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(CartService.AllItems().toString()); } @PostMapping("/api/cart/add") - public boolean addItem(@RequestBody String addItem) { + public ResponseEntity addItem(@RequestBody String addItem) { JSONObject jsonObject = new JSONObject(addItem); - Item item = null; - JSONArray extras = jsonObject.getJSONArray("extras"); - - if(jsonObject.getString("category").equalsIgnoreCase("roll")) { - item = new Roll(jsonObject.getString("name"), jsonObject.getDouble("price"), false, jsonObject.getBoolean("isHot"), jsonObject.getBoolean("isAppetizer"), jsonObject.getBoolean("isRaw"), null, extras); - } else if(jsonObject.getString("category").equalsIgnoreCase("drink")) { - item = new Drink(jsonObject.getString("name"), jsonObject.getDouble("price"), jsonObject.getBoolean("isHot"), jsonObject.getString("description")); - } else if (jsonObject.getString("category").equalsIgnoreCase("nigiri")) { - item = new nigiri(jsonObject.getString("name"), jsonObject.getDouble("price"), false, jsonObject.getBoolean("isHot"), jsonObject.getBoolean("isAppetizer"), jsonObject.getBoolean("isRaw"), null, extras); - } else if (jsonObject.getString("category").equalsIgnoreCase("appetizer")) { - item = new appetizers(jsonObject.getString("name"), jsonObject.getDouble("price"), false, jsonObject.getBoolean("isHot"), true, jsonObject.getBoolean("isRaw"), null, extras); + MenuItem result = CartService.findItemByName(jsonObject.getString("name").strip()); + if(result != null) { + if(!extras.isEmpty()) { + List extrasList = IntStream.range(0, extras.length()).mapToObj(extras::getString).toList(); + if(result.getCategory().equalsIgnoreCase("soda")) { + result = new Soda(result.getName(), result.getPrice(), result.getCold(), result.isAlcohol(), result.getIngredients(), extrasList); + } else if(result.getCategory().equalsIgnoreCase("Alcohol")) { + result = new Alcohol(result.getName(), result.getPrice(), result.getCold(), result.isAlcohol(), result.getIngredients(), extrasList); + } else if(result.getCategory().equalsIgnoreCase("Seafood Appetizer")) { + result = new Seafoods(result.getName(), result.getPrice(), result.getSpiceLevel(), result.getIngredients(), extrasList); + } else if(result.getCategory().equalsIgnoreCase("Traditional Appetizer")) { + result = new Traditional(result.getName(), result.getPrice(), result.getSpiceLevel(), result.getIngredients(), extrasList); + } else if(result.getCategory().equalsIgnoreCase("roll")) { + result = new Roll(result.getName(), result.getPrice(), result.getSpiceLevel(), result.getIngredients(), extrasList); + } else if(result.getCategory().equalsIgnoreCase("nigiri")) { + result = new Nigiri(result.getName(), result.getPrice(), result.getSpiceLevel(), result.getIngredients(), extrasList); + } + } + main.Cart.add(result); + return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(result.toString()); } - CartService.addItem(item); - return true; + return ResponseEntity.badRequest().contentType(MediaType.APPLICATION_JSON).body("Can't find item"); } @PostMapping("/api/cart/remove") - public boolean removeItem(@RequestBody String removeItem) { + public ResponseEntity removeItem(@RequestBody String removeItem) { JSONObject jsonObject = new JSONObject(removeItem); - Item item = null; - if(jsonObject.getString("category").equalsIgnoreCase("roll")) { - JSONArray myExtras = new JSONArray(); - item = new Roll(jsonObject.getString("name"), jsonObject.getDouble("price"), false, jsonObject.getBoolean("isHot"), jsonObject.getBoolean("isAppetizer"), jsonObject.getBoolean("isRaw"), "Eel + avocado", myExtras); - } else if(jsonObject.getString("category").equalsIgnoreCase("drink")) { - item = new Drink(jsonObject.getString("name"), jsonObject.getDouble("price"), jsonObject.getBoolean("isHot"), jsonObject.getString("description")); - } else if (jsonObject.getString("category").equalsIgnoreCase("nigiri")) { - JSONArray myExtras = new JSONArray(); - item = new nigiri(jsonObject.getString("name"), jsonObject.getDouble("price"), false, jsonObject.getBoolean("isHot"), jsonObject.getBoolean("isAppetizer"), jsonObject.getBoolean("isRaw"), "Eel + avocado", myExtras); + MenuItem result = CartService.findItemByName(jsonObject.getString("name").strip()); + if(result != null) { + main.Cart.remove(result); + return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(result.toString()); } - CartService.removeItem(item); + return ResponseEntity.badRequest().contentType(MediaType.APPLICATION_JSON).body("Can't find item"); + } + + + @PostMapping("/api/cart/delete") + public boolean deleteAllItems() { + main.Cart.clear(); return true; } + @GetMapping("/api/cart/search") - public ResponseEntity> searchCart(@RequestBody String searchItem) { - JSONObject jsonObject = new JSONObject(searchItem); - List items = CartService.searchItems(jsonObject.getString("query")); - return new ResponseEntity>(items, HttpStatus.OK); + public void searchCart(@RequestBody String searchItem) { } } diff --git a/src/main/java/com/SushiAPI/SushiAPI/controller/API/Menu/MenuController.java b/src/main/java/com/SushiAPI/SushiAPI/controller/API/Menu/MenuController.java index 82e505a..2032e68 100644 --- a/src/main/java/com/SushiAPI/SushiAPI/controller/API/Menu/MenuController.java +++ b/src/main/java/com/SushiAPI/SushiAPI/controller/API/Menu/MenuController.java @@ -1,34 +1,84 @@ package com.SushiAPI.SushiAPI.controller.API.Menu; -import com.SushiAPI.SushiAPI.models.Item; -import com.SushiAPI.SushiAPI.utils.CartService; -import com.SushiAPI.SushiAPI.utils.MenuServices; +import com.SushiAPI.SushiAPI.main; +import com.SushiAPI.SushiAPI.models.Appetizer.Seafoods; +import com.SushiAPI.SushiAPI.models.Appetizer.Traditional; +import com.SushiAPI.SushiAPI.models.Drinks.Alcohol; +import com.SushiAPI.SushiAPI.models.Drinks.Soda; +import com.SushiAPI.SushiAPI.models.MenuItem; +import com.SushiAPI.SushiAPI.models.Sushi.Nigiri; +import com.SushiAPI.SushiAPI.models.Sushi.Roll; +import com.SushiAPI.SushiAPI.utils.Files; +import com.SushiAPI.SushiAPI.utils.Services.CartService; +import com.SushiAPI.SushiAPI.utils.Services.MenuService; import org.json.JSONArray; import org.json.JSONObject; import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; +import java.awt.*; import java.util.ArrayList; import java.util.HashMap; import java.util.List; -import java.util.Map; +import java.util.stream.IntStream; @RestController public class MenuController { @GetMapping("/api/menu") - public ResponseEntity>> getMenu() { - HashMap> items = MenuServices.getMenuItems(); - return new ResponseEntity>>(items, HttpStatus.OK); + public ResponseEntity>> getMenu() { + HashMap> items = MenuService.getMenuItems(); + return new ResponseEntity>>(items, HttpStatus.OK); } - @GetMapping("/api/menu/filter/") // api/menu/filter?search - public boolean searchItem(@RequestParam(required=true, defaultValue="") String searchQuery) { -// List items = MenuServices.getMenuItems(jsonObject.getString("query")); - return true; + public void searchItem(@RequestParam(required=true, defaultValue="") String searchQuery) { + return; + } + + @PostMapping("/api/menu/addItem") + public ResponseEntity addMenuItem(@RequestBody String addItem) { + JSONObject jsonObject = new JSONObject(addItem); + // grab body data + String itemType = jsonObject.getString("category"); + String[] itemIngredients = jsonObject.getString("ingredients").split(","); + String itemName = jsonObject.getString("name"); + double itemPrice = jsonObject.getDouble("price"); + int itemSpicy = jsonObject.getInt("spiceLevel"); + + MenuItem item = null; + String csvChoice = ""; + if(itemType.equalsIgnoreCase("traditional")) { + item = new Traditional(itemName, itemPrice, itemSpicy, null, null); + csvChoice = "Appetizers"; + } else if(itemType.equalsIgnoreCase("seafood")) { + item = new Seafoods(itemName, itemPrice, itemSpicy, null, null); + csvChoice = "Appetizers"; + } else if(itemType.equalsIgnoreCase("soda")) { + boolean itemAlcohol = jsonObject.getBoolean("isAlcohol"); + boolean itemCold = jsonObject.getBoolean("isCold"); + item = new Soda(itemName, itemPrice, itemCold, itemAlcohol, null, null); + csvChoice = "Drinks"; + + } else if(itemType.equalsIgnoreCase("alcohol")) { + boolean itemAlcohol = jsonObject.getBoolean("isAlcohol"); + boolean itemCold = jsonObject.getBoolean("isCold"); + item = new Alcohol(itemName, itemPrice, itemCold, itemAlcohol, null, null); + csvChoice = "Drinks"; + + } else if(itemType.equalsIgnoreCase("nigiri")) { + item = new Nigiri(itemName, itemPrice, itemSpicy, null, null); + csvChoice = "Nigiri"; + } else if(itemType.equalsIgnoreCase("roll")) { + item = new Roll(itemName, itemPrice, itemSpicy, null, null); + csvChoice = "Rolls"; + } + main.items.add(item); // add to menu + Files.writeFile("files/menus/" + csvChoice + ".csv", true, "\n" + item.toCsv()); + return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(item.toCsv() + "\n"); + } + + private static void extracted(String itemName, double itemPrice, int itemSpicy) { } } diff --git a/src/main/java/com/SushiAPI/SushiAPI/controller/API/Order/OrderController.java b/src/main/java/com/SushiAPI/SushiAPI/controller/API/Order/OrderController.java index 4e02e1d..af02fa1 100644 --- a/src/main/java/com/SushiAPI/SushiAPI/controller/API/Order/OrderController.java +++ b/src/main/java/com/SushiAPI/SushiAPI/controller/API/Order/OrderController.java @@ -1,27 +1,20 @@ package com.SushiAPI.SushiAPI.controller.API.Order; -import com.SushiAPI.SushiAPI.models.Item; -import com.SushiAPI.SushiAPI.utils.CartService; -import com.SushiAPI.SushiAPI.utils.MenuServices; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; +import com.SushiAPI.SushiAPI.utils.Services.CartService; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; -import java.util.List; - @RestController public class OrderController { - @PostMapping("/api/order/pay") - public ResponseEntity payOrder() { - boolean paidOrder = CartService.pay(); - return new ResponseEntity(paidOrder, HttpStatus.OK); + @PostMapping("/api/order/pay") // pay order + public boolean payOrder() { + return CartService.pay(); } - @GetMapping("/api/order/totalAmount") - public ResponseEntity totalAmountDue() { - return new ResponseEntity(CartService.totalAmount() - , HttpStatus.OK); + @GetMapping("/api/order/totalAmount") // ?tip=24 not required + public void totalAmountDue(@RequestParam(required = false, name = "tip") String tip) { + } } diff --git a/src/main/java/com/SushiAPI/SushiAPI/controller/API/Receipt/ReceiptController.java b/src/main/java/com/SushiAPI/SushiAPI/controller/API/Receipt/ReceiptController.java index cac160b..a852b85 100644 --- a/src/main/java/com/SushiAPI/SushiAPI/controller/API/Receipt/ReceiptController.java +++ b/src/main/java/com/SushiAPI/SushiAPI/controller/API/Receipt/ReceiptController.java @@ -1,22 +1,12 @@ package com.SushiAPI.SushiAPI.controller.API.Receipt; -import com.SushiAPI.SushiAPI.models.Item; -import com.SushiAPI.SushiAPI.utils.CartService; -import com.SushiAPI.SushiAPI.utils.ReceiptService; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; -import java.util.ArrayList; -import java.util.HashMap; - @RestController public class ReceiptController { @GetMapping("/api/receipt/generate") - public ResponseEntity>> generateReceipt() { - ArrayList> paidOrder = ReceiptService.generateReceipt(); - return new ResponseEntity>>(paidOrder, HttpStatus.OK); + public void generateReceipt() { + return; } } diff --git a/src/main/java/com/SushiAPI/SushiAPI/controller/screens/Menu/mainScreen.java b/src/main/java/com/SushiAPI/SushiAPI/controller/screens/Menu/mainScreen.java index ba7f29b..12d0587 100644 --- a/src/main/java/com/SushiAPI/SushiAPI/controller/screens/Menu/mainScreen.java +++ b/src/main/java/com/SushiAPI/SushiAPI/controller/screens/Menu/mainScreen.java @@ -8,7 +8,6 @@ import org.springframework.web.bind.annotation.RequestBody; @Controller - public class mainScreen { @GetMapping("/") public String ShowIndex(Model model) { diff --git a/src/main/java/com/SushiAPI/SushiAPI/controller/screens/Receipt/ReceiptScreen.java b/src/main/java/com/SushiAPI/SushiAPI/controller/screens/Receipt/ReceiptScreen.java index 6a76c94..b6ae6e9 100644 --- a/src/main/java/com/SushiAPI/SushiAPI/controller/screens/Receipt/ReceiptScreen.java +++ b/src/main/java/com/SushiAPI/SushiAPI/controller/screens/Receipt/ReceiptScreen.java @@ -1,24 +1,13 @@ package com.SushiAPI.SushiAPI.controller.screens.Receipt; -import com.SushiAPI.SushiAPI.main; -import com.SushiAPI.SushiAPI.models.Item; -import com.SushiAPI.SushiAPI.models.appetizers.appetizers; -import com.SushiAPI.SushiAPI.models.drinks.Drink; -import com.SushiAPI.SushiAPI.models.extra.Extra; -import com.SushiAPI.SushiAPI.models.nigiri.nigiri; -import com.SushiAPI.SushiAPI.models.rolls.Roll; -import com.google.gson.JsonArray; import org.json.JSONArray; import org.json.JSONObject; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; -import java.util.List; - @Controller public class ReceiptScreen { @GetMapping("/receipt") diff --git a/src/main/java/com/SushiAPI/SushiAPI/main.java b/src/main/java/com/SushiAPI/SushiAPI/main.java index 5dccc96..13d99e4 100644 --- a/src/main/java/com/SushiAPI/SushiAPI/main.java +++ b/src/main/java/com/SushiAPI/SushiAPI/main.java @@ -1,25 +1,24 @@ package com.SushiAPI.SushiAPI; -import com.SushiAPI.SushiAPI.models.Item; +import com.SushiAPI.SushiAPI.models.MenuItem; import com.SushiAPI.SushiAPI.utils.menu; -import java.lang.reflect.Array; import java.util.ArrayList; public class main { - public static boolean init = false; - public static final ArrayList items = new ArrayList<>(); - public static final ArrayList Cart = new ArrayList<>(); - public static final ArrayList ReceiptItems = new ArrayList<>(); + public static boolean init = false; // Safety check; Make sures no duplicates. + public static final ArrayList items = new ArrayList<>(); // Load in active cache for Menu + public static final ArrayList Cart = new ArrayList<>(); // Load items from users cart using REST API + public static final ArrayList ReceiptItems = new ArrayList<>(); // Generate Receipt from CART - public static void initialize() { + public static void initialize() { // Loads CSV FILES if(!init) { menu.loadMenu(); } init = true; } - static void main() { - initialize(); - SushiApiApplication.start(); + static void main() { // Main Application + initialize(); // run Function + SushiApiApplication.start(); // Start Server } } diff --git a/src/main/java/com/SushiAPI/SushiAPI/models/Appetizer/Appetizer.java b/src/main/java/com/SushiAPI/SushiAPI/models/Appetizer/Appetizer.java new file mode 100644 index 0000000..7afa1c3 --- /dev/null +++ b/src/main/java/com/SushiAPI/SushiAPI/models/Appetizer/Appetizer.java @@ -0,0 +1,50 @@ +package com.SushiAPI.SushiAPI.models.Appetizer; + +import com.SushiAPI.SushiAPI.models.MenuItem; +import com.SushiAPI.SushiAPI.models.item; + +import java.util.ArrayList; +import java.util.List; + +public abstract class Appetizer extends item implements MenuItem { + private String name; + private double price; + private int spiceLevel; + private List ingredients = new ArrayList<>(); + private List extras = new ArrayList<>(); + private String category; + + public Appetizer(String name, double price, int spiceLevel, String category, List ingredients, List extras) { + this.name = name; + this.price = price; + this.spiceLevel = spiceLevel; + this.category = category; + this.ingredients = ingredients; + this.extras = extras; + } + + @Override public String getName() { return this.name; } + @Override public List getIngredients() { return this.ingredients;} + @Override public double getPrice() { return this.price; } + @Override public int getSpiceLevel() { return this.spiceLevel; } + @Override public List getExtras() { return this.extras; } + @Override public boolean isDrink() {return false;} + + @Override + public String toString() { + return "Appetizer{" + + "name='" + name + '\'' + + ", price=" + price + + ", spiceLevel=" + spiceLevel + + ", ingredients=" + ingredients + + ", extras=" + extras + + ", category='" + category + '\'' + + '}'; + } + + @Override + public String toCsv() { + boolean spicy = spiceLevel > 0; + return name + "|" + price + "|" + ingredients + "|" + spicy + "|" + 1 ; + } +} diff --git a/src/main/java/com/SushiAPI/SushiAPI/models/Appetizer/Seafoods.java b/src/main/java/com/SushiAPI/SushiAPI/models/Appetizer/Seafoods.java new file mode 100644 index 0000000..3ca3e0e --- /dev/null +++ b/src/main/java/com/SushiAPI/SushiAPI/models/Appetizer/Seafoods.java @@ -0,0 +1,64 @@ +package com.SushiAPI.SushiAPI.models.Appetizer; + +import java.util.List; + +public class Seafoods extends Appetizer{ + private String name; + private double price; + private List ingredients; + private List extras; + + public Seafoods(String name, double price, int spiceLevel, List ingredients, List extras) { + super(name + " Seafood Appetizer", price, spiceLevel, "Appetizer", ingredients, extras); + this.name = name; + this.price = price; + this.ingredients = ingredients; + this.extras = extras; + } + + public List getExtras() { + return extras; + } + + @Override + public String getName() { + return name; + } + + @Override + public List getIngredients() { + return ingredients; + } + + @Override + public double getPrice() { + return price; + } + + @Override + public String getCategory() { + return "Seafood Appetizer"; + } + + @Override + public boolean getCold() { + return false; + } + + @Override + public boolean isAlcohol() { + return false; + } + + + + @Override + public String toString() { + return "Seafoods{" + + "name='" + name + '\'' + + ", price=" + price + + ", ingredients=" + ingredients + + ", extras=" + extras + + '}'; + } +} diff --git a/src/main/java/com/SushiAPI/SushiAPI/models/Appetizer/Traditional.java b/src/main/java/com/SushiAPI/SushiAPI/models/Appetizer/Traditional.java new file mode 100644 index 0000000..fefbe18 --- /dev/null +++ b/src/main/java/com/SushiAPI/SushiAPI/models/Appetizer/Traditional.java @@ -0,0 +1,63 @@ +package com.SushiAPI.SushiAPI.models.Appetizer; + +import java.util.List; + +public class Traditional extends Appetizer{ + private String name; + private double price; + private List ingredients; + private List extras; + public Traditional(String name, double price, int spiceLevel, List ingredients, List extras) { + super(name + " Traditional Appetizer", price, spiceLevel, "Appetizer", ingredients, extras); + this.name = name; + this.price = price; + this.ingredients = ingredients; + this.extras = extras; + } + + public List getExtras() { + return extras; + } + + @Override + public String getName() { + return name; + } + + @Override + public List getIngredients() { + return ingredients; + } + + @Override + public double getPrice() { + return price; + } + + @Override + public String getCategory() { + return "Traditional Appetizer"; + } + + @Override + public boolean getCold() { + return false; + } + + @Override + public boolean isAlcohol() { + return false; + } + + + + @Override + public String toString() { + return "Traditional{" + + "name='" + name + '\'' + + ", price=" + price + + ", ingredients=" + ingredients + + ", extras=" + extras + + '}'; + } +} diff --git a/src/main/java/com/SushiAPI/SushiAPI/models/Drinks/Alcohol.java b/src/main/java/com/SushiAPI/SushiAPI/models/Drinks/Alcohol.java new file mode 100644 index 0000000..91257e6 --- /dev/null +++ b/src/main/java/com/SushiAPI/SushiAPI/models/Drinks/Alcohol.java @@ -0,0 +1,67 @@ +package com.SushiAPI.SushiAPI.models.Drinks; + +import java.util.List; + +public class Alcohol extends Drinks{ + private String name; + private double price; + private List ingredients; + private List extras; + public Alcohol(String name, double price, boolean isCold, boolean isAlcohol, List ingredients, List extras) { + super(name + " Alcohol", price, isCold, true, "Alcohol", ingredients, extras); + this.name = name; + this.price = price; + this.ingredients = ingredients; + this.extras = extras; + } + + @Override + public int getSpiceLevel() { + return 0; + } + + @Override + public String getCategory() { + return "Alcohol"; + } + + public List getExtras() { + return extras; + } + + @Override + public String getName() { + return name; + } + + @Override + public List getIngredients() { + return ingredients; + } + + @Override + public double getPrice() { + return price; + } + + @Override + public boolean getCold() { + return false; + } + + @Override + public boolean isAlcohol() { + return false; + } + + + @Override + public String toString() { + return "Alcohol{" + + "name='" + name + '\'' + + ", price=" + price + + ", ingredients=" + ingredients + + ", extras=" + extras + + '}'; + } +} diff --git a/src/main/java/com/SushiAPI/SushiAPI/models/Drinks/Drinks.java b/src/main/java/com/SushiAPI/SushiAPI/models/Drinks/Drinks.java new file mode 100644 index 0000000..52a6396 --- /dev/null +++ b/src/main/java/com/SushiAPI/SushiAPI/models/Drinks/Drinks.java @@ -0,0 +1,61 @@ +package com.SushiAPI.SushiAPI.models.Drinks; + +import com.SushiAPI.SushiAPI.models.MenuItem; +import com.SushiAPI.SushiAPI.models.item; + +import java.util.ArrayList; +import java.util.List; + +public abstract class Drinks extends item implements MenuItem { + private String name; + private double price; + private boolean isCold; + private List ingredients = new ArrayList<>(); + private List extras = new ArrayList<>(); + private String category; + private boolean isAlcohol; + + public Drinks(String name, double price, boolean isCold, boolean isAlcohol, String category, List ingredients, List extras) { + this.name = name; + this.price = price; + this.isCold = isCold; + this.category = category; + this.ingredients = ingredients; + this.extras = extras; + this.isAlcohol = isAlcohol; + } + + @Override public String getName() { return this.name; } + @Override public List getIngredients() { return this.ingredients;} + @Override public double getPrice() { return this.price; } + @Override public boolean getCold() { return this.isCold; } + @Override public List getExtras() { return this.extras; } + @Override public boolean isDrink() {return true;} + @Override + public boolean isAlcohol() { + return isAlcohol; + } + + @Override + public String toString() { + return "Drinks{" + + "name='" + name + '\'' + + ", price=" + price + + ", isCold=" + isCold + + ", ingredients=" + ingredients + + ", extras=" + extras + + ", category='" + category + '\'' + + ", isAlcohol=" + isAlcohol + + '}'; + } + + @Override + public String toCsv() { +// name|price|size|hot|alcohol + if(isCold) { + return name + "|" + price + "|" + 14 + "|" + isCold + "|" + isAlcohol; + + } + return name + "|" + price + "|" + 14 + "|" + isCold + "|" + isAlcohol; + } +} diff --git a/src/main/java/com/SushiAPI/SushiAPI/models/Drinks/Soda.java b/src/main/java/com/SushiAPI/SushiAPI/models/Drinks/Soda.java new file mode 100644 index 0000000..2da16aa --- /dev/null +++ b/src/main/java/com/SushiAPI/SushiAPI/models/Drinks/Soda.java @@ -0,0 +1,68 @@ +package com.SushiAPI.SushiAPI.models.Drinks; + +import java.util.List; + +public class Soda extends Drinks{ + private String name; + private double price; + private List ingredients; + private List extras; + public Soda(String name, double price, boolean isCold, boolean isAlcohol, List ingredients, List extras) { + super(name + " Soda", price, isCold, false, "Soda", ingredients, extras); + this.name = name; + this.price = price; + this.ingredients = ingredients; + this.extras = extras; + } + + @Override + public int getSpiceLevel() { + return 0; + } + + @Override + public String getCategory() { + return "Soda"; + } + + public List getExtras() { + return extras; + } + + @Override + public String getName() { + return name; + } + + @Override + public List getIngredients() { + return ingredients; + } + + @Override + public double getPrice() { + return price; + } + + @Override + public boolean getCold() { + return false; + } + + @Override + public boolean isAlcohol() { + return false; + } + + + + @Override + public String toString() { + return "Soda{" + + "name='" + name + '\'' + + ", price=" + price + + ", ingredients=" + ingredients + + ", extras=" + extras + + '}'; + } +} diff --git a/src/main/java/com/SushiAPI/SushiAPI/models/Item.java b/src/main/java/com/SushiAPI/SushiAPI/models/Item.java deleted file mode 100644 index af8c53e..0000000 --- a/src/main/java/com/SushiAPI/SushiAPI/models/Item.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.SushiAPI.SushiAPI.models; - -import com.SushiAPI.SushiAPI.models.extra.Extra; -import com.google.gson.JsonArray; -import org.json.JSONArray; - -import java.util.ArrayList; -import java.util.List; - -public abstract class Item { - protected String name; - private double price; - private boolean isDrink; - private boolean isHot; - private boolean isAppetizer; - private boolean isRaw; - private int id; -// private List extras; // allows users to add extra spicy mayo, side of white rice, gluten-free soysauce - private JSONArray extras; - // Constructor - protected Item(String name, double price, boolean isDrink, boolean isHot, boolean isAppetizer, boolean isRaw) { - this.name = name; - this.price = price; - this.isDrink = isDrink; - this.isHot = isHot; - this.isAppetizer = isAppetizer; - this.isRaw = isRaw; - } - - public Item(String name, double price, boolean isDrink, boolean isHot, boolean isAppetizer, boolean isRaw, JSONArray extras) { - this(name, price, isDrink, isHot, isAppetizer, isRaw); - this.extras = extras; - } - - // shared - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public double getPrice() { - return price; - } - - public void setPrice(double price) { - this.price = price; - } - - public JSONArray getExtras() { - return extras; - } - - public void setExtras(JSONArray extras) {this.extras = extras;} - - public int getId() { - return id; - } - - public void setId(int id) { - this.id = id; - } - - // - public abstract String getCategory(); -} diff --git a/src/main/java/com/SushiAPI/SushiAPI/models/MenuItem.java b/src/main/java/com/SushiAPI/SushiAPI/models/MenuItem.java new file mode 100644 index 0000000..db07bce --- /dev/null +++ b/src/main/java/com/SushiAPI/SushiAPI/models/MenuItem.java @@ -0,0 +1,21 @@ +package com.SushiAPI.SushiAPI.models; + +import java.util.List; +import java.util.Arrays; +import java.util.Collections; + +public interface MenuItem { + String getName(); + String getCategory(); + List getIngredients(); + + double getPrice(); + int getSpiceLevel(); + List getExtras(); + boolean isDrink(); + boolean getCold(); + boolean isAlcohol(); + void setId(int id); + int getId(); + String toCsv(); +} diff --git a/src/main/java/com/SushiAPI/SushiAPI/models/Receipt/Receipt.java b/src/main/java/com/SushiAPI/SushiAPI/models/Receipt/Receipt.java deleted file mode 100644 index a4eb0b3..0000000 --- a/src/main/java/com/SushiAPI/SushiAPI/models/Receipt/Receipt.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.SushiAPI.SushiAPI.models.Receipt; - -import java.time.LocalDate; -import java.util.ArrayList; - -public abstract class Receipt { - private LocalDate localDate; - private double totalAmount; - private double tax; - private ArrayList items = new ArrayList<>(); - - // Consturcotor - - public Receipt(LocalDate localDate, double totalAmount, double tax, ArrayList items) { - this.localDate = localDate; - this.totalAmount = totalAmount; - this.tax = tax; - this.items = items; - } -} diff --git a/src/main/java/com/SushiAPI/SushiAPI/models/Receipt/item.java b/src/main/java/com/SushiAPI/SushiAPI/models/Receipt/item.java deleted file mode 100644 index ce4f42a..0000000 --- a/src/main/java/com/SushiAPI/SushiAPI/models/Receipt/item.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.SushiAPI.SushiAPI.models.Receipt; - -import java.time.LocalDate; -import java.util.ArrayList; - -public class item extends Receipt { - private String itemName; - private double itemPrice; - private String itemDescription; - - public item(LocalDate localDate, double totalAmount, double tax, ArrayList items, String itemName, double itemPrice, String itemDescription) { - super(localDate, totalAmount, tax, items); - this.itemName = itemName; - this.itemPrice = itemPrice; - this.itemDescription = itemDescription; - } -} diff --git a/src/main/java/com/SushiAPI/SushiAPI/models/Sushi/Nigiri.java b/src/main/java/com/SushiAPI/SushiAPI/models/Sushi/Nigiri.java new file mode 100644 index 0000000..1c2695b --- /dev/null +++ b/src/main/java/com/SushiAPI/SushiAPI/models/Sushi/Nigiri.java @@ -0,0 +1,64 @@ +package com.SushiAPI.SushiAPI.models.Sushi; + +import java.util.List; + +public class Nigiri extends Sushi{ + private String name; + private double price; + private List ingredients; + private List extras; + public Nigiri(String name, double price, int spiceLevel, List ingredients, List extras) { + super(name + " Nigiri", price, spiceLevel, "Nigiri", ingredients, extras); + this.name = name; + this.price = price; + this.ingredients = ingredients; + this.extras = extras; + } + + public List getExtras() { + return extras; + } + + @Override + public String getName() { + return name; + } + + @Override + public List getIngredients() { + return ingredients; + } + + @Override + public double getPrice() { + return price; + } + + @Override + public String getCategory() { + return "Nigiri"; + } + + @Override + public boolean getCold() { + return false; + } + + @Override + public boolean isAlcohol() { + return false; + } + + + @Override + public String toString() { + return "Nigiri{" + + "name='" + name + '\'' + + ", price=" + price + + ", ingredients=" + ingredients + + ", extras=" + extras + + '}'; + } + + +} diff --git a/src/main/java/com/SushiAPI/SushiAPI/models/Sushi/Roll.java b/src/main/java/com/SushiAPI/SushiAPI/models/Sushi/Roll.java new file mode 100644 index 0000000..338cfe9 --- /dev/null +++ b/src/main/java/com/SushiAPI/SushiAPI/models/Sushi/Roll.java @@ -0,0 +1,55 @@ +package com.SushiAPI.SushiAPI.models.Sushi; + +import java.util.List; + +public class Roll extends Sushi{ + private String name; + private double price; + private List ingredients; + private List extras; + public Roll(String name, double price, int spiceLevel, List ingredients, List extras) { + super(name + " roll", price, spiceLevel, "roll", ingredients, extras); + this.name = name; + this.price = price; + this.ingredients = ingredients; + this.extras = extras; + } + + public List getExtras() { + return extras; + } + + @Override + public double getPrice() { + return price; + } + + @Override + public String getCategory() { + return "roll"; + } + + @Override + public boolean getCold() { + return false; + } + + @Override + public boolean isAlcohol() { + return false; + } + + + @Override + public String toString() { + return "Roll{" + + "name='" + name + '\'' + + ", price=" + price + + ", ingredients=" + ingredients + + ", extras=" + extras + + '}'; + } + + + +} diff --git a/src/main/java/com/SushiAPI/SushiAPI/models/Sushi/Sushi.java b/src/main/java/com/SushiAPI/SushiAPI/models/Sushi/Sushi.java new file mode 100644 index 0000000..ff17120 --- /dev/null +++ b/src/main/java/com/SushiAPI/SushiAPI/models/Sushi/Sushi.java @@ -0,0 +1,53 @@ +package com.SushiAPI.SushiAPI.models.Sushi; + +import com.SushiAPI.SushiAPI.models.MenuItem; +import com.SushiAPI.SushiAPI.models.item; + +import java.util.ArrayList; +import java.util.List; + +public abstract class Sushi extends item implements MenuItem { + private String name; + private double price; + private int spiceLevel; + private List ingredients = new ArrayList<>(); + private List extras = new ArrayList<>(); + private String category; + + public Sushi(String name, double price, int spiceLevel, String category, List ingredients, List extras) { + this.name = name; + this.price = price; + this.spiceLevel = spiceLevel; + this.category = category; + this.ingredients = ingredients; + this.extras = extras; + } + + @Override public String getName() { return this.name; } + @Override public List getIngredients() { return this.ingredients;} + @Override public double getPrice() { return this.price; } + @Override public int getSpiceLevel() { return this.spiceLevel; } + @Override public List getExtras() { return this.extras; } + @Override public boolean isDrink() {return false;} + + @Override + public String toString() { + return "Sushi{" + + "name='" + name + '\'' + + ", price=" + price + + ", spiceLevel=" + spiceLevel + + ", ingredients=" + ingredients + + ", extras=" + extras + + ", category='" + category + '\'' + + '}'; + } + + @Override + public String toCsv() { +// name|price|SpiceLevel|ingredients|raw|extra + // name|price|SpiceLevel|ingredients|raw|extra + return name + "|" + price + "|" + spiceLevel + "|" + ingredients + "|" + true + "|" + extras; + } + + +} diff --git a/src/main/java/com/SushiAPI/SushiAPI/models/appetizers/appetizers.java b/src/main/java/com/SushiAPI/SushiAPI/models/appetizers/appetizers.java deleted file mode 100644 index d82f00d..0000000 --- a/src/main/java/com/SushiAPI/SushiAPI/models/appetizers/appetizers.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.SushiAPI.SushiAPI.models.appetizers; - -import com.SushiAPI.SushiAPI.models.Item; -import com.SushiAPI.SushiAPI.models.extra.Extra; -import org.json.JSONArray; - -import java.util.List; - -public class appetizers extends Item { - private String description; - - public appetizers(String name, double price, boolean isDrink, boolean isHot, boolean isAppetizer, boolean isRaw, String description, JSONArray extras) { - super(name, price, isDrink, isHot, isAppetizer, isRaw, extras); - this.description = description; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - @Override - public String getCategory() { - return "Appetizer"; - } -} diff --git a/src/main/java/com/SushiAPI/SushiAPI/models/drinks/Drink.java b/src/main/java/com/SushiAPI/SushiAPI/models/drinks/Drink.java deleted file mode 100644 index 721445a..0000000 --- a/src/main/java/com/SushiAPI/SushiAPI/models/drinks/Drink.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.SushiAPI.SushiAPI.models.drinks; - -import com.SushiAPI.SushiAPI.models.Item; - -public class Drink extends Item { - private String description; - - public Drink(String name, double price, boolean isHot, String description) { - super(name, price, true, isHot, false, false); - this.description = description; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - - @Override - public String getCategory() { - return "Drink"; - } -} \ No newline at end of file diff --git a/src/main/java/com/SushiAPI/SushiAPI/models/extra/Extra.java b/src/main/java/com/SushiAPI/SushiAPI/models/extra/Extra.java deleted file mode 100644 index f902867..0000000 --- a/src/main/java/com/SushiAPI/SushiAPI/models/extra/Extra.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.SushiAPI.SushiAPI.models.extra; - -import com.SushiAPI.SushiAPI.models.Item; -import com.google.gson.JsonArray; - -import java.util.ArrayList; -import java.util.List; - -public class Extra{ - - private String name; - - public Extra( String name) { -// if(!VALID_CHOICES.contains(name.toLowerCase())) { -// throw new IllegalArgumentException("Invalid Extra" + name); -// } - this.name = name.toLowerCase(); - } - - public String getName() { - return name; - } - - public void setName(String name) { -// if(!VALID_CHOICES.contains(name.toLowerCase())) { -// throw new IllegalArgumentException("Invalid Extra" + name); -// } - this.name = name.toLowerCase(); - } - - // - @Override - public String toString() { - return "Extra{" + - "name='" + name + '\'' + - '}'; - } -} diff --git a/src/main/java/com/SushiAPI/SushiAPI/models/item.java b/src/main/java/com/SushiAPI/SushiAPI/models/item.java new file mode 100644 index 0000000..7572f93 --- /dev/null +++ b/src/main/java/com/SushiAPI/SushiAPI/models/item.java @@ -0,0 +1,127 @@ +package com.SushiAPI.SushiAPI.models; + +import java.util.List; + +public class item implements MenuItem{ + private String name; + private double price; + private int spiceLevel; + private List ingredients; + private List extras; + private String category; + private boolean alcohol; + private int id; + private boolean cold; + private boolean drink; + + public item() {} + + public item(String name, double price, String category, int id) { + this.name = name; + this.price = price; + this.category =category; + this.id = id; + } + // getters + + + @Override + public String getName() { + return name; + } + + @Override + public double getPrice() { + return price; + } + + @Override + public int getSpiceLevel() { + return spiceLevel; + } + + @Override + public List getIngredients() { + return ingredients; + } + + @Override + public List getExtras() { + return extras; + } + + @Override + public String getCategory() { + return category; + } + + @Override + public boolean isAlcohol() { + return alcohol; + } + + @Override + public int getId() { + return id; + } + @Override + public boolean getCold() { + return cold; + } + + @Override + public boolean isDrink() { + return drink; + } + + // setters + + public void setName(String name) { + this.name = name; + } + + public void setPrice(double price) { + this.price = price; + } + + public void setSpiceLevel(int spiceLevel) { + this.spiceLevel = spiceLevel; + } + + public void setIngredients(List ingredients) { + this.ingredients = ingredients; + } + + public void setExtras(List extras) { + this.extras = extras; + } + + public void setCategory(String category) { + this.category = category; + } + + public void setAlcohol(boolean alcohol) { + this.alcohol = alcohol; + } + + @Override + public void setId(int id) { + this.id = id; + } + + public void setCold(boolean cold) { + this.cold = cold; + } + + public void setDrink(boolean drink) { + this.drink = drink; + } + + + @Override + public String toCsv() { +// name|price|SpiceLevel|ingredients|raw|extra + // name|price|SpiceLevel|ingredients|raw|extra + return name + "|" + price + "|" + spiceLevel + ingredients + "|" + true + "|" + extras; + } +} diff --git a/src/main/java/com/SushiAPI/SushiAPI/models/menu.java b/src/main/java/com/SushiAPI/SushiAPI/models/menu.java deleted file mode 100644 index dca6f65..0000000 --- a/src/main/java/com/SushiAPI/SushiAPI/models/menu.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.SushiAPI.SushiAPI.models; - -import java.util.ArrayList; - -public interface menu { - ArrayList filter(String keyword); -} diff --git a/src/main/java/com/SushiAPI/SushiAPI/models/nigiri/nigiri.java b/src/main/java/com/SushiAPI/SushiAPI/models/nigiri/nigiri.java deleted file mode 100644 index 5402b72..0000000 --- a/src/main/java/com/SushiAPI/SushiAPI/models/nigiri/nigiri.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.SushiAPI.SushiAPI.models.nigiri; - -import com.SushiAPI.SushiAPI.models.Item; -import com.SushiAPI.SushiAPI.models.extra.Extra; -import org.json.JSONArray; - -import java.util.List; - -public class nigiri extends Item { - private String description; - - public nigiri(String name, double price, boolean isDrink, boolean isHot, boolean isAppetizer, boolean isRaw, String description, JSONArray extras) { - super(name, price, isDrink, isHot, isAppetizer, isRaw, extras); - this.description = description; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - @Override - public String getCategory() { - return "nigiri"; - } -} diff --git a/src/main/java/com/SushiAPI/SushiAPI/models/rolls/Roll.java b/src/main/java/com/SushiAPI/SushiAPI/models/rolls/Roll.java deleted file mode 100644 index 38ec3c3..0000000 --- a/src/main/java/com/SushiAPI/SushiAPI/models/rolls/Roll.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.SushiAPI.SushiAPI.models.rolls; - -import com.SushiAPI.SushiAPI.models.Item; -import com.SushiAPI.SushiAPI.models.extra.Extra; -import org.json.JSONArray; - -import java.util.List; - -public class Roll extends Item { - private String description; - - public Roll(String name, double price, boolean isDrink, boolean isHot, boolean isAppetizer, boolean isRaw, String description, JSONArray extras) { - super(name, price, isDrink, isHot, isAppetizer, isRaw, extras); - this.description = description; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - @Override - public String getCategory() { - return "Roll"; - } -} diff --git a/src/main/java/com/SushiAPI/SushiAPI/models/totalAmount.java b/src/main/java/com/SushiAPI/SushiAPI/models/totalAmount.java deleted file mode 100644 index 209c3aa..0000000 --- a/src/main/java/com/SushiAPI/SushiAPI/models/totalAmount.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.SushiAPI.SushiAPI.models; - -@FunctionalInterface -public interface totalAmount { - int add(double total, double add); -} diff --git a/src/main/java/com/SushiAPI/SushiAPI/utils/CartService.java b/src/main/java/com/SushiAPI/SushiAPI/utils/CartService.java deleted file mode 100644 index 7985f10..0000000 --- a/src/main/java/com/SushiAPI/SushiAPI/utils/CartService.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.SushiAPI.SushiAPI.utils; - -import com.SushiAPI.SushiAPI.main; -import com.SushiAPI.SushiAPI.models.Item; -import com.SushiAPI.SushiAPI.models.extra.Extra; -import com.SushiAPI.SushiAPI.models.rolls.Roll; -import org.json.JSONArray; -import org.json.JSONObject; - -import java.util.ArrayList; - -public class CartService { - - public static void addItem(Item item) { - main.Cart.add(item); - } - - public static void removeItem(Item item) { - main.Cart.remove(item); - } - - public static JSONArray allItemsAsJson() { - JSONArray array = new JSONArray(); - - for (Item item : main.Cart) { - JSONObject obj = new JSONObject(); - obj.put("name", item.getName()); - obj.put("price", item.getPrice()); - - // Convert List extras to JSONArray - JSONArray extrasArray = new JSONArray(); - if (item.getExtras() != null) { - for (Object extra : item.getExtras()) { - extrasArray.put(extra); - } - } - obj.put("extras", extrasArray); - - array.put(obj); - } - - return array; - } - - - public static double totalAmount() { - double totalAmount = 0; - for (int i = 0; i < main.Cart.size(); i++) { - totalAmount += main.Cart.get(i).getPrice(); - } - return totalAmount; - } - - public double totalAmount(double tip) { - double totalAmount = 0; - for (int i = 0; i < main.Cart.size(); i++) { - totalAmount += main.Cart.get(i).getPrice(); - } - return totalAmount + tip; - } - - public static boolean pay() { - boolean anyFoodItems = false; - for (int i = 0; i < main.Cart.size(); i++) { - if(main.Cart.get(i).getCategory().toLowerCase() != "drink" || main.Cart.get(i).getCategory().toLowerCase() != "appetizer") { // if not a drink or appetizer - anyFoodItems = true; - } - } - - if(!anyFoodItems) return false; // no food items - - main.ReceiptItems.addAll(main.Cart); // add to paid items - ReceiptService.saveItems(); - main.Cart.clear(); // remove everything from cart - return true; - } - - public static ArrayList searchItems(String searchQuery) { - ArrayList resultList = new ArrayList<>(); - for (int i = 0; i < main.Cart.size(); i++) { - if(main.Cart.get(i).getName().contains(searchQuery)) { - resultList.add(main.Cart.get(i)); - } - } - return resultList; - } -} diff --git a/src/main/java/com/SushiAPI/SushiAPI/utils/Files.java b/src/main/java/com/SushiAPI/SushiAPI/utils/Files.java index ded188f..a634ee3 100644 --- a/src/main/java/com/SushiAPI/SushiAPI/utils/Files.java +++ b/src/main/java/com/SushiAPI/SushiAPI/utils/Files.java @@ -31,6 +31,15 @@ public static void writeFile(String path, boolean Append, StringBuilder content) } catch (IOException e) { throw new RuntimeException(e); } + } + + public static void writeFile(String path, boolean Append, String content) { + try (FileWriter writer = new FileWriter(path, Append)){ + writer.write(content); + writer.close(); + } catch (IOException e) { + throw new RuntimeException(e); + } } } diff --git a/src/main/java/com/SushiAPI/SushiAPI/utils/MenuServices.java b/src/main/java/com/SushiAPI/SushiAPI/utils/MenuServices.java deleted file mode 100644 index b2102b6..0000000 --- a/src/main/java/com/SushiAPI/SushiAPI/utils/MenuServices.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.SushiAPI.SushiAPI.utils; - -import com.SushiAPI.SushiAPI.main; -import com.SushiAPI.SushiAPI.models.Item; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -public class MenuServices implements com.SushiAPI.SushiAPI.models.menu { - - public static HashMap> getMenuItems() { - HashMap> menuItems = new HashMap<>(); - int index = 0; - for(Item item : main.items) { - String category = item.getCategory(); - if(!menuItems.containsKey(category)) { - menuItems.put(category, new ArrayList<>()); - } - item.setId(index); - index++; - menuItems.get(category).add(item); - } - return menuItems; - } - - public ArrayList getMenuItems(String filter) { - ArrayList filterItems = filter(filter); - return filterItems; - } - - - public ArrayList filter(String filter) { // drink, hot, raw, item name -// main.items.stream().filter(item -> { -// boolean drink = item.isDrink() == filter.equalsIgnoreCase("drink"); -// boolean raw = item.isRaw() == filter.equalsIgnoreCase("raw"); -// -// return drink; -// }).map(item -> { -// if(item.getName().equalsIgnoreCase(filter)) { -// return item; -// } -// return null; -// }); - - return new ArrayList<>(); - } - - -} diff --git a/src/main/java/com/SushiAPI/SushiAPI/utils/Services/CartService.java b/src/main/java/com/SushiAPI/SushiAPI/utils/Services/CartService.java new file mode 100644 index 0000000..bba090d --- /dev/null +++ b/src/main/java/com/SushiAPI/SushiAPI/utils/Services/CartService.java @@ -0,0 +1,72 @@ +package com.SushiAPI.SushiAPI.utils.Services; + +import com.SushiAPI.SushiAPI.main; +import com.SushiAPI.SushiAPI.models.MenuItem; +import com.SushiAPI.SushiAPI.models.Sushi.Roll; +import org.json.JSONArray; +import org.json.JSONObject; + +public class CartService { + public static MenuItem findItemByName(String name) { + return main.items.stream().filter(product -> product.getName().toLowerCase().startsWith(name.toLowerCase().strip())).findFirst().orElse(null); // filter though + } + public static void addItemByItem(MenuItem item) { + main.Cart.add(item); + } + + public static boolean removeItem(MenuItem item) { + if(main.Cart.contains(item)) { + main.Cart.remove(item); + return true; + } + return false; + } + + public static double totalAmount() { + double totalAmount = 0; + for (int i = 0; i < main.Cart.size(); i++) { + totalAmount += main.Cart.get(i).getPrice(); + } + return totalAmount; + } + + public static boolean pay() { + boolean anyFoodItems = false; + for (int i = 0; i < main.Cart.size(); i++) { + if(!main.Cart.get(i).getCategory().equalsIgnoreCase("drink") || !main.Cart.get(i).getCategory().equalsIgnoreCase("appetizer")) { // if not a drink or appetizer + anyFoodItems = true; + } + } + + if(!anyFoodItems) return false; + + main.ReceiptItems.addAll(main.Cart); // move to receipts; + // generate receipt here + ReceiptService.saveItems(); + main.Cart.clear(); + return true; + } + + public static JSONArray AllItems() { + JSONArray array = new JSONArray(); + for(MenuItem item : main.Cart) { + JSONObject obj = new JSONObject(); // create new Map style + obj.put("name", item.getName()); + obj.put("price", item.getPrice()); + obj.put("category", item.getCategory()); + obj.put("isCold", item.getCold()); + obj.put("SpiceLevel", item.getSpiceLevel()); + obj.put("Ingredients", item.getIngredients()); + + JSONArray extrasArray = new JSONArray(); + if (item.getExtras() != null) { + for (Object extra : item.getExtras()) { + extrasArray.put(extra); + } + } + obj.put("extras", extrasArray); + array.put(obj); + } + return array; + } +} diff --git a/src/main/java/com/SushiAPI/SushiAPI/utils/Services/MenuService.java b/src/main/java/com/SushiAPI/SushiAPI/utils/Services/MenuService.java new file mode 100644 index 0000000..75bd635 --- /dev/null +++ b/src/main/java/com/SushiAPI/SushiAPI/utils/Services/MenuService.java @@ -0,0 +1,25 @@ +package com.SushiAPI.SushiAPI.utils.Services; + +import com.SushiAPI.SushiAPI.main; +import com.SushiAPI.SushiAPI.models.MenuItem; +import com.SushiAPI.SushiAPI.utils.menu; + +import java.util.ArrayList; +import java.util.HashMap; + +public class MenuService { + public static HashMap> getMenuItems() { + HashMap> menuItems = new HashMap<>(); + int index = 0; + for(MenuItem item : main.items) { + String category = item.getCategory(); + if(!menuItems.containsKey(category)) { + menuItems.put(category, new ArrayList<>()); + } + item.setId(index); + index++; + menuItems.get(category).add(item); + } + return menuItems; + } +} diff --git a/src/main/java/com/SushiAPI/SushiAPI/utils/ReceiptService.java b/src/main/java/com/SushiAPI/SushiAPI/utils/Services/ReceiptService.java similarity index 52% rename from src/main/java/com/SushiAPI/SushiAPI/utils/ReceiptService.java rename to src/main/java/com/SushiAPI/SushiAPI/utils/Services/ReceiptService.java index 665d714..dee4249 100644 --- a/src/main/java/com/SushiAPI/SushiAPI/utils/ReceiptService.java +++ b/src/main/java/com/SushiAPI/SushiAPI/utils/Services/ReceiptService.java @@ -1,24 +1,19 @@ -package com.SushiAPI.SushiAPI.utils; +package com.SushiAPI.SushiAPI.utils.Services; import com.SushiAPI.SushiAPI.main; -import com.SushiAPI.SushiAPI.models.Item; +import com.SushiAPI.SushiAPI.models.Appetizer.Seafoods; +import com.SushiAPI.SushiAPI.models.Appetizer.Traditional; +import com.SushiAPI.SushiAPI.models.Drinks.Alcohol; +import com.SushiAPI.SushiAPI.models.Drinks.Soda; +import com.SushiAPI.SushiAPI.models.Sushi.Nigiri; +import com.SushiAPI.SushiAPI.models.Sushi.Roll; +import com.SushiAPI.SushiAPI.utils.Files; import java.text.SimpleDateFormat; -import java.util.ArrayList; import java.util.Date; -import java.util.HashMap; import java.util.concurrent.atomic.AtomicReference; public class ReceiptService { - public static ArrayList> generateReceipt() { - ArrayList> items = new ArrayList<>(); - main.ReceiptItems.forEach(item -> { - HashMap itemHashMap = new HashMap<>(); - itemHashMap.put("testing", item); - items.add(itemHashMap); - }); - return items; - } public static void saveItems() { Date now = new Date(); @@ -37,9 +32,9 @@ public static void saveItems() { stringBuilder.append("=========ORDER ITEMS================").append("\n"); main.ReceiptItems.forEach(item -> { stringBuilder.append(item.getName()).append("\t\t\t\t$").append(item.getPrice()).append("\n"); + stringBuilder.append("\t=>").append(String.join(", ", item.getExtras())).append("\t " ).append("\n"); Subtotal.updateAndGet(v -> new Double((double) (v + item.getPrice()))); }); - double originalNumber = Subtotal.get(); double amountToAdd = originalNumber * tax; double Paid = originalNumber + amountToAdd; @@ -47,15 +42,29 @@ public static void saveItems() { stringBuilder.append("Subtotal: $").append(Subtotal.get()).append("\n"); stringBuilder.append("tax: $").append(amountToAdd).append("\n"); stringBuilder.append("==========TOTAL====================").append("\n"); - stringBuilder.append("total: $").append(Paid).append("\n"); + stringBuilder.append("total: $").append(String.format("%.2f", Paid)).append("\n"); stringBuilder.append("============================").append("\n"); stringBuilder.append("Payment Method: ").append(paymentMethod).append("\n"); - stringBuilder.append("Paid: $").append(Paid).append("\n"); - + stringBuilder.append("Paid: $").append(String.format("%.2f", Paid)).append("\n"); + stringBuilder.append("--------------UNFORMATTED-------------------------").append("\n"); main.ReceiptItems.forEach(item -> { - System.out.println(item); + if(item instanceof Soda) { + stringBuilder.append("Soda: ").append(item.getName()).append(" - $").append(item.getPrice()).append("\n"); + } else if(item instanceof Alcohol) { + stringBuilder.append("Alcohol: ").append(item.getName()).append(" - $").append(item.getPrice()).append("\n"); + } else if(item instanceof Traditional) { + stringBuilder.append("Appetizer Traditional: ").append(item.getName()).append(" - $").append(item.getPrice()).append("\n"); + } else if(item instanceof Seafoods) { + stringBuilder.append("Sea Food Appetizer: ").append(item.getName()).append(" - $").append(item.getPrice()).append("\n"); + } else if(item instanceof Nigiri) { + stringBuilder.append("Nigiri: ").append(item.getName()).append(" - $").append(item.getPrice()).append("\n"); + } else if(item instanceof Roll) { + stringBuilder.append("Roll : ").append(item.getName()).append(" - $").append(item.getPrice()).append("\n"); + } }); - + stringBuilder.append("Subtotal: $").append(Subtotal.get()).append("\n"); + stringBuilder.append("tax: $").append(amountToAdd).append("\n"); + stringBuilder.append("total: $").append(Paid).append("\n"); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd-hhmmss"); String formattedDate = sdf.format(now); diff --git a/src/main/java/com/SushiAPI/SushiAPI/utils/menu.java b/src/main/java/com/SushiAPI/SushiAPI/utils/menu.java index 6007fbb..c772413 100644 --- a/src/main/java/com/SushiAPI/SushiAPI/utils/menu.java +++ b/src/main/java/com/SushiAPI/SushiAPI/utils/menu.java @@ -1,54 +1,115 @@ package com.SushiAPI.SushiAPI.utils; import com.SushiAPI.SushiAPI.main; -import com.SushiAPI.SushiAPI.models.Item; -import com.SushiAPI.SushiAPI.models.appetizers.appetizers; -import com.SushiAPI.SushiAPI.models.drinks.Drink; -import com.SushiAPI.SushiAPI.models.rolls.Roll; +import com.SushiAPI.SushiAPI.models.Appetizer.Seafoods; +import com.SushiAPI.SushiAPI.models.Appetizer.Traditional; +import com.SushiAPI.SushiAPI.models.Drinks.Alcohol; +import com.SushiAPI.SushiAPI.models.Drinks.Soda; +import com.SushiAPI.SushiAPI.models.Sushi.Nigiri; +import com.SushiAPI.SushiAPI.models.Sushi.Roll; + +import java.util.Arrays; import static com.SushiAPI.SushiAPI.utils.Files.readFile; public class menu { + // Load items from CSV to ArrayList public static void loadMenu() { StringBuilder resultDrinks = readFile("files/menus/Drinks.csv"); StringBuilder resultRolls = readFile("files/menus/Rolls.csv"); StringBuilder resultAppetizers = readFile("files/menus/Appetizers.csv"); + StringBuilder resultNigiri = readFile("files/menus/Nigiri.csv"); // load drinks + // name|price|size|hot|alcohol String resultDrinksString = resultDrinks.toString(); String[] drinkLines = resultDrinksString.split("\n"); for(String line : drinkLines) { - if(line.trim().isEmpty()) continue; - String[] fields = line.split("\\|"); - String name = fields[0].trim(); - double price = Double.parseDouble(fields[1].trim()); - int quantity = Integer.parseInt(fields[2].trim()); - boolean hot = Boolean.parseBoolean(fields[3].trim()); - main.items.add(new Drink(name, price, hot, "")); + String[] lineSplit = line.split("\\|"); // split data + // grab needed parameters + String drinkName = lineSplit[0]; + double drinkPrice = Double.parseDouble(lineSplit[1]); + int drinkSize = Integer.parseInt(lineSplit[2]); + boolean drinkIsHot = Boolean.parseBoolean(lineSplit[3]); + boolean drinkIsAlcohol = Boolean.parseBoolean(lineSplit[4]); + + if(drinkIsAlcohol) { // if alcohol + main.items.add(new Alcohol(drinkName, drinkPrice, drinkIsHot, drinkIsAlcohol, null, null)); + } else { + main.items.add(new Soda(drinkName, drinkPrice, drinkIsHot, drinkIsAlcohol, null, null)); + } } // load rolls - // name|price|available|ingredients|raw + // name|price|SpiceLevel|ingredients|raw|extra String resultRollsString = resultRolls.toString(); String[] RollsLines = resultRollsString.split("\n"); for(String line : RollsLines) { - if(line.trim().isEmpty()) continue; - String[] fields = line.split("\\|"); - String name = fields[0].trim(); - double price = Double.parseDouble(fields[1].trim()); - boolean raw = Boolean.parseBoolean(fields[4].trim()); - main.items.add(new Roll(name, price, false, false, false, raw, null, null)); + String[] lineSplit = line.split("\\|"); // split data + // grab needed parameters + String rollName = lineSplit[0]; + double rollPrice = Double.parseDouble(lineSplit[1]); + int rollSpice = Integer.parseInt(lineSplit[2]); + String[] rollIngredients = lineSplit[3].split(", "); + boolean rollRaw = Boolean.parseBoolean(lineSplit[4]); + String[] rollExtra = lineSplit[5].split(","); + + main.items.add( + new Roll(rollName, rollPrice, rollSpice, Arrays.asList(rollIngredients), Arrays.asList(rollExtra)) + ); + + + } + // load Nigiri + // name|price|SpiceLevel|ingredients|raw|extra + String resultNigiriString = resultNigiri.toString(); + String[] nigiriLines = resultNigiriString.split("\n"); + for(String line : nigiriLines) { + String[] lineSplit = line.split("\\|"); // split data + // grab needed parameters + String nigiriName = lineSplit[0]; + double nigiriPrice = Double.parseDouble(lineSplit[1]); + int nigiriSpice = Integer.parseInt(lineSplit[2]); + String[] nigiriIngredients = lineSplit[3].split(", "); + boolean nigiriRaw = Boolean.parseBoolean(lineSplit[4]); + String[] nigiriExtra = lineSplit[5].split(","); + + main.items.add( + new Nigiri(nigiriName, nigiriPrice, nigiriSpice, Arrays.asList(nigiriIngredients), Arrays.asList(nigiriExtra)) + ); + + } // load appetizers - // name|price|description|hot + // name|price|ingredients|hot|type String resultAppetizersString = resultAppetizers.toString(); String[] AppetizersLines = resultAppetizersString.split("\n"); for(String line : AppetizersLines) { - if(line.trim().isEmpty()) continue; - String[] fields = line.split("\\|"); - String name = fields[0].trim(); - double price = Double.parseDouble(fields[1].trim()); - boolean hot = Boolean.parseBoolean(fields[3].trim()); - main.items.add(new appetizers(name, price, false, hot, true, false, null, null)); + String[] lineSplit = line.split("\\|"); // split data + + // grab needed parameters + String appetizersName = lineSplit[0]; + double appetizersPrice = Double.parseDouble(lineSplit[1]); + String[] appetizersIngredients = lineSplit[2].split(", "); + boolean appetizersisHot = Boolean.parseBoolean(lineSplit[3]); + String appetizersType = lineSplit[4]; + + /* + types: + 0 = Traditional + 1 = Seafood + */ + if(appetizersType.equalsIgnoreCase("0")) { + main.items.add( + new Traditional(appetizersName, appetizersPrice, 0, Arrays.asList(appetizersIngredients), null) + ); + } else if(appetizersType.equalsIgnoreCase("1")) { + main.items.add( + new Seafoods(appetizersName, appetizersPrice, 0, Arrays.asList(appetizersIngredients), null) + ); + } + + + } } } diff --git a/src/main/java/com/SushiAPI/SushiAPI/utils/utils.java b/src/main/java/com/SushiAPI/SushiAPI/utils/utils.java index 885b500..0a80949 100644 --- a/src/main/java/com/SushiAPI/SushiAPI/utils/utils.java +++ b/src/main/java/com/SushiAPI/SushiAPI/utils/utils.java @@ -13,7 +13,6 @@ public static List ArrayToList(JSONArray array) { for (int i = 0; i < array.length(); i++) { list.add(array.get(i)); } - return list; } public static List ArrayToStringList(JSONArray array) { @@ -21,7 +20,6 @@ public static List ArrayToStringList(JSONArray array) { for (int i = 0; i < array.length(); i++) { list.add(array.getString(i)); } - return list; } diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html index 42c0bba..4dc9ae5 100644 --- a/src/main/resources/templates/index.html +++ b/src/main/resources/templates/index.html @@ -38,6 +38,30 @@ color: #1A1A1A; } + /* Added header actions wrapper for multiple buttons */ + .header-actions { + display: flex; + gap: 1rem; + align-items: center; + } + + .add-item-btn { + background: #C85A54; + color: #FFFFFF; + border: none; + padding: 0.75rem 1.5rem; + border-radius: 8px; + cursor: pointer; + font-size: 0.95rem; + font-weight: 500; + transition: background 0.2s; + } + + .add-item-btn:hover { + background: #B44A44; + } + /* */ + .cart-btn { position: relative; background: #2D5740; @@ -361,7 +385,6 @@ visibility: visible; } - /* Added extras modal styles */ /* Extras Modal */ .extras-modal { position: fixed; @@ -564,6 +587,118 @@ opacity: 1; visibility: visible; } + + /* Add Item Modal Styles */ + .add-item-modal { + position: fixed; + top: 50%; + left: 50%; + transform: translate(-50%, -50%) scale(0.9); + width: 90%; + max-width: 550px; + background: #FFFFFF; + border-radius: 16px; + box-shadow: 0 8px 32px rgba(0, 0, 0, 0.2); + z-index: 300; + opacity: 0; + visibility: hidden; + transition: all 0.3s ease; + max-height: 90vh; + display: flex; + flex-direction: column; + } + + .add-item-modal.active { + opacity: 1; + visibility: visible; + transform: translate(-50%, -50%) scale(1); + } + + .form-group { + margin-bottom: 1.25rem; + } + + .form-label { + display: block; + font-weight: 600; + margin-bottom: 0.5rem; + color: #1A1A1A; + font-size: 0.95rem; + } + + .form-input, + .form-select, + .form-textarea { + width: 100%; + padding: 0.75rem; + border: 2px solid #E5E5E5; + border-radius: 8px; + font-size: 0.95rem; + font-family: inherit; + transition: border-color 0.2s; + } + + .form-input:focus, + .form-select:focus, + .form-textarea:focus { + outline: none; + border-color: #2D5740; + } + + .form-textarea { + resize: vertical; + min-height: 80px; + } + + .form-row { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 1rem; + } + + .checkbox-group { + display: flex; + align-items: center; + gap: 0.5rem; + padding: 0.75rem; + background: #F5F5F5; + border-radius: 8px; + } + + .checkbox-group input[type="checkbox"] { + width: 20px; + height: 20px; + cursor: pointer; + accent-color: #2D5740; + } + + .checkbox-group label { + cursor: pointer; + font-size: 0.95rem; + color: #1A1A1A; + } + + .submit-btn { + width: 100%; + background: #C85A54; + color: white; + border: none; + padding: 1rem; + border-radius: 8px; + font-size: 1rem; + font-weight: 600; + cursor: pointer; + transition: background 0.2s; + } + + .submit-btn:hover { + background: #B44A44; + } + + .submit-btn:disabled { + background: #CCC; + cursor: not-allowed; + } /* */ /* Responsive */ @@ -595,38 +730,77 @@ .extras-footer { padding: 1.5rem; } + + /* Responsive styles for add item modal */ + .add-item-modal { + width: 95%; + max-height: 95vh; + } + + .form-row { + grid-template-columns: 1fr; + } + + .header-actions { + gap: 0.5rem; + } + + .add-item-btn, + .cart-btn { + padding: 0.5rem 1rem; + font-size: 0.85rem; + } + /* */ }
- - + + +
+ + +
+
-

Fresh Japanese Cuisine

-

Experience authentic flavors with our carefully crafted sushi selection, made fresh daily with premium ingredients

+

Japanese Cuisine

+

Experience the best food, you've ever tasted in your life.

- @@ -723,6 +896,73 @@

Add Extras

+ + + + +
+
+
+

Add Custom Menu Item

+
+ +
+
+
+
+ + +
+ +
+
+ + +
+ +
+ + +
+
+ +
+ + +
+ +
+ + +
+ +
+
+ + +
+ +
+ + +
+
+
+
+ +
diff --git a/src/main/resources/templates/receipt.html b/src/main/resources/templates/receipt.html index 73b3660..074d2ac 100644 --- a/src/main/resources/templates/receipt.html +++ b/src/main/resources/templates/receipt.html @@ -252,6 +252,15 @@ let generateReceiptId = Math.round(Math.random() * 9999); let barCodeGeneratedNumber = Math.round(Math.random() * 9999999999999); let receiptItems = document.getElementById("receipt-items"); + const urlParams = new URLSearchParams(window.location.search); + console.log(urlParams) + + // PARAMS + const itemB64 = atob(urlParams.get("base64UrlEncoded")); + console.log(JSON.stringify(itemB64)); + + // + barCodeNumber.innerText = `* ${barCodeGeneratedNumber} *`; diff --git a/src/test/java/com/SushiAPI/SushiAPI/SushiApiApplicationTests.java b/src/test/java/com/SushiAPI/SushiAPI/SushiApiApplicationTests.java index e0e204d..8c31a5b 100644 --- a/src/test/java/com/SushiAPI/SushiAPI/SushiApiApplicationTests.java +++ b/src/test/java/com/SushiAPI/SushiAPI/SushiApiApplicationTests.java @@ -1,13 +1,30 @@ package com.SushiAPI.SushiAPI; +import com.SushiAPI.SushiAPI.models.MenuItem; +import com.SushiAPI.SushiAPI.models.Sushi.Nigiri; +import com.SushiAPI.SushiAPI.models.Sushi.Roll; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; +import java.util.ArrayList; + @SpringBootTest class SushiApiApplicationTests { - @Test - void contextLoads() { - } + @Test + void testing() { + Roll roll = new Roll("aw", 2, 0, new ArrayList<>(), new ArrayList<>()); + Nigiri nigiri = new Nigiri("test", 2, 0, new ArrayList<>(), new ArrayList<>()); + + ArrayList data = new ArrayList<>(); + data.add(roll); + data.add(nigiri); + for(MenuItem item : data) { + if (item instanceof Roll) { + System.out.println(item.getName() + " is a roll"); + } + } + } } diff --git a/src/test/java/com/SushiAPI/SushiAPI/models/itemTest.java b/src/test/java/com/SushiAPI/SushiAPI/models/itemTest.java new file mode 100644 index 0000000..962749c --- /dev/null +++ b/src/test/java/com/SushiAPI/SushiAPI/models/itemTest.java @@ -0,0 +1,34 @@ +package com.SushiAPI.SushiAPI.models; + +import com.SushiAPI.SushiAPI.models.Sushi.Nigiri; +import com.SushiAPI.SushiAPI.models.Sushi.Roll; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; + +import static org.junit.jupiter.api.Assertions.*; + +class itemTest { + + @Test + void oop() { + // act + Roll roll = new Roll("aw", 2, 0, new ArrayList<>(), new ArrayList<>()); + Nigiri nigiri = new Nigiri("test", 2, 0, new ArrayList<>(), new ArrayList<>()); + + ArrayList data = new ArrayList<>(); + data.add(roll); + data.add(nigiri); + // action + for(MenuItem item : data) { + if (item instanceof Roll) { + System.out.println(item.getName() + " is a roll"); + // assert + assertEquals("roll", item.getCategory().toLowerCase()); + } else if(item instanceof Nigiri) { + System.out.println(item.getName() + " is Nigiri"); + assertEquals("nigiri", item.getCategory().toLowerCase()); + } + } + } +} \ No newline at end of file