From 4887ecb00a894be31f80df9c983abdb8636290b9 Mon Sep 17 00:00:00 2001 From: Akshay Kadam <123861375+AK016@users.noreply.github.com> Date: Wed, 11 Oct 2023 22:28:45 +0530 Subject: [PATCH 1/3] Added SQLDump, Documentation and ERDiagram --- ERDiagram.png | Bin 0 -> 40328 bytes .../java/com/masai/DAO/IngredientDAO.java | 6 +- .../java/com/masai/DAO/IngredientDAOImpl.java | 168 +++++++++++ .../main/java/com/masai/DAO/RecipeDAO.java | 2 +- .../java/com/masai/DAO/RecipeDAOImpl.java | 127 ++++++++ .../java/com/masai/DTO/IngredientDTO.java | 95 +++--- .../main/java/com/masai/DTO/RecipeDTO.java | 8 +- .../src/main/java/com/masai/UI/Main.java | 276 ++++++++++++------ .../com/masai/services/IngredientService.java | 11 +- .../masai/services/IngredientServiceImpl.java | 47 +++ .../com/masai/services/RecipeService.java | 5 +- .../com/masai/services/RecipeServiceImpl.java | 29 +- .../com.masai/RecipeVerse/pom.properties | 2 +- .../classes/com/masai/DAO/IngredientDAO.class | Bin 495 -> 631 bytes .../com/masai/DAO/IngredientDAOImpl.class | Bin 0 -> 3899 bytes .../classes/com/masai/DAO/RecipeDAO.class | Bin 416 -> 464 bytes .../classes/com/masai/DAO/RecipeDAOImpl.class | Bin 0 -> 4489 bytes .../classes/com/masai/DTO/IngredientDTO.class | Bin 2102 -> 2493 bytes .../classes/com/masai/DTO/RecipeDTO.class | Bin 3741 -> 3698 bytes .../target/classes/com/masai/UI/Main.class | Bin 4740 -> 8870 bytes .../masai/services/IngredientService.class | Bin 326 -> 646 bytes .../services/IngredientServiceImpl.class | Bin 0 -> 1536 bytes .../com/masai/services/RecipeService.class | Bin 301 -> 462 bytes .../masai/services/RecipeServiceImpl.class | Bin 1096 -> 1436 bytes SQLQueries.sql | 68 +++++ 25 files changed, 690 insertions(+), 154 deletions(-) create mode 100644 ERDiagram.png create mode 100644 RecipeVerse/src/main/java/com/masai/DAO/IngredientDAOImpl.java create mode 100644 RecipeVerse/src/main/java/com/masai/DAO/RecipeDAOImpl.java create mode 100644 RecipeVerse/src/main/java/com/masai/services/IngredientServiceImpl.java create mode 100644 RecipeVerse/target/classes/com/masai/DAO/IngredientDAOImpl.class create mode 100644 RecipeVerse/target/classes/com/masai/DAO/RecipeDAOImpl.class create mode 100644 RecipeVerse/target/classes/com/masai/services/IngredientServiceImpl.class create mode 100644 SQLQueries.sql diff --git a/ERDiagram.png b/ERDiagram.png new file mode 100644 index 0000000000000000000000000000000000000000..28e060eb961ee7320dc474e2ad911c3da747f8bc GIT binary patch literal 40328 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%0AMIkQuLoz~==@$2g9wr$#jIfFUc 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 z getIngredientsByRecipeId(Long recipeId); } diff --git a/RecipeVerse/src/main/java/com/masai/DAO/IngredientDAOImpl.java b/RecipeVerse/src/main/java/com/masai/DAO/IngredientDAOImpl.java new file mode 100644 index 0000000..cd6066b --- /dev/null +++ b/RecipeVerse/src/main/java/com/masai/DAO/IngredientDAOImpl.java @@ -0,0 +1,168 @@ +package com.masai.DAO; + +import java.util.List; + +import com.masai.DTO.IngredientDTO; +import com.masai.Exceptions.NoRecordFoundException; +import com.masai.Exceptions.SomethingWentWrongException; +import com.masai.utility.EmUtils; + +import jakarta.persistence.EntityManager; +import jakarta.persistence.EntityTransaction; +import jakarta.persistence.PersistenceException; + +public class IngredientDAOImpl implements IngredientDAO { + + @Override + public IngredientDTO getIngredientById(Long id) throws SomethingWentWrongException { + IngredientDTO ingredient = null; + EntityManager em = null; + + try { + // Get an EntityManager from the utility class + em = EmUtils.getEntityManager(); + + // Find the IngredientDTO by its ID + ingredient = em.find(IngredientDTO.class, id); + + // Check if the ingredient is null and throw an exception if not found + if (ingredient == null) { + throw new NoRecordFoundException("Invalid Ingredient Id"); + } + } catch (PersistenceException | NoRecordFoundException e) { + // Handle any exceptions that occur during database operations + throw new SomethingWentWrongException("Unable to get Ingredient, try again later"); + } finally { + if (em != null) { + // Close the EntityManager if it was opened + em.close(); + } + } + return ingredient; + } + + @Override + public void saveIngredient(IngredientDTO ingredient) { + EntityManager em = null; + EntityTransaction et = null; + + try { + // Get an EntityManager from the utility class + em = EmUtils.getEntityManager(); + et = em.getTransaction(); + + // Begin the transaction + et.begin(); + + // Persist the ingredient to the database + em.persist(ingredient); + + // Commit the transaction + et.commit(); + } catch (PersistenceException e) { + if (et != null) { + // Rollback the transaction if an exception occurs + et.rollback(); + } + } finally { + if (em != null) { + // Close the EntityManager if it was opened + em.close(); + } + } + } + + @Override + public void updateIngredient(IngredientDTO ingredient) { + EntityManager em = null; + EntityTransaction et = null; + + try { + // Get an EntityManager from the utility class + em = EmUtils.getEntityManager(); + et = em.getTransaction(); + + // Begin the transaction + et.begin(); + + // Merge (update) the ingredient in the database + em.merge(ingredient); + + // Commit the transaction + et.commit(); + } catch (PersistenceException e) { + if (et != null) { + // Rollback the transaction if an exception occurs + et.rollback(); + } + // Handle the exception or log the error + } finally { + if (em != null) { + // Close the EntityManager if it was opened + em.close(); + } + } + } + + @Override + public void deleteIngredient(Long ingredientId) throws NoRecordFoundException { + EntityManager em = null; + EntityTransaction et = null; + try { + // Get an EntityManager from the utility class + em = EmUtils.getEntityManager(); + et = em.getTransaction(); + + // Begin the transaction + et.begin(); + + // Find the IngredientDTO by its ID + IngredientDTO ingredient = em.find(IngredientDTO.class, ingredientId); + + // Check if the ingredient is null and throw an exception if not found + if (ingredient == null) { + throw new NoRecordFoundException("Invalid Ingredient Id"); + } + + // Remove (delete) the ingredient from the database + em.remove(ingredient); + + // Commit the transaction + et.commit(); + } catch (PersistenceException e) { + if (et != null) { + // Rollback the transaction if an exception occurs + et.rollback(); + } + // Handle the exception or log the error + } finally { + if (em != null) { + // Close the EntityManager if it was opened + em.close(); + } + } + } + + public List getAllIngredients() { + EntityManager em = null; + + try { + // Get an EntityManager from the utility class + em = EmUtils.getEntityManager(); + + // Query to retrieve all ingredients + return em.createQuery("SELECT i FROM IngredientDTO i", IngredientDTO.class).getResultList(); + } finally { + if (em != null) { + // Close the EntityManager if it was opened + em.close(); + } + } + } + + @Override + public List getIngredientsByRecipeId(Long recipeId) { + // TODO Auto-generated method stub + return null; + } +} diff --git a/RecipeVerse/src/main/java/com/masai/DAO/RecipeDAO.java b/RecipeVerse/src/main/java/com/masai/DAO/RecipeDAO.java index 6056729..0478598 100644 --- a/RecipeVerse/src/main/java/com/masai/DAO/RecipeDAO.java +++ b/RecipeVerse/src/main/java/com/masai/DAO/RecipeDAO.java @@ -5,7 +5,7 @@ import com.masai.DTO.RecipeDTO; public interface RecipeDAO { - void saveRecipe(RecipeDTO recipe); + String saveRecipe(RecipeDTO recipe); void updateRecipe(RecipeDTO recipe); void deleteRecipe(Long recipeId); RecipeDTO getRecipeById(Long recipeId); diff --git a/RecipeVerse/src/main/java/com/masai/DAO/RecipeDAOImpl.java b/RecipeVerse/src/main/java/com/masai/DAO/RecipeDAOImpl.java new file mode 100644 index 0000000..c9a11a0 --- /dev/null +++ b/RecipeVerse/src/main/java/com/masai/DAO/RecipeDAOImpl.java @@ -0,0 +1,127 @@ +package com.masai.DAO; + +import java.util.List; + +import com.masai.DTO.RecipeDTO; +import com.masai.utility.EmUtils; + +import jakarta.persistence.EntityManager; +import jakarta.persistence.EntityTransaction; +import jakarta.persistence.PersistenceException; +import jakarta.persistence.TypedQuery; +import jakarta.persistence.criteria.CriteriaBuilder; +import jakarta.persistence.criteria.CriteriaQuery; +import jakarta.persistence.criteria.Root; + +public class RecipeDAOImpl implements RecipeDAO { + + // Method to save a new recipe to the database + @Override + public String saveRecipe(RecipeDTO recipe) { + EntityManager em = null; + EntityTransaction et = null; + + try { + em = EmUtils.getEntityManager(); + et = em.getTransaction(); + et.begin(); + em.persist(recipe); + et.commit(); + return "Recipe Added Successfully"; + } catch (PersistenceException e) { + et.rollback(); + return "Unable to add Recipe " + e.getMessage(); + } finally { + em.close(); + } + } + + // Method to update an existing recipe in the database + @Override + public void updateRecipe(RecipeDTO recipe) { + EntityManager em = null; + try { + em = EmUtils.getEntityManager(); + em.getTransaction().begin(); + em.merge(recipe); + em.getTransaction().commit(); + } catch (Exception e) { + if (em != null) { + em.getTransaction().rollback(); + } + } finally { + if (em != null) { + em.close(); + } + } + } + + // Method to delete a recipe from the database + @Override + public void deleteRecipe(Long recipeId) { + EntityManager em = null; + try { + em = EmUtils.getEntityManager(); + em.getTransaction().begin(); + RecipeDTO recipe = em.find(RecipeDTO.class, recipeId); + if (recipe != null) { + em.remove(recipe); + } + em.getTransaction().commit(); + } catch (Exception e) { + if (em != null) { + em.getTransaction().rollback(); + } + } finally { + if (em != null) { + em.close(); + } + } + } + + // Method to retrieve a recipe by its unique ID + @Override + public RecipeDTO getRecipeById(Long recipeId) { + EntityManager em = null; + try { + em = EmUtils.getEntityManager(); + return em.find(RecipeDTO.class, recipeId); + } finally { + if (em != null) { + em.close(); + } + } + } + + // Method to retrieve all recipes from the database + @Override + public List getAllRecipes() { + EntityManager em = null; + try { + em = EmUtils.getEntityManager(); + + // Create a CriteriaBuilder to build a query + CriteriaBuilder cb = em.getCriteriaBuilder(); + + // Create a CriteriaQuery for RecipeDTO + CriteriaQuery cq = cb.createQuery(RecipeDTO.class); + + // Set the root entity (from clause) for the query + Root root = cq.from(RecipeDTO.class); + + // Define the select clause + cq.select(root); + + // Create a TypedQuery using the CriteriaQuery + TypedQuery query = em.createQuery(cq); + + // Execute the query and return the list of RecipeDTO + return query.getResultList(); + } finally { + if (em != null) { + em.close(); + } + } + } +} + diff --git a/RecipeVerse/src/main/java/com/masai/DTO/IngredientDTO.java b/RecipeVerse/src/main/java/com/masai/DTO/IngredientDTO.java index 07d43ac..0661e95 100644 --- a/RecipeVerse/src/main/java/com/masai/DTO/IngredientDTO.java +++ b/RecipeVerse/src/main/java/com/masai/DTO/IngredientDTO.java @@ -1,5 +1,6 @@ package com.masai.DTO; +import jakarta.persistence.CascadeType; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.FetchType; @@ -21,53 +22,59 @@ public class IngredientDTO { @Column(name = "name", nullable = false) private String name; - @ManyToOne(fetch = FetchType.LAZY) + @Column(name = "quantity", nullable = false) + private double quantity; + + @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.PERSIST) @JoinColumn(name = "recipe_id", nullable = false) private RecipeDTO recipe; - - // Constructors, getters, and setters public IngredientDTO() { - super(); + super(); + } + + public IngredientDTO(Long id, String name, double quantity, RecipeDTO recipe) { + super(); + this.id = id; + this.name = name; + this.quantity = quantity; + this.recipe = recipe; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; } - - public IngredientDTO(Long id, String name, RecipeDTO recipe) { - super(); - this.id = id; - this.name = name; - this.recipe = recipe; - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public RecipeDTO getRecipe() { - return recipe; - } - - public void setRecipe(RecipeDTO recipe) { - this.recipe = recipe; - } - - @Override - public String toString() { - return "IngredientDTO id=" + id + ", name=" + name + ", recipe=" + recipe + "\n"; - } - - - -} + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public double getQuantity() { + return quantity; + } + + public void setQuantity(double quantity) { + this.quantity = quantity; + } + + public RecipeDTO getRecipe() { + return recipe; + } + + public void setRecipe(RecipeDTO recipe) { + this.recipe = recipe; + } + + @Override + public String toString() { + return "IngredientDTO id=" + id + ", name=" + name + ", quantity=" + quantity + ", recipe=" + recipe + "\n"; + } +} diff --git a/RecipeVerse/src/main/java/com/masai/DTO/RecipeDTO.java b/RecipeVerse/src/main/java/com/masai/DTO/RecipeDTO.java index 2cc618d..71abae8 100644 --- a/RecipeVerse/src/main/java/com/masai/DTO/RecipeDTO.java +++ b/RecipeVerse/src/main/java/com/masai/DTO/RecipeDTO.java @@ -27,24 +27,24 @@ public class RecipeDTO { @Column(name = "price") private double price; - @OneToMany(mappedBy = "recipe", cascade = CascadeType.ALL, fetch = FetchType.LAZY) + @OneToMany(mappedBy = "recipe", cascade = CascadeType.ALL, fetch = FetchType.EAGER) private List ingredients; @Column(name = "time_taken") private int timeTaken; - @ManyToMany(mappedBy = "likedRecipes") + @ManyToMany(mappedBy = "likedRecipes", fetch = FetchType.EAGER) private List likedByCustomers; + // Constructors, getters, and setters public RecipeDTO() { super(); } - public RecipeDTO(Long id, String recipeName, double price, List ingredients, int timeTaken, + public RecipeDTO(String recipeName, double price, List ingredients, int timeTaken, List likedByCustomers) { super(); - this.id = id; this.recipeName = recipeName; this.price = price; this.ingredients = ingredients; diff --git a/RecipeVerse/src/main/java/com/masai/UI/Main.java b/RecipeVerse/src/main/java/com/masai/UI/Main.java index 6c1cd11..07fdf22 100644 --- a/RecipeVerse/src/main/java/com/masai/UI/Main.java +++ b/RecipeVerse/src/main/java/com/masai/UI/Main.java @@ -1,16 +1,35 @@ package com.masai.UI; +import java.util.ArrayList; +import java.util.List; import java.util.Scanner; +import com.masai.DAO.IngredientDAO; +import com.masai.DAO.IngredientDAOImpl; import com.masai.DAO.UserDAOImpl; import com.masai.DTO.CustomerDTO; +import com.masai.DTO.IngredientDTO; +import com.masai.DTO.RecipeDTO; import com.masai.services.CustomerService; import com.masai.services.CustomerServiceImpl; +import com.masai.services.IngredientService; +import com.masai.services.IngredientServiceImpl; +import com.masai.services.RecipeService; +import com.masai.services.RecipeServiceImpl; public class Main { - private static CustomerService customerService = new CustomerServiceImpl(new UserDAOImpl()); private static Scanner scanner = new Scanner(System.in); + private static CustomerService customerService = new CustomerServiceImpl(new UserDAOImpl()); + private static RecipeService recipeService = new RecipeServiceImpl(); + // Create the IngredientDAO + private static IngredientDAO ingredientDAO = new IngredientDAOImpl(); + + // Create the IngredientService with the injected IngredientDAO + private static IngredientService ingredientService = new IngredientServiceImpl(ingredientDAO); +// private static IngredientService ingredientService = new IngredientServiceImpl(); + + public static void main(String[] args) { try { while (true) { @@ -21,7 +40,7 @@ public static void main(String[] args) { System.out.println("4. Exit"); System.out.print("Enter your choice: "); int choice = scanner.nextInt(); - scanner.nextLine(); // Consume the newline character + scanner.nextLine(); switch (choice) { case 1: @@ -51,44 +70,40 @@ public static void main(String[] args) { // to DAOImpl layer } } - - private static void adminLogin() { - System.out.print("Enter Admin Username: "); - String adminUsernameInput = scanner.nextLine(); - System.out.print("Enter Admin Password: "); - String adminPasswordInput = scanner.nextLine(); - - if (customerService.login(adminUsernameInput, adminPasswordInput, "admin")) { - adminMenu(); - } else { - System.out.println("Invalid admin credentials."); - } - } - - - - private static void signUpUser() { - System.out.print("Enter Username: "); - String username = scanner.nextLine(); - System.out.print("Enter Email: "); // Add prompt for the email - String email = scanner.nextLine(); - System.out.print("Enter Password: "); - String password = scanner.nextLine(); - System.out.print("Enter Role (admin/customer): "); - String role = scanner.nextLine(); - - // Save the new user to the database - CustomerDTO newUser = new CustomerDTO(username, email, password, role); - - // Pass the CustomerDTO object to the signUp method - if (customerService.signUp(newUser)) { - System.out.println("Sign up successful. You can now log in."); - } else { - System.out.println("Sign up failed. Please try again."); - } - } + private static void adminLogin() { + System.out.print("Enter Admin Username: "); + String adminUsernameInput = scanner.nextLine(); + System.out.print("Enter Admin Password: "); + String adminPasswordInput = scanner.nextLine(); + if (customerService.login(adminUsernameInput, adminPasswordInput, "admin")) { + adminMenu(); + } else { + System.out.println("Invalid admin credentials."); + } + } + + private static void signUpUser() { + System.out.print("Enter Username: "); + String username = scanner.nextLine(); + System.out.print("Enter Email: "); + String email = scanner.nextLine(); + System.out.print("Enter Password: "); + String password = scanner.nextLine(); + System.out.print("Enter Role (admin/customer): "); + String role = scanner.nextLine(); + + // Save the new user to the database + CustomerDTO newUser = new CustomerDTO(username, email, password, role); + + // Pass the CustomerDTO object to the signUp method + if (customerService.signUp(newUser)) { + System.out.println("Sign up successful. You can now log in."); + } else { + System.out.println("Sign up failed. Please try again."); + } + } private static void adminMenu() { while (true) { @@ -97,7 +112,8 @@ private static void adminMenu() { System.out.println("2. View Recipe by ID"); System.out.println("3. Delete Recipe by ID"); System.out.println("4. Update Recipe Ingredients"); - System.out.println("5. Go back to Main Menu"); + System.out.println("5. View Recipe List"); + System.out.println("6. Go back to Main Menu"); System.out.print("Enter your choice: "); int choice = scanner.nextInt(); scanner.nextLine(); @@ -118,10 +134,12 @@ private static void adminMenu() { case 4: updateRecipeIngredients(); break; - case 5: + getAllRecipes(); + break; + case 6: System.out.println("Going back to Main Menu..."); - return; // Return to Main Menu + return; default: System.out.println("Invalid choice. Please try again."); @@ -130,16 +148,47 @@ private static void adminMenu() { } } + private static void customerLogin() { + System.out.println("1. Login"); + System.out.println("2. Sign Up"); + System.out.print("Enter your choice: "); + int loginOrSignUpChoice = scanner.nextInt(); + scanner.nextLine(); + + switch (loginOrSignUpChoice) { + case 1: + System.out.print("Enter Customer Username: "); + String customerUsernameInput = scanner.nextLine(); + System.out.print("Enter Customer Password: "); + String customerPasswordInput = scanner.nextLine(); + + if (customerService.login(customerUsernameInput, customerPasswordInput, "customer")) { + customerMenu(); + } else { + System.out.println("Invalid customer credentials."); + } + break; + + case 2: + signUpUser(); + break; + + default: + System.out.println("Invalid choice. Returning to Main Menu."); + break; + } + } + private static void customerMenu() { while (true) { System.out.println("Welcome, Customer!"); System.out.println("1. View Recipe by ID"); System.out.println("2. Like Recipe"); System.out.println("3. View Liked Recipes"); - System.out.println("4. Go back to Main Menu"); // Option to go back to Main Menu + System.out.println("4. Go back to Main Menu"); System.out.print("Enter your choice: "); int choice = scanner.nextInt(); - scanner.nextLine(); // Consume the newline character + scanner.nextLine(); switch (choice) { case 1: @@ -157,7 +206,6 @@ private static void customerMenu() { case 4: System.out.println("Going back to Main Menu..."); return; - // Return to Main Menu default: System.out.println("Invalid choice. Please try again."); @@ -165,66 +213,118 @@ private static void customerMenu() { } } } - - - private static void customerLogin() { - System.out.println("1. Login"); - System.out.println("2. Sign Up"); - System.out.print("Enter your choice: "); - int loginOrSignUpChoice = scanner.nextInt(); - scanner.nextLine(); // Consume the newline character - - switch (loginOrSignUpChoice) { - case 1: - System.out.print("Enter Customer Username: "); - String customerUsernameInput = scanner.nextLine(); - System.out.print("Enter Customer Password: "); - String customerPasswordInput = scanner.nextLine(); - - if (customerService.login(customerUsernameInput, customerPasswordInput, "customer")) { - customerMenu(); - } else { - System.out.println("Invalid customer credentials."); - } - break; - - case 2: - signUpUser(); - break; - - default: - System.out.println("Invalid choice. Returning to Main Menu."); - break; - } - } private static void addRecipe() { - // Implement adding a recipe from DAO layer - // ... + System.out.print("Enter Recipe Name: "); + String name = scanner.nextLine(); + + System.out.print("Enter Recipe Price: "); + double price = scanner.nextDouble(); + scanner.nextLine(); + + System.out.print("Enter Recipe Ingredients separated by a Space: "); + String ingredientsInput = scanner.nextLine(); + List ingredients = new ArrayList<>(); + + // Split the ingredientsInput string into individual ingredient names + String[] ingredientNames = ingredientsInput.split(" "); + + // Create and save IngredientDTO objects for each ingredient name + for (String ingredientName : ingredientNames) { + IngredientDTO ingredient = new IngredientDTO(); + ingredient.setName(ingredientName); + ingredient.setQuantity(1.0); + ingredientService.saveIngredient(ingredient); + ingredients.add(ingredient); + } + + System.out.print("Enter Time Taken to Cook this Recipe: "); + int timeTaken = scanner.nextInt(); + scanner.nextLine(); + + List likes = new ArrayList<>(); + + RecipeDTO recipe = new RecipeDTO(name, price, ingredients, timeTaken, likes); + String s = recipeService.saveRecipe(recipe); + System.out.println(s); } private static void viewRecipeById() { - // Implement viewing a recipe by ID from DAO layer - // ... + System.out.print("Enter Recipe ID: "); + Long recipeId = scanner.nextLong(); + scanner.nextLine(); + + // Call the service method to get the recipe by ID + RecipeDTO recipe = recipeService.getRecipeById(recipeId); + + if (recipe != null) { + System.out.println("Recipe Details:"); + System.out.println(recipe); + } else { + System.out.println("Recipe not found with the given ID."); + } } private static void deleteRecipeById() { - // Implement deleting a recipe by ID from DAO layer - // ... + System.out.print("Enter Recipe ID to Delete: "); + Long recipeId = scanner.nextLong(); + scanner.nextLine(); + + // Call the service method to delete the recipe by ID + recipeService.deleteRecipe(recipeId); + System.out.println("Recipe with ID " + recipeId + " has been deleted successfully!"); } private static void updateRecipeIngredients() { - // Implement updating recipe ingredients from DAO layer - // ... + System.out.print("Enter Recipe ID to Update Ingredients: "); + Long recipeId = scanner.nextLong(); + scanner.nextLine(); + + // Call the service method to get the recipe by ID + RecipeDTO recipe = recipeService.getRecipeById(recipeId); + + if (recipe != null) { + // Assuming you have a method in RecipeDTO to get the list of ingredients + List ingredients = recipe.getIngredients(); + + if (ingredients != null && !ingredients.isEmpty()) { + for (IngredientDTO ingredient : ingredients) { + System.out.print("Enter new quantity for " + ingredient.getName() + ": "); + double newQuantity = scanner.nextDouble(); + scanner.nextLine(); + + // Set the new quantity for the ingredient + ingredient.setQuantity(newQuantity); + } + + // Call the service method to update the recipe with new ingredients + recipeService.updateRecipe(recipe); + System.out.println("Recipe ingredients updated successfully!"); + } else { + System.out.println("No ingredients found for the recipe."); + } + } else { + System.out.println("Recipe not found with the given ID."); + } + } + + private static void getAllRecipes() { + List recipes = recipeService.getAllRecipes(); + if (recipes.isEmpty()) { + System.out.println("No recipes found."); + } else { + System.out.println("All Recipes:"); + for (RecipeDTO recipe : recipes) { + System.out.println(recipe); + } + } } private static void likeRecipe() { - // Implement liking a recipe by a customer from DAO layer - // ... + } private static void viewLikedRecipes() { - // Implement viewing liked recipes by a customer from DAO layer - // ... + } } diff --git a/RecipeVerse/src/main/java/com/masai/services/IngredientService.java b/RecipeVerse/src/main/java/com/masai/services/IngredientService.java index 814eaf9..fafa2ff 100644 --- a/RecipeVerse/src/main/java/com/masai/services/IngredientService.java +++ b/RecipeVerse/src/main/java/com/masai/services/IngredientService.java @@ -1,10 +1,15 @@ package com.masai.services; +import java.util.List; + import com.masai.DTO.IngredientDTO; +import com.masai.Exceptions.NoRecordFoundException; +import com.masai.Exceptions.SomethingWentWrongException; public interface IngredientService { - IngredientDTO getIngredientById(Long id); - void saveIngredient(IngredientDTO ingredient); + void saveIngredient(IngredientDTO ingredient); void updateIngredient(IngredientDTO ingredient); - void deleteIngredient(IngredientDTO ingredient); + void deleteIngredient(Long ingredientId) throws NoRecordFoundException; + IngredientDTO getIngredientById(Long ingredientId) throws NoRecordFoundException, SomethingWentWrongException; + List getIngredientsByRecipeId(Long recipeId); } diff --git a/RecipeVerse/src/main/java/com/masai/services/IngredientServiceImpl.java b/RecipeVerse/src/main/java/com/masai/services/IngredientServiceImpl.java new file mode 100644 index 0000000..cc78429 --- /dev/null +++ b/RecipeVerse/src/main/java/com/masai/services/IngredientServiceImpl.java @@ -0,0 +1,47 @@ +package com.masai.services; + +import java.util.List; + +import com.masai.DAO.IngredientDAO; +import com.masai.DTO.IngredientDTO; +import com.masai.Exceptions.NoRecordFoundException; +import com.masai.Exceptions.SomethingWentWrongException; + +public class IngredientServiceImpl implements IngredientService { + + private IngredientDAO ingredientDAO; + + public IngredientServiceImpl(IngredientDAO ingredientDAO) { + this.ingredientDAO = ingredientDAO; + } + +// IngredientDAO ingredientDAO=new IngredientDAOImpl(); + + @Override + public void saveIngredient(IngredientDTO ingredient) { + ingredientDAO.saveIngredient(ingredient); + } + + @Override + public void updateIngredient(IngredientDTO ingredient) { + ingredientDAO.updateIngredient(ingredient); + } + + @Override + public void deleteIngredient(Long ingredientId) throws NoRecordFoundException { + ingredientDAO.deleteIngredient(ingredientId); + } + + @Override + public IngredientDTO getIngredientById(Long ingredientId) + throws NoRecordFoundException, SomethingWentWrongException { + return ingredientDAO.getIngredientById(ingredientId); + } + + @Override + public List getIngredientsByRecipeId(Long recipeId) { + return ingredientDAO.getIngredientsByRecipeId(recipeId); + } + + +} diff --git a/RecipeVerse/src/main/java/com/masai/services/RecipeService.java b/RecipeVerse/src/main/java/com/masai/services/RecipeService.java index 9acfa84..9114baf 100644 --- a/RecipeVerse/src/main/java/com/masai/services/RecipeService.java +++ b/RecipeVerse/src/main/java/com/masai/services/RecipeService.java @@ -1,10 +1,13 @@ package com.masai.services; +import java.util.List; + import com.masai.DTO.RecipeDTO; public interface RecipeService { + String saveRecipe(RecipeDTO recipe); RecipeDTO getRecipeById(Long id); - void saveRecipe(RecipeDTO recipe); void updateRecipe(RecipeDTO recipe); void deleteRecipe(long id); + List getAllRecipes(); } diff --git a/RecipeVerse/src/main/java/com/masai/services/RecipeServiceImpl.java b/RecipeVerse/src/main/java/com/masai/services/RecipeServiceImpl.java index 52cb74c..ebb0c5b 100644 --- a/RecipeVerse/src/main/java/com/masai/services/RecipeServiceImpl.java +++ b/RecipeVerse/src/main/java/com/masai/services/RecipeServiceImpl.java @@ -1,31 +1,40 @@ package com.masai.services; +import java.util.List; + import com.masai.DAO.RecipeDAO; +import com.masai.DAO.RecipeDAOImpl; import com.masai.DTO.RecipeDTO; public class RecipeServiceImpl implements RecipeService { - private RecipeDAO recipeDAO; - - // Constructor or setter injection for RecipeDAO - - @Override + @Override + public String saveRecipe(RecipeDTO recipe) { + RecipeDAO recipeDAO=new RecipeDAOImpl(); + return recipeDAO.saveRecipe(recipe); + } + + @Override public RecipeDTO getRecipeById(Long id) { + RecipeDAO recipeDAO=new RecipeDAOImpl(); return recipeDAO.getRecipeById(id); } - @Override - public void saveRecipe(RecipeDTO recipe) { - recipeDAO.saveRecipe(recipe); - } - @Override public void updateRecipe(RecipeDTO recipe) { + RecipeDAO recipeDAO=new RecipeDAOImpl(); recipeDAO.updateRecipe(recipe); } @Override public void deleteRecipe(long id) { + RecipeDAO recipeDAO=new RecipeDAOImpl(); recipeDAO.deleteRecipe(id); } + + @Override + public List getAllRecipes(){ + RecipeDAO recipeDAO=new RecipeDAOImpl(); + return recipeDAO.getAllRecipes(); + } } diff --git a/RecipeVerse/target/classes/META-INF/maven/com.masai/RecipeVerse/pom.properties b/RecipeVerse/target/classes/META-INF/maven/com.masai/RecipeVerse/pom.properties index 27e9ec6..47a53ab 100644 --- a/RecipeVerse/target/classes/META-INF/maven/com.masai/RecipeVerse/pom.properties +++ b/RecipeVerse/target/classes/META-INF/maven/com.masai/RecipeVerse/pom.properties @@ -1,5 +1,5 @@ #Generated by Maven Integration for Eclipse -#Sat Jul 22 22:34:00 IST 2023 +#Wed Oct 11 19:01:09 IST 2023 m2e.projectLocation=C\:\\Users\\Akshk\\Documents\\workspace-spring-tool-suite-4-4.18.1.RELEASE\\RecipeVerse m2e.projectName=RecipeVerse groupId=com.masai diff --git a/RecipeVerse/target/classes/com/masai/DAO/IngredientDAO.class b/RecipeVerse/target/classes/com/masai/DAO/IngredientDAO.class index 2b13cbb6643cdb81245e3b8d05f68e10d1ef6104..518820261334fe7ca847411cfe1c970f788f05a3 100644 GIT binary patch delta 196 zcmaFQ{GEmC)W2Q(7#J9A8N?@Yt+e5Ctw>HSD9OyvD`sclVPw!w&d=4)O)O5#)JMqZ z`{f6vCg&HWxaF7TrNG4}ZgewaXAodyFum8SQr=?xLFt(cp3PBESLyCP(+YH2q+>9RKvs|0%VDTSz-Y3Q#7mq delta 61 zcmey)@}8ON)W2Q(7#J9A8H6Tst(^GLWpXy-Rb>ViMg}ehZUzv|!@$eH$iN3w!^FT3 JWC?&-f&dLm3j_cF diff --git a/RecipeVerse/target/classes/com/masai/DAO/IngredientDAOImpl.class b/RecipeVerse/target/classes/com/masai/DAO/IngredientDAOImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..46a46c0773f9740a87de041d3f8d784c895bf40b GIT binary patch literal 3899 zcmb`J+jA3D9LK*WO}ixx7gIs8fU%*F(3GW!q78EEMG8p@H1y(qn{2~EvRgNsYSjm4 z)Nw|Kkr^MHLC5h)U-3yRGvE`>_%}J$@7Zj2w@`{RIt<-&`JHoqzt8t~ekXta{o7pt zui!%k5rJpRR$Z-Y4b4!;&P=J3X4Td!hHg6SP1cuc3Zeo#u4&7fTGPy`I<;_3FFOjl z1o}2vD$sSpFb(IVKu0<=BM=?6DtZhZ=!ru?x4`ziVd}+ZeL=TN+CohiNaU@uR-4gm zL-xJFsB_h52t1eH!Luay z*xllI4*gVU(J)Euc$nB|O=~oAA%rdY2{EAR4Jp_!Fc?Ja^Ju6=>#|<9?8=1IG%Nmi zHx3BwoHUoUno&sx!X+mwF{F@|d6J<;*q>>~Ci7forW=C-nJcEul%!)N2{N=rHtEQ^o#mR<&=m{|q&EU|F+lG-ED$jWXh$e^H=~#{bjrIn z0(&2mU=h78kop%Q3kcqdouT7=SD2?;ryZ?)y`U|*7e&Ddfo*{((lG_ReZ9e$zgofR zbrYqlw)I}?4sL5`%X*-NKr+2)IGGtqbu5l?Owa+!P_i|%p_SzYqC%TybI3H;gL62q zV3IdrBRyK_A6gK{1y{!fy=s`!he8}hObIC7t$84G+KEel&*4%Wm*wg%rfc1BwZJhJ--N3o zUjSLf)I3WPBiJ%+R87rk+T3IKA%hc}X3fc5Hw@mC>GAydXentVCoWGFLicy9G?g?Y zk?V2P!0XaewsqpV)YR=2f$?x`UP%aHX%(%F%V=q3Nw2uuFykz|t6)iB-$of1SjJ(4 zL2f0P%X*_(b0h%;Opext^Qj0tO`8z9vnwoo#*!|<_J^JJULyBy`pXIR%wvrn2UcdV ze`ajjYT9Le!jRAFuD~(xZ9go}XYuD7&HtVJRiN<8*O`B}u&44X`0YIO3t~UB5kZ`P zyWGKT*vfXiWq@ti&K@%nPtYpCc9gwdxs7<4+jnu~yeNp`uh>}}O7sn`Vs8h2M_(cP z2hw+tnokV;f`j))qIb|cpWuPndn27g_pxPY6+?VVJMRUZ>}~ECt1qi#X0R2N1(cc$p(3JpEO4u5t4yaVp?r-KX$aHeb1*;M5v= z(6w%cgTR{HZ{0BAF(c@btA@Bp1Br3Y!&u0!VpO0=K(7j9Ni-h;I~N6h!r(~M<2B8> z`xu}xG5&--Bc1GSX?008==|&k)Xz{P)M4Ui!z>aaaG3KdXPzg_W5j!$Ku55Lza;x< zdyp{<(%WH-5zPcgMsb?$F}BYWSb?oeY|mmc1b5DdJLe*maA#bk5^jm@S;9T&!kzQr zoO>*%(p9-!MEcInRhbT4^y=O0P;wFqYaGu{;QOX58$CHHc* zg||Qlik#uYglXcPA>Mgr>>Es^H<_JpA&Ymou0lMETwNyY3ZLCYK7?1fvci>%n1d0* zJMZJ2_wmm9c&~VP(+}f4@c-a_3vV;3b~Q-3)!-(hmTA1aG3Zcf7>VwV{(-GQamenD zuHv2lA<0iOIi(6yq}x{EHU4Y|>h#y-%)3;`-&`6!B#bKd_`Kf#{8}h(4Xb-#BpaPw7FEaiJs!}D~rAkqLRgq`K z&JQN8Ci+%!tplsz&${9uO9%@NE6ULALeRRY1yj`#a}4B-bC(=J-dm#6ihP-_>CaLZ~29cx_J3V9zNs)j6^tQl_EbSvzs szYvp=3UXieV|vex=|$H$#wc#{i11tXW9aCJuTX@_ON9hhT>B6H0Y=hP%K!iX literal 0 HcmV?d00001 diff --git a/RecipeVerse/target/classes/com/masai/DAO/RecipeDAO.class b/RecipeVerse/target/classes/com/masai/DAO/RecipeDAO.class index c3d608d78259542d1f707d8d9e19d9053cf0a7eb..fb749d397108981ce3a6506d160a69437b9ef50e 100644 GIT binary patch delta 120 zcmZ3$e1Vzk)W2Q(7#J9A8H6WtIWg&KOjcx+RMYgyN-Rs%&q>Tn*AFf!%FIi*W@O+g zEl5c$NexO(&MZh}WRL+XWzr0rSn*qzgMopCk%5ze3ruq}@PKJv20jKx27aLNObh}* JmLQlV1ORZW7gGQL delta 92 zcmcb>ynvbO)W2Q(7#J9A8H6TsIWfs-Ob%p}6x0l3WZ)?+NJ%V74N6VUEJ&TW;O2GcwYybO#Cd_W_Z82EuK0WeDt00$Niq5uE@ diff --git a/RecipeVerse/target/classes/com/masai/DAO/RecipeDAOImpl.class b/RecipeVerse/target/classes/com/masai/DAO/RecipeDAOImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..ad56d7ff2177bcda52998e18fff6999b18b0b5ab GIT binary patch literal 4489 zcmb_fTXz%J8Qo_rYmArxHJ3!eaYP8e9JUE6>)*5 z+o%b|Pg{=VO$c-i3@!=8rpiS#fiCRSprS`$ciwW$xms!2bQkqy+Z5={mkr%s(p^jL z!^4<&)2a$Qmv7@p#+MUFRQ0=N5VSyMAS%7s$Y!yS8_YM;SnyoSS4F~WvF<3RdX~*Lav$~_Nny$c+0crBK?s|H*V!BnU>Y0vVW;coD zb|Q&`DxMWM^rgZY`tY2g`P20MC+h|=5hIHV%Q=-PXWC}?;=R-}8` zT(uk->WdnV;HZEaW+bqGAOc)a|J>k`bTpu0P-@2sUdi&L`mlzyZ_u#IRkH^pgf^&6 zYO+`~i>Za0VVKqGO3k*{q>bYmUXltuZrQe%b>p^*m&vWIr8--)?4s%R;3NaO;z*XH zymCq}7E_`51V(X666}>NA&0ddTuNXZr&W+L1Ff*R)GXojeZ#Cs=ruM8d7NNDW*If> zF0jupM!g{#Od7>&8YXd;aOjna=@fl3Zq1_w3&Ye%#!;NpFfASSc;&z_t+{?b634d8 z7EsKRz~LugqZIW7j&%@?u!B$uW<1nVx)okjcxu686=(H|-^D5}ZJrd-mQ*n>u(t`( z;!U@FFBk|~ty0vzMqBrFXlqh2i6sqJ@dk-pGF@4uqpe80oyRJ!Z;GH%cycHr-8g1` zTG6!4W@LM#j`C#=71@-}H+`C*e-8F$TQK*8-wI2K1tojBR%LBZl;+t%vCyK?_ z((o;OTaw2uv$4ni=Md)0WzYBg9Sz^bd*n`)tTovAOVZZ%cUB|#1z(P%&!1Es1nZdB zvrOW962I>Y%zcTA&6=&jTwJS|#k%Pa@dFhf3G}y$yeX;Shp_8huhwi&GLr+(SQZ%R zoOL~<`Ye`OcgUV6(+c8bxm?2DZVopP_G`mQbtm9gs-=%+R&1>Un{P*iCcGidwA5{Q zs%PcL*Qo;qCOTV^F?Ti~$JutaG}Gv$t>U+BZbyw&WB@9DUmtCa!NYg+Lb>J|=6TD% zM+P%0yu6OcF^EIpMU*fPiZ;xvi+s-0;V>@x&n`dM^9%^s z&(IH0BFWsIWvB;v(kCyI)H#d+^i%73WRSwk#N#5*3VhD<*F~8C zoW~5)Rq%COpq4@p*YGvG&ZsiHCgw5AlR5hDgR(&vF%?2ZK}AxfJ1)mpR9vQo1^NkK z%h8Ig#0@dq1g!zt6$MuV9DU$EMRqRz1$Nbs2pzXa0(3q_-*}AM9U)k;$IZ=W^rA4U zV~kh9DV(FnC|*N6O_L27qBla+vXnheoL=H7uaP*39LA`1f(V>s#$&jISD3{~-ZI9B z%d0+KL(HC;H1N97!0XKruL0H~PxQKcl+GZ&!H~KdC`pK}?amXU4eUgB^IW2a4F(yJ zCF=yGo@+|UuiRj&{lxsDi2y=?w@bL+&}X%w{R=K z9RCb49||VzQ0^{m1bEhI_ zUQ&HH9*=C}0Tww%4K|OQwiEtjHR#qP7B`viZPwIb&UeTgkL`Gm&A5g$yhlxQeF68` zkZWwH2jtH?K0XuFWXK^t3XzrLidO+@{s=#&?E|#)6a17orr72m;}d!x<>}Axb9T`$ zs4X!Lq<-0u`c*^f*OZbNPf3iY(c`x&ryO5O4^;d{#fN+u{4M}n34WAB^ZQy2_f+>e M#=!o-wSqtX7tioO(*OVf literal 0 HcmV?d00001 diff --git a/RecipeVerse/target/classes/com/masai/DTO/IngredientDTO.class b/RecipeVerse/target/classes/com/masai/DTO/IngredientDTO.class index 54cd153a9c4a048f8eb7486501cf7598dac271e9..7965a04c47bbf0d37f896d69702b585a39b4d37d 100644 GIT binary patch literal 2493 zcmai0Yjavv6kR9b6+oNP);5n?Qkw=y(rcf#rnDx3L}Hq>38HP)dILv#D_kO6oXI!; zkve12nL6VS@JBhWbI%1X1oQ*z?fCx{&w$RyJ1&X1g7@dwqw<0$!b{# zHMwfr4aan>hTRglMDribrehk1ve~j)jyyDTJ>ru$%cZ!ALbAfyBGb=lh(y6&0qtHn`vi@Xi%Pj1bSdbwp`dNill$_5!J# zGMu2HPLRFIXrpUvg6)o}sRjbHm1bKn8eK(Y}D%mL3 zu&FNpzM2){*uobq6Z7y;+SGH|pRs;1R{RS0g;(=TnCC36jc^?cTq%GQzY5?NCK=*5tpGBM$4F`CVbB zRrAwA;3jT)Yz&S%oj;KNjpjNXr9QAcG?m-9<2gT~wF(h()9BIGV%%h?TP}hUnO0qz zA&;iOUEK4q{6rQ9iQFAZAx?M_nSlt1$)@$qyy+7@u{C_^!rRQTl2MB(gPv zi0%)e`rpHYU}T~e#PKy@9+NwVovga literal 2102 zcmah}e{T~<5Pj=7wqx89ObDb2#Vx@&CdoClB`qO_kRQ}wk`^pW&_Ak+y){eiJ?ng~ zlyB8aO^{ltAD|zq>f5^`J|DI!OSiMTGjHF#nejjW{`oh6ZTyf%LSV7!bgi!4x0SV5 zKeDR2?aG#t+T$*bq`>T3`&ZlQ*t%^U9lw=LPavUMJg*HeYL0Gi2`s!AXis%zL-o~h zNA76tc($h;-50n<_g`$+v#p+V`>O9r-IP|f#jxeES5KstuId@0{IB(m!7M9+Dl{K-*q~Jt~T%LL8oIgpDD@)fs`wo zszDhSxn*696rIKz{Q%<@^H{SmTui-XT))ucBf&x%Iw3# zr1wU#eAi>Sj`Rt$sgxqh`t1<4p*W8;k|*FAw6XtrpCP_{e((Z$Ad}UXO_WahNBRYPAsb;C2R80g*NQ zp5<^4mO%EUGjN;oK>6J^lGM7%Uts(w?(<*8J7JeC^6?Mb>E3(Kj+Q>+~n5)bm*DnI%fdN zcTTZfUOh#zympGx5O1ETfiX!eGo@S1qe!;5ee7}&A7T?Jl)+dgW5Z<5Ocx~*DC17} zvc=VBRsI9ZztJh6ZWILF3jD@tuVO6>uF%^6r+msoqCw*8q+t07^MThnxl~9_V4WU; z1W_WzIFY+!iF|>LaYTx7BKP>*<^&=^HwfJIi)d;QB~pqLxj&Z3SNM7ykx1zRMJgon zZ~~E_@q`(j5bH<3RKUhx*nE}$_8qoNjn1&0-#NoB?IM@_L1356`FFI>@H9?(H$r+N ZEJ6Y`=9<8Be^AU69CCler#TJZ{|Ei&tz`fJ diff --git a/RecipeVerse/target/classes/com/masai/DTO/RecipeDTO.class b/RecipeVerse/target/classes/com/masai/DTO/RecipeDTO.class index f0d031e996b9417faf36f6afbdff3c80394a845b..3bff8986012579c776600adae477e2b4b729805f 100644 GIT binary patch delta 495 zcmX|+%}WAN6vfYsGln`NG^Ju+sD+pLZp`c+L0YN1VL4*XYXqd&EpbG6NWv`$$4JzDE*UE!3X7D)y8IxTk5jj8< zF=~3!stE-t>gWNw@)+kmxG(}BYQ7+2rX1wWgagYAD-McgKy^?y!)^z5k3%kGS!aG9 zWVy`(JXnMuIi79_6IezBdA@8nOvgpQVvkrVs zsYq$9!Fr|(z8%{kwkneX@O^X%1D$TYm>=TEd9`eV0e zyxq=Wr?}VYb&KA9uj|luxN86WUwMKq%yD`MR~Ae}Vi2fGB#_ipml#7z)3QVwFEy=5 zOd_Z01HCt#n-imNNQ;j%yj~rkK=s(1S%3jWKdcm;#q85NgfRjjuYO@(&H5;-IUf~O z@KIA4(}$x{5g)F~M13@_*%?NWb>jKfTb@-!3=2qN5id|e2Ji3&OPE5LtH2tfdOCMY zyldhp{2fgk#Y5;BISUWgMb5$&O`L_Tn(|zWqRE{8=TGxPfh&(`?g@OvD&5C()Qitk z&KjkDye=yA6n9yttaVYNua?U?ur`E4Lbh1jvLu>xEDOS=OX;#c$_>$=a-zk0lF;2j qqU4r`_+od5*ipBr@MiA?TpOZie+$^ro`ZnhA->y30XHa{-24m02Vo}w diff --git a/RecipeVerse/target/classes/com/masai/UI/Main.class b/RecipeVerse/target/classes/com/masai/UI/Main.class index caf5fb8d98f86baa8ef64c7a9d6acd6478e4d74f..a6e2dd59201eec4585b418e0195fc54bd402b815 100644 GIT binary patch literal 8870 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 literal 4740 zcmbVP`*&1V75;9LVQwzB2?-G1<)$Dc5N28)0!a#m@aU90kdV+oMQ>&<;lj+FaUO&~ zv8A;X`nFG7w6#_p?Ngv7f!Nw=wOZ?=>hc$V@fZIH*P_PnoO|!ggaoseE4g##?6c24 zdw=`e`=0sqKUY5ha6A4MM45t`XfhE_m>JU!_e8=SrtJh#p0@@(Qn0kWxH;nrGvT)JS}h8KnW*VFR$9T#c4;=3wd3J#SIBj> zH5#`aJG)6ic|&8bf{M0e%nITr1tDy|Dlbp)X@1?{$Db>KYEXr^-arE87{6Q7^zM z9U+97kz|g!FZ#cmI==rZZd0&ipB3j3mXS>wd#tFPvWyPXF$b)KLijF-( ze3M^Wg_XTJdgO)-L+D8fHmlgj!*(W<4o@CrI8l;P1 zpGA$$Mi38-Z;5-m3axqD-YyNN@h#DM9#XLD|3q{m0*$>Qvk&Vyi*w|VOI-ywk87~w z9cgLYui{Y!%VnwNQbr~hjar$^prC7D7c#gf->vK(R|EX8;0+S`%QOs+6 zDqds@U^nWutwFyT_7546Z7R;QF4&N^S#c|CUAOi<1q<1ndQvg7xE65+$U>Vm%&2&U zuc37zV`tLnXC;bOE8f(G;IClyt2%z*u{!4VU?KgXjvonW)iJu`ink6$Vqz(;<0oQi zMojuMe(`l3Z-~V?Iq8tQIL@87STQ@3d|6C%Clq4E=spqM0{a;&qkx{@sR`gkqD25F zLF-+5O&r_pqdrzDF7w4e1f{lE@KGl`BXpJk-UyznIz~l6TAbU8_`I*<0||n_M_P2( zXz)Xlg`UZ7tm2p4N^d0T#LMJkR+d|QelSL95&vf5a%t)QmbQI-L@qwn@isISpRuI< zHsr65>qIL4$T}&g$hTIARLbVkj>ttRE0~0tvSD_mh1)%;HmObsebc_jUOy|yeOEoX z*3DOB)Y`#1W7ia{3yH>udU{^Ydt@0jaXsQUP25p9R`IivGX>K*YeNM;fyJZH`$kdK zH;fs>n0X0xqnO)w5%Y&(T*8tIR4K!k_^ELOx7P56woFPvQ@p!*2E!Z`$^$EgvAno# zniOhsi|#6*0gY6w#0spWgx)CgXk3^-dl5~ww_e6-F>dh2W^Ziu#!cRM$7O82h$WY? zy;Tm8eG6WvjZJ)nBO<;bmkso_?1iSNN=SR?;AA3%m(o1XQBe*+1c1BF^ z;WR&XlKSN`>^+#p?={4(7BeuD*Na&&Fq<*d;a1GSdP+87KJLLne2wSzbJb!N4r3{f z(t<yeCjIW`Y&!FHjrWH@AW%hoc|mbuVl%0b z+Zb@!nFM&>Q=0*9k>F!0xzO+1j#(63!OBB6RB}STgDUs8yQ+Ns?ow= zT6s0zL?<^hv^#j~+Cpht!QE=EWRc^ZoB4N)-&}Wflzo9UK@7@&P27)Mf0b$m5}^JO zarjWdLFwTzY(f4<=URzAX}0KJ~iaz3m0tl_h91m7p; zNAOyH?8y=QI6ro71V7D>Jt)q7lXfqNFE0O+)OSg;pG*Zgs*;~G7}Z?K@F-awBS|c5 zz#-CQ06PfWVKV+G;^cgiai&O?39YH|C-zFX;jSQfi4xAH^{K5%#P$=3 zjKN?R^D6r%$(CIR z`b-`pkkP~?Z7TK8OVoLBn@aufCF;D&O{M;i5_Mjbrc(cBi8?P(Q>p)}pswIA47dz` F{V(YLR&M|R diff --git a/RecipeVerse/target/classes/com/masai/services/IngredientService.class b/RecipeVerse/target/classes/com/masai/services/IngredientService.class index f95fa9cc68f4b918939a007e7a105af9592a8b6b..fbedc02737630b0fcdd8063f4be074e9c938789c 100644 GIT binary patch literal 646 zcmah{!A=4(5Pd~p1r$LPJsRTyV`9CdCK4qf*+}9VIoI80Em>N!+a>aA9{d15$~Yi# zArd`x`lj>Vo0)!mzP$su!hwSv!-;Q3d?XT~cp~G8@@2w%I*etYq_*BSqd z_v*{BRYoTcwiwPbu`I*y&4ct!9CS^pgCCrs9!i^;?M!RxxoW;3`66MR3&C^+-%r>eEq=+0U U*deTrUBVjlDu+Fa_UBRa3wO-A9smFU delta 72 zcmZo;J;ua!>ff$?3=9mm47?M$oF@KqndlWWnT<(bn}vmuft7)cfdNRfGjM=uPAJU< Oq8S(&xPc@S0}lX7&k8R9 diff --git a/RecipeVerse/target/classes/com/masai/services/IngredientServiceImpl.class b/RecipeVerse/target/classes/com/masai/services/IngredientServiceImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..fd9cb775c5b8239dc67dc21d4caf224abcbed5d0 GIT binary patch literal 1536 zcma)*ZBNrs6vzK}n=9K28=!y;)qJR2cXyWNhddm%Nl)QXB_Ny?bK#ls&NW^?7>NXxd>Bz08s{U?KWJYid|f=z~E zpfdQPo!TF`VLRrr-L=fYx-7V*Viju)Y9Rf@r250P7^a)t3#>c1klVCTO`+pB8tGcW zV}_k;C06Y=rxUfBXEe-b4)u3M=eCMG3JeQZRJaEh)R^dSDQ5i|F}`D6PqehMa6OuU zL{&5`-Rn9uR{OUm?2hebuOuCOp+dtB!-O+XlC0WY$Kc084)0=MTIe6$mddb3V;`mK z4qXvB{q(!X={bdH(p)W2Q(7#J9A8H6Wt+3|A~CzhoKr6y+Tn z*AFf!%FIi*p6KSl##365l2|gaOLO8OQ5W9y)Dp*>9EiqZMg}1bsIJnI%p856%;FMj zMh4E{%=Em(lF}lu(dY_nfOaw2Sx>yGYt72S$iT|L#=roi*%>&%G$#WWnC52S0n@w; Ud<={X{6Lp8F$e%zf?$>q07;`VNB{r; delta 93 zcmX@dyq1aU)W2Q(7#J9A8Tcl0*-dPzlc%&GC9xzmC^b2=Aa&wh+ICu^JZ z2lPiZJ+r$J0!2gEnb|$}oO{o`^XKo+-vHhsry(S;T5i;gn$@ywqa~XiyDVGAu`Jsc zvgjWVY8Q@%ut5CW>R5(j)vHF~>|B;z4PyeS+u{YrcI~?D?g@;fGbMrW`$k1ZF@l&5 z4H1DU)2_>-cI`|yPpmUX3M9-%*>Xx&(^lu;W!U{PWv7fo!@b zZ2zPX)W}^fV|EKGx=p)Yr87x^#jehN{yHFEQ1nqG5Q||JcQwoj%ngC+h+~=tG(AHF z=7%OBFz$mW)rafVW?2(e>H1Z@`+86j*h=^0Z#I~HW~hqFIHltr?hAx$2FLqj1@!hs z#d5EWTe`uxlHyy}@er$wt4K$7Kod`mbViF82Jc5TNn?UqZ^#*22fZn^Cyhbub(*d1!v zUQQ+PO2<!k`ALS(*$;`9VaMk}tA zj}N#QiFquLEyCX-mWUQ=5^myO9^_9ldS(d!3Lfb3!&@7q?hkJ`4?FI z;t-9&8a9v)G)~D7X64DiqoeHd4`i-j49YB1CdEs<(j$|+wkpZ@PrOoMo>i)!oB)>a s+_U?I*OHGsE6b+>Ig=fEDF!;SMyYjAX4Z!XG7*l3>Vq1J*BTWjwRH7D_|EeXP10TZ{=SVzIc24Q`PLV;D} z2!_i!vWqDQsj-}@unxjzX=%!GOQ+fv*hG=c{Rpn3cLg5mXwgxg z`hUS4FP)ZKDU?t#Q6^Yd+aOTI6M{LF-b6J%5pwLls6*2a1omL-`^8)RtaQp+&jyo` zqmEtui1|?T+;=f)Q3$QH% zvwBhiAjf5|EdlNXVo5*B65yljzzqf#ZUF9KKLQ?eFJr9F(sH+d;_(HZUS}4O!PXqp Rx>Rkk>SxR%JP*3`;ve`=(VzeT diff --git a/SQLQueries.sql b/SQLQueries.sql new file mode 100644 index 0000000..2c22872 --- /dev/null +++ b/SQLQueries.sql @@ -0,0 +1,68 @@ +-- Create tables +CREATE TABLE Recipe ( + id INTEGER PRIMARY KEY, + recipe_name VARCHAR(255), + price DOUBLE, + time_taken INT +); + +CREATE TABLE Ingredient ( + id INTEGER PRIMARY KEY, + name VARCHAR(255), + quantity DOUBLE, + recipe_id INTEGER, + FOREIGN KEY (recipe_id) REFERENCES Recipe(id) +); + +CREATE TABLE Customer ( + id INTEGER PRIMARY KEY, + name VARCHAR(255), + email VARCHAR(255), + password VARCHAR(255), + role VARCHAR(255) +); + +-- Insert sample data + +-- Recipes +INSERT INTO Recipe (recipe_name, price, time_taken) +VALUES ('Paneer Masala', 250.00, 60); + +-- Ingredients +INSERT INTO Ingredient (name, quantity, recipe_id) +VALUES ('Paneer', 200.0, 1); + +-- Customers +INSERT INTO Customer (name, email, password, role) +VALUES ('John Doe', 'john@example.com', 'password123', 'customer'); + +-- CRUD operations + +-- Read (Retrieve) Operation +-- Retrieve all recipes +SELECT * FROM Recipe; + +-- Retrieve all ingredients for a specific recipe (e.g., Recipe ID 1) +SELECT * FROM Ingredient WHERE recipe_id = 1; + +-- Retrieve a specific customer by their ID (e.g., Customer ID 1) +SELECT * FROM Customer WHERE id = 1; + +-- Update Operation +-- Update the price of a recipe (e.g., Recipe ID 1) +UPDATE Recipe +SET price = 260.00 +WHERE id = 1; + +-- Update the quantity of an ingredient (e.g., Ingredient ID 1) +UPDATE Ingredient +SET quantity = 250.0 +WHERE id = 1; + +-- Delete Operation +-- Delete a recipe and its associated ingredients (e.g., Recipe ID 1) +DELETE FROM Ingredient WHERE recipe_id = 1; +DELETE FROM Recipe WHERE id = 1; + +-- Delete a customer by their ID (e.g., Customer ID 1) +DELETE FROM Customer WHERE id = 1; From 26fedb684ce0dd635f073766f9980288376b4b61 Mon Sep 17 00:00:00 2001 From: Akshay Kadam <123861375+AK016@users.noreply.github.com> Date: Wed, 11 Oct 2023 22:32:04 +0530 Subject: [PATCH 2/3] Update README.md --- README.md | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 1621ef5..2ebf4e8 100644 --- a/README.md +++ b/README.md @@ -5,11 +5,12 @@ ReciperVerse is a console-based Java application for managing recipes, ingredien ## Table of Contents 1. [Introduction](#introduction) 2. [Application Structure](#application-structure) -3. [Features](#features) -4. [Getting Started](#getting-started) -5. [Usage](#usage) -6. [Contributing](#contributing) -7. [License](#license) +3. [ERDiagram](#erdiagram) +4. [Features](#features) +5. [Getting Started](#getting-started) +6. [Usage](#usage) +7. [Contributing](#contributing) +8. [License](#license) ## Introduction @@ -24,6 +25,10 @@ The ReciperVerse application consists of several components, including: - **DAO (Data Access Objects)**: Provides data access to the database. - **DTO (Data Transfer Objects)**: Represents the data structures for recipes, ingredients, and users. +## ERDiagram +![ER-Diagram](https://github.com/ak016/) + + ## Features ReciperVerse offers the following key features: From 293fa9ce3b3d6df8f60cb28f6857e896ea554469 Mon Sep 17 00:00:00 2001 From: Akshay Kadam <123861375+AK016@users.noreply.github.com> Date: Wed, 11 Oct 2023 22:32:42 +0530 Subject: [PATCH 3/3] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2ebf4e8..8c11963 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ The ReciperVerse application consists of several components, including: - **DTO (Data Transfer Objects)**: Represents the data structures for recipes, ingredients, and users. ## ERDiagram -![ER-Diagram](https://github.com/ak016/) +![ER-Diagram](https://github.com/AK016/toothsome-downtown-2195-/blob/Review-Day1/ERDiagram.png) ## Features