diff --git a/src/main/java/com/bib/essensbestellungsverwaltung/AccountMgr.java b/src/main/java/com/bib/essensbestellungsverwaltung/AccountMgr.java index a6d821f..95b306f 100644 --- a/src/main/java/com/bib/essensbestellungsverwaltung/AccountMgr.java +++ b/src/main/java/com/bib/essensbestellungsverwaltung/AccountMgr.java @@ -18,12 +18,10 @@ public class AccountMgr { /** * creates a user with createUser(...) and adds its id to the 'worker' table - * @param userData String[] name, firstname, password, email - * @param addressData String[] street, number, plz, city * @return userid or -1 */ - protected static long createWorker(String[] userData, String[] addressData){ - long id = createUser(userData, addressData); + protected static long createWorker(Worker worker){ + long id = createUser(worker); String sId = String.valueOf(id); Database.insert("worker", new String[]{"userid"}, new String[]{sId}); return id; @@ -31,12 +29,10 @@ public class AccountMgr { /** * creates a user with createUser(...) and adds its id to the 'parent' table - * @param userData String[] name, firstname, password, email - * @param addressData String[] street, number, plz, city * @return userid or -1 */ - protected static long createParent(String[] userData, String[] addressData){ - long id = createUser(userData, addressData); + protected static long createParent(Parent parent){ + long id = createUser(parent); String sId = String.valueOf(id); Database.insert("parent", new String[]{"userid"}, new String[]{sId}); return id; @@ -44,46 +40,89 @@ public class AccountMgr { /** * adds a user to the database - * @param userData String[] name, firstname, password, email - * @param addressData String[] street, number, plz, city * @return userid or -1 */ - protected static long createUser(String[] userData, String[] addressData) { - String[] addressH = {"street", "number", "plz", "city"}; + protected static long createUser(User user) { String[] userH = {"name", "firstname", "addressid", "password", "email"}; - String name = userData[0]; - String firstname = userData[1]; - String pw = hashAndSalt(userData[2], getSalt()); - String email = userData[3]; + String name = user.getName(); + String firstname = user.getFirstname(); + String pw = hashAndSalt(user.getPassword(), getSalt()); + String email = user.getEmail(); + long addressId = user.getAddress().getId(); + if(addressId < 1){ + addressId = createAddress(user.getAddress()); + } + String[] userD = {name, firstname, String.valueOf(addressId), pw, email}; + return Database.insert("user", userH, userD); + } - long id = Database.insert("address", addressH, addressData); - String sId = String.valueOf(id); - String[] userD = {name, firstname, sId, pw, email}; - id = Database.insert("user", userH, userD); - return id; + protected static long createAddress(Address address){ + String[] addressH = {"street", "number", "plz", "city"}; + String[] addressD = {address.getStreet(),address.getNumber(),address.getPlz(),address.getCity()}; + return Database.insert("address",addressH,addressD); } /** * adds a child and allergies to the database - * @param childData name, firstname, addressid - * @param allergyData id of allergies order matching with severityData - * @param severityData id of severity order matching with allergyData * @return id of child or -1 */ - protected static long createChild(String[] childData,String[] allergyData, String[] severityData){ + protected static long createChild(Child child){ String[] childH = {"name","firstname","addressid"}; + String[] childD = {child.getName(), child.getFirstname(), String.valueOf(child.getAddress().getId())}; + long id = Database.insert("child", childH, childD); String[] child_allergyH = {"childid","allergyid","severityid"}; - long id = Database.insert("child", childH, childData); - if(allergyData.length > 0){ - for(int i = 0; i < allergyData.length; i++){ - String sId = String.valueOf(id); - String[] child_allergyD = {sId,allergyData[i],severityData[i]}; - Database.insert("child_allergy",child_allergyH,child_allergyD); - } + for (AllergySeverity allergy: child.getAllergies()) { + String sId = String.valueOf(id); + String sAllergyId = String.valueOf(allergy.getAllergy().getId()); + String sSeverityId = String.valueOf(allergy.getSeverityId()); + String[] child_allergyD = {sId,sAllergyId,sSeverityId}; + Database.insert("child_allergy",child_allergyH,child_allergyD); } return id; } + protected static User getUserById(long id){ + List entry = Database.getEntryById("user",id); + String[] parts = entry.get(0).split(":"); + Address address = getAddressById(id); + if(isWorker(String.valueOf(id))){ + return new Worker(id,parts[1],parts[2],parts[4],parts[5],address); + }else{ + String[] parent_childH = {"parentuserid"}; + String[] parent_childD = {String.valueOf(id)}; + List children = new ArrayList<>(); + List parent_childEntries = Database.select("parent_child",parent_childH,parent_childD); + for (String parent_childEntry: parent_childEntries) { + String[] parent_childParts = parent_childEntry.split(":"); + children.add(getChildById(Long.parseLong(parent_childParts[2]))); + } + return new Parent(id,parts[1],parts[2],parts[4],parts[5],address,children); + } + } + + protected static Child getChildById(long id){ + List entry = Database.getEntryById("child",id); + String[] parts = entry.get(0).split(":"); + String[] child_allergyH = {"childid"}; + String[] child_allergyD = {String.valueOf(id)}; + List entriesAllergy = Database.select("child_allergy",child_allergyH,child_allergyD); + List allergySeverities = new ArrayList<>(); + for (String entryAllergy : entriesAllergy) { + String[] allergyParts = entryAllergy.split(":"); + List severity = Database.getEntryById("severity", Long.parseLong(allergyParts[3])); + String sSeverity = severity.get(0).split(":")[1]; + long lSeverity = Long.parseLong(severity.get(0).split(":")[0]); + allergySeverities.add(new AllergySeverity(FoodMgr.getAllergyById(Long.parseLong(allergyParts[2])),lSeverity,sSeverity)); + } + return new Child(id,parts[1],parts[2],getAddressById(Long.parseLong(parts[3])),allergySeverities); + } + + protected static Address getAddressById(long id){ + List entry = Database.getEntryById("address",id); + String[] parts = entry.get(0).split(":"); + return new Address(Long.parseLong(parts[0]),parts[1],parts[2],parts[3],parts[4]); + } + /** * creates entries in the database to match parent to child * @param parentId id of parent @@ -149,7 +188,7 @@ public class AccountMgr { * @param pw the password to hash * @return hashed and salted password */ - protected static String hashAndSalt(String pw, String salt){ + private static String hashAndSalt(String pw, String salt){ Base64.Decoder dec = Base64.getDecoder(); byte[] bySalt = dec.decode(salt); KeySpec spec = new PBEKeySpec(pw.toCharArray(), bySalt,310001,256); @@ -205,4 +244,15 @@ public class AccountMgr { invoice.add("Total: " + (invoice.size()-2) + " X " + price + "€ = " + ((invoice.size()-2)*price) + "€"); return invoice; } + + protected static void getPriceFromDb(){ + List priceEntry = Database.getEntryById("price",1); + price = Double.parseDouble(priceEntry.get(0).split(":")[1])/100.0; + } + + protected static void setPriceInDb(){ + String[] priceH = {"id","price"}; + String[] priceD = {"1", String.valueOf(price*100)}; + Database.update("price",priceH,priceD); + } } diff --git a/src/main/java/com/bib/essensbestellungsverwaltung/Address.java b/src/main/java/com/bib/essensbestellungsverwaltung/Address.java new file mode 100644 index 0000000..641330d --- /dev/null +++ b/src/main/java/com/bib/essensbestellungsverwaltung/Address.java @@ -0,0 +1,47 @@ +package com.bib.essensbestellungsverwaltung; +/* + @author Malte Schulze Hobeling + */ + +public class Address { + private long id; + private String street; + private String number; + private String plz; + private String city; + + public long getId() { + return id; + } + + public String getStreet() { + return street; + } + + public String getNumber() { + return number; + } + + public String getPlz() { + return plz; + } + + public String getCity() { + return city; + } + + public Address(long id, String street, String number, String plz, String city) { + this.id = id; + this.street = street; + this.number = number; + this.plz = plz; + this.city = city; + } + public Address(String street, String number, String plz, String city) { + this.id = -1; + this.street = street; + this.number = number; + this.plz = plz; + this.city = city; + } +} diff --git a/src/main/java/com/bib/essensbestellungsverwaltung/Allergy.java b/src/main/java/com/bib/essensbestellungsverwaltung/Allergy.java new file mode 100644 index 0000000..77518be --- /dev/null +++ b/src/main/java/com/bib/essensbestellungsverwaltung/Allergy.java @@ -0,0 +1,28 @@ +package com.bib.essensbestellungsverwaltung; +/* + @author Malte Schulze Hobeling + */ + +public class Allergy { + private final long id; + private final String name; + private final String handle; + + public Allergy(long id, String name, String handle) { + this.id = id; + this.name = name; + this.handle = handle; + } + + public long getId() { + return id; + } + + public String getName() { + return name; + } + + public String getHandle() { + return handle; + } +} diff --git a/src/main/java/com/bib/essensbestellungsverwaltung/AllergySeverity.java b/src/main/java/com/bib/essensbestellungsverwaltung/AllergySeverity.java new file mode 100644 index 0000000..5ad3e9e --- /dev/null +++ b/src/main/java/com/bib/essensbestellungsverwaltung/AllergySeverity.java @@ -0,0 +1,28 @@ +package com.bib.essensbestellungsverwaltung; +/* + @author Malte Schulze Hobeling + */ + +public class AllergySeverity { + private Allergy allergy; + private long severityId; + private String severity; + + public AllergySeverity(Allergy allergy, long severityId, String severity) { + this.allergy = allergy; + this.severityId = severityId; + this.severity = severity; + } + + public Allergy getAllergy() { + return allergy; + } + + public long getSeverityId() { + return severityId; + } + + public String getSeverity() { + return severity; + } +} diff --git a/src/main/java/com/bib/essensbestellungsverwaltung/Child.java b/src/main/java/com/bib/essensbestellungsverwaltung/Child.java new file mode 100644 index 0000000..697e055 --- /dev/null +++ b/src/main/java/com/bib/essensbestellungsverwaltung/Child.java @@ -0,0 +1,49 @@ +package com.bib.essensbestellungsverwaltung; +/* + @author Malte Schulze Hobeling + */ + +import java.util.List; + +public class Child { + private long id; + private String name; + private String firstname; + private Address address; + private List allergies; + + public Child(long id, String name, String firstname, Address address, List allergies) { + this.id = id; + this.name = name; + this.firstname = firstname; + this.address = address; + this.allergies = allergies; + } + public Child(String name, String firstname, Address address, List allergies) { + this.id = -1; + this.name = name; + this.firstname = firstname; + this.address = address; + this.allergies = allergies; + } + + public String getName() { + return name; + } + + public String getFirstname() { + return firstname; + } + + public Address getAddress() { + return address; + } + + public long getId() { + return id; + } + + public List getAllergies() { + return allergies; + } +} diff --git a/src/main/java/com/bib/essensbestellungsverwaltung/ConsoleLib.java b/src/main/java/com/bib/essensbestellungsverwaltung/ConsoleLib.java index fa9775f..8699e65 100644 --- a/src/main/java/com/bib/essensbestellungsverwaltung/ConsoleLib.java +++ b/src/main/java/com/bib/essensbestellungsverwaltung/ConsoleLib.java @@ -29,7 +29,9 @@ public class ConsoleLib { userData[3] = sc.nextLine(); System.out.print("Passwort: "); userData[2] = sc.nextLine(); - long id = AccountMgr.createWorker(userData,addressData); + Address address = new Address(addressData[0],addressData[1],addressData[2],addressData[3]); + Worker worker = new Worker(userData[0],userData[1],userData[2],userData[3],address); + long id = AccountMgr.createWorker(worker); if(id < 1){ System.out.println("Fehler beim erstellen"); } @@ -56,7 +58,9 @@ public class ConsoleLib { userData[3] = sc.nextLine(); System.out.print("Passwort: "); userData[2] = sc.nextLine(); - long id = AccountMgr.createParent(userData,addressData); + Address address = new Address(addressData[0],addressData[1],addressData[2],addressData[3]); + Parent parent = new Parent(userData[0],userData[1],userData[2],userData[3],address); + long id = AccountMgr.createParent(parent); if(id < 1){ System.out.println("Fehler beim erstellen"); } @@ -88,7 +92,15 @@ public class ConsoleLib { System.out.print("Schweren (1 Harmlos - 3 Kritisch[2,3,1,3]): "); String severities = sc.nextLine(); String[] severityData = severities.split(","); - long id = AccountMgr.createChild(childData,allergyData,severityData); + Address address = AccountMgr.getAddressById(Long.parseLong(childData[2])); + List allergySeverities = new ArrayList<>(); + for(int i = 0; i < allergyData.length; i++){ + List allergySeverity = Database.getEntryById("severity", Long.parseLong(severityData[i])); + String[] asParts = allergySeverity.get(0).split(":"); + allergySeverities.add(new AllergySeverity(FoodMgr.getAllergyById(Long.parseLong(allergyData[0])),Long.parseLong(asParts[0]),asParts[1])); + } + Child child = new Child(childData[0],childData[1],address,allergySeverities); + long id = AccountMgr.createChild(child); if(id < 1){ System.out.println("Fehler beim erstellen"); return; @@ -119,27 +131,39 @@ public class ConsoleLib { System.out.print("Allergienummer: "); String allergies = sc.nextLine(); String[] allergyData = allergies.split(","); - if(FoodMgr.createFood(foodData,allergyData) < 1){ + FoodType foodType = FoodMgr.getFoodTypeById(Long.parseLong(foodData[3])); + List allergyList = new ArrayList<>(); + for (String data : allergyData) { + allergyList.add(FoodMgr.getAllergyById(Long.parseLong(data))); + } + boolean isDessert = !foodData[2].equals("0"); + Food food = new Food(foodData[0],foodData[1],isDessert,foodType,allergyList); + if(FoodMgr.createFood(food) < 1){ System.out.println("Fehler"); } } - public static long loginPrompt(){ + public static User loginPrompt(){ System.out.println("Login"); Scanner sc = new Scanner(System.in); - long id = -1; - while (id == -1){ + User user = null; + while (user == null){ System.out.print("Email: "); String email = sc.nextLine(); + if(email.isEmpty()){ + return null; + } System.out.print("Passwort: "); String pw = sc.nextLine(); - id = AccountMgr.login(email,pw); + long id = AccountMgr.login(email,pw); if(id == -1){ System.out.println("Login fehlgeschlagen"); + }else { + user = AccountMgr.getUserById(id); } } System.out.println("Login erfolgreich"); - return id; + return user; } public static void matchParentChildPrompt(String parentId){ @@ -183,19 +207,36 @@ public class ConsoleLib { Scanner sc = new Scanner(System.in); System.out.print("Bitte geben Sie das Datum im Format YYYY-MM-DD an: "); food_planData[0] = sc.nextLine(); - printConsole(FoodMgr.getVeganFood(false)); + List veganMain = FoodMgr.getVeganFood(false); + for (Food food : veganMain) { + System.out.println(food.getId() + " : " + food.getName()); + } System.out.print("Veganes Hauptgericht Nr: "); food_planData[1] = sc.nextLine(); - printConsole(FoodMgr.getFood(false)); + List foodMain = FoodMgr.getFood(false); + for (Food food : foodMain) { + System.out.println(food.getId() + " : " + food.getName()); + } System.out.print("Zweites Hauptgericht Nr: "); food_planData[2] = sc.nextLine(); - printConsole(FoodMgr.getVeganFood(true)); + List veganDessert = FoodMgr.getVeganFood(true); + for (Food food : veganDessert) { + System.out.println(food.getId() + " : " + food.getName()); + } System.out.print("Veganes Dessert Nr: "); food_planData[3] = sc.nextLine(); - printConsole(FoodMgr.getFood(true)); + List foodDessert = FoodMgr.getFood(true); + for (Food food : foodDessert) { + System.out.println(food.getId() + " : " + food.getName()); + } System.out.print("Zweites Dessert Nr: "); food_planData[4] = sc.nextLine(); - long id = FoodMgr.createFood_plan(food_planData); + FoodPlan foodPlan = new FoodPlan(food_planData[0], + FoodMgr.getFoodById(Long.parseLong(food_planData[1])), + FoodMgr.getFoodById(Long.parseLong(food_planData[2])), + FoodMgr.getFoodById(Long.parseLong(food_planData[3])), + FoodMgr.getFoodById(Long.parseLong(food_planData[4]))); + long id = FoodMgr.createFood_plan(foodPlan); if(id < 0){ System.out.println("Fehler"); } @@ -206,33 +247,22 @@ public class ConsoleLib { Scanner sc = new Scanner(System.in); System.out.print("Bitte geben Sie das Datum im Format YYYY-MM-DD an: "); String date = sc.nextLine(); - List plan = FoodMgr.getFood_plan(date); - List food = new ArrayList<>(); + FoodPlan plan = FoodMgr.getFoodPlan(date); + List foodList = new ArrayList<>(); StringBuilder sb; - for (String day : plan) { - sb = new StringBuilder(); - String[] parts = day.split(":"); - sb.append("Tag: "); - sb.append(parts[1]); - sb.append(" Veganesgericht: "); - food = FoodMgr.getFoodById(Long.parseLong(parts[2])); - String[] foodParts = food.get(0).split(":"); - sb.append(foodParts[1]); - sb.append(" Zweites Hauptgericht: "); - food = FoodMgr.getFoodById(Long.parseLong(parts[3])); - foodParts = food.get(0).split(":"); - sb.append(foodParts[1]); - sb.append(" Veganesdessert: "); - food = FoodMgr.getFoodById(Long.parseLong(parts[4])); - foodParts = food.get(0).split(":"); - sb.append(foodParts[1]); - sb.append(" Zweites Dessert: "); - food = FoodMgr.getFoodById(Long.parseLong(parts[5])); - foodParts = food.get(0).split(":"); - sb.append(foodParts[1]); - food.add(sb.toString()); - } - printConsole(food); + sb = new StringBuilder(); + sb.append("Tag: "); + sb.append(plan.getDate()); + sb.append(" Veganesgericht: "); + sb.append(plan.getFoodVegan().getName()); + sb.append(" Zweites Hauptgericht: "); + sb.append(plan.getFoodSecond().getName()); + sb.append(" Veganesdessert: "); + sb.append(plan.getDessertVegan().getName()); + sb.append(" Zweites Dessert: "); + sb.append(plan.getDessertSecond().getName()); + foodList.add(sb.toString()); + printConsole(foodList); } public static void createFood_selectionPrompt(){ @@ -291,5 +321,6 @@ public class ConsoleLib { double price = sc.nextDouble(); sc.nextLine(); AccountMgr.price = price; + AccountMgr.setPriceInDb(); } } diff --git a/src/main/java/com/bib/essensbestellungsverwaltung/ConsoleMain.java b/src/main/java/com/bib/essensbestellungsverwaltung/ConsoleMain.java index 6d823e5..2927351 100644 --- a/src/main/java/com/bib/essensbestellungsverwaltung/ConsoleMain.java +++ b/src/main/java/com/bib/essensbestellungsverwaltung/ConsoleMain.java @@ -6,9 +6,8 @@ package com.bib.essensbestellungsverwaltung; import java.util.Scanner; public class ConsoleMain { - static long currentUserId = -1; - static boolean isWorker = false; - static boolean isParent = false; + static User currentUser = null; + static boolean running = true; public static void main(String[] args) { boolean firstRun = Database.init(); if(firstRun){ @@ -16,15 +15,14 @@ public class ConsoleMain { Database.fillDb(); ConsoleLib.createWorkerPrompt(); } - while (true){ - if(currentUserId == -2){ - break; - }else if(currentUserId < 0){ + AccountMgr.getPriceFromDb(); + while (running){ + if(currentUser == null){ defaultMenu(); }else{ - if(isWorker){ + if(currentUser.getClass().getSimpleName().equals("Worker")){ adminMenu(); - }else if(isParent){ + }else if(currentUser.getClass().getSimpleName().equals("Parent")){ parentMenu(); } } @@ -32,21 +30,21 @@ public class ConsoleMain { } public static void defaultMenu(){ + System.out.println("0: Programm beenden"); System.out.println("1: Login"); System.out.println("2: Essensplan anzeigen"); - System.out.println("3: Programm beenden"); + System.out.println("3: Registrieren"); System.out.print("Auswahl: "); Scanner sc = new Scanner(System.in); String selection = sc.nextLine(); switch (selection) { + case "0" -> running = false; case "1" -> { - currentUserId = ConsoleLib.loginPrompt(); - isWorker = AccountMgr.isWorker(String.valueOf(currentUserId)); - isParent = AccountMgr.isParent(String.valueOf(currentUserId)); + currentUser = ConsoleLib.loginPrompt(); } case "2" -> ConsoleLib.showFood_planPrompt(); - case "3" -> currentUserId = -2; + case "3" -> ConsoleLib.createParentPrompt(); } } @@ -57,14 +55,14 @@ public class ConsoleMain { System.out.println("3: Ein neues Kind anlegen"); System.out.println("4: Kind einem Elternteil zuordnen"); System.out.println("5: Ein neues Essen anlegen"); - System.out.println("6: Table"); - System.out.println("7: Einen Essensplan erstellen"); - System.out.println("8: Essensplan anzeigen"); - System.out.println("9: Löschen"); - System.out.println("10: Essen auswählen"); - System.out.println("11: Bestellungen des Tages sammeln"); - System.out.println("12: Monatsabrechnung"); - System.out.println("13: Preis ändern"); + System.out.println("6: Einen Essensplan erstellen"); + System.out.println("7: Essensplan anzeigen"); + System.out.println("8: Essen auswählen"); + System.out.println("9: Bestellungen des Tages sammeln"); + System.out.println("10: Monatsabrechnung"); + System.out.println("11: Preis ändern"); + System.out.println("x1: Table"); + System.out.println("x2: Löschen"); System.out.print("Auswahl: "); @@ -72,23 +70,21 @@ public class ConsoleMain { String selection = sc.nextLine(); switch (selection) { case "0" -> { - currentUserId = -1; - isWorker = false; - isParent = false; + currentUser = null; } case "1" -> ConsoleLib.createWorkerPrompt(); case "2" -> ConsoleLib.createParentPrompt(); - case "3" -> ConsoleLib.createChildPrompt(String.valueOf(currentUserId)); - case "4" -> ConsoleLib.matchParentChildPrompt(String.valueOf(currentUserId)); + case "3" -> ConsoleLib.createChildPrompt(String.valueOf(currentUser.getId())); + case "4" -> ConsoleLib.matchParentChildPrompt(String.valueOf(currentUser.getId())); case "5" -> ConsoleLib.createFoodPrompt(); - case "6" -> ConsoleLib.tablePrompt(); - case "7" -> ConsoleLib.createFood_planPrompt(); - case "8" -> ConsoleLib.showFood_planPrompt(); - case "9" -> ConsoleLib.deletePrompt(); - case "10" -> ConsoleLib.createFood_selectionPrompt(); - case "11" -> ConsoleLib.dayOrderPrompt(); - case "12" -> ConsoleLib.invoicePrompt(); - case "13" -> ConsoleLib.changePricePrompt(); + case "6" -> ConsoleLib.createFood_planPrompt(); + case "7" -> ConsoleLib.showFood_planPrompt(); + case "8" -> ConsoleLib.createFood_selectionPrompt(); + case "9" -> ConsoleLib.dayOrderPrompt(); + case "10" -> ConsoleLib.invoicePrompt(); + case "11" -> ConsoleLib.changePricePrompt(); + case "x1" -> ConsoleLib.tablePrompt(); + case "x2" -> ConsoleLib.deletePrompt(); } } @@ -96,7 +92,8 @@ public class ConsoleMain { public static void parentMenu(){ System.out.println("0: Ausloggen"); System.out.println("3: Ein neues Kind anlegen"); - System.out.println("4: Kind einem Elternteil zuordnen"); + System.out.println("7: Essensplan anzeigen"); + System.out.println("8: Essen auswählen"); System.out.print("Auswahl: "); @@ -104,15 +101,12 @@ public class ConsoleMain { String selection = sc.nextLine(); switch (selection) { case "0" -> { - currentUserId = -1; - isWorker = false; - isParent = false; + currentUser = null; } - case "3" -> ConsoleLib.createChildPrompt(String.valueOf(currentUserId)); - case "4" -> ConsoleLib.matchParentChildPrompt(String.valueOf(currentUserId)); + case "3" -> ConsoleLib.createChildPrompt(String.valueOf(currentUser.getId())); case "6" -> ConsoleLib.tablePrompt(); - default -> { - } + case "7" -> ConsoleLib.showFood_planPrompt(); + case "8" -> ConsoleLib.createFood_selectionPrompt(); } } diff --git a/src/main/java/com/bib/essensbestellungsverwaltung/Database.java b/src/main/java/com/bib/essensbestellungsverwaltung/Database.java index a09068a..887a822 100644 --- a/src/main/java/com/bib/essensbestellungsverwaltung/Database.java +++ b/src/main/java/com/bib/essensbestellungsverwaltung/Database.java @@ -45,7 +45,7 @@ public class Database { * creates the initial structure of the db */ protected static void createDb(){ - String[] sql = new String[14]; + String[] sql = new String[15]; sql[0] = """ CREATE TABLE IF NOT EXISTS address ( id integer PRIMARY KEY, @@ -62,7 +62,8 @@ public class Database { sql[2] = """ CREATE TABLE IF NOT EXISTS allergy ( id integer PRIMARY KEY, - name text UNIQUE + name text UNIQUE, + handle text UNIQUE );"""; sql[3] = """ CREATE TABLE IF NOT EXISTS severity ( @@ -156,6 +157,11 @@ public class Database { FOREIGN KEY(food_planid) REFERENCES food_plan(id), FOREIGN KEY(foodid) REFERENCES food(id) );"""; + sql[14] = """ + CREATE TABLE IF NOT EXISTS price ( + id integer PRIMARY KEY, + price integer + );"""; try(Connection conn = connect(); Statement stmt = conn.createStatement()){ for(int i = 0; i < sql.length; i++){ stmt.execute(sql[i]); @@ -180,71 +186,71 @@ public class Database { INSERT OR IGNORE INTO food_type (id,name) VALUES ('3','Fleischhaltig');"""); sqls.add(""" - INSERT OR IGNORE INTO allergy (id,name) - VALUES('1','Eier');"""); + INSERT OR IGNORE INTO allergy (id,name,handle) + VALUES('1','Eier','a');"""); sqls.add(""" - INSERT OR IGNORE INTO allergy (id,name) - VALUES('2','Soja');"""); + INSERT OR IGNORE INTO allergy (id,name,handle) + VALUES('2','Soja','b');"""); sqls.add(""" - INSERT OR IGNORE INTO allergy (id,name) - VALUES('3','Milch');"""); + INSERT OR IGNORE INTO allergy (id,name,handle) + VALUES('3','Milch','c');"""); sqls.add(""" - INSERT OR IGNORE INTO allergy (id,name) - VALUES('4','Erdnüsse');"""); + INSERT OR IGNORE INTO allergy (id,name,handle) + VALUES('4','Erdnüsse','d');"""); sqls.add(""" - INSERT OR IGNORE INTO allergy (id,name) - VALUES('5','Weichtiere');"""); + INSERT OR IGNORE INTO allergy (id,name,handle) + VALUES('5','Weichtiere','e');"""); sqls.add(""" - INSERT OR IGNORE INTO allergy (id,name) - VALUES('6','Krebstiere');"""); + INSERT OR IGNORE INTO allergy (id,name,handle) + VALUES('6','Krebstiere','f');"""); sqls.add(""" - INSERT OR IGNORE INTO allergy (id,name) - VALUES('7','Getreide');"""); + INSERT OR IGNORE INTO allergy (id,name,handle) + VALUES('7','Getreide','g');"""); sqls.add(""" - INSERT OR IGNORE INTO allergy (id,name) - VALUES('8','Senf');"""); + INSERT OR IGNORE INTO allergy (id,name,handle) + VALUES('8','Senf','h');"""); sqls.add(""" - INSERT OR IGNORE INTO allergy (id,name) - VALUES('9','Sesam');"""); + INSERT OR IGNORE INTO allergy (id,name,handle) + VALUES('9','Sesam','i');"""); sqls.add(""" - INSERT OR IGNORE INTO allergy (id,name) - VALUES('10','Schwefeldioxid und Sulfit');"""); + INSERT OR IGNORE INTO allergy (id,name,handle) + VALUES('10','Schwefeldioxid und Sulfit','j');"""); sqls.add(""" - INSERT OR IGNORE INTO allergy (id,name) - VALUES('11','Nüsse');"""); + INSERT OR IGNORE INTO allergy (id,name,handle) + VALUES('11','Nüsse','k');"""); sqls.add(""" - INSERT OR IGNORE INTO allergy (id,name) - VALUES('12','Sellerie');"""); + INSERT OR IGNORE INTO allergy (id,name,handle) + VALUES('12','Sellerie','l');"""); sqls.add(""" - INSERT OR IGNORE INTO allergy (id,name) - VALUES('13','Fische');"""); + INSERT OR IGNORE INTO allergy (id,name,handle) + VALUES('13','Fische','m');"""); sqls.add(""" - INSERT OR IGNORE INTO allergy (id,name) - VALUES('14','Lupinen');"""); + INSERT OR IGNORE INTO allergy (id,name,handle) + VALUES('14','Lupinen','n');"""); sqls.add(""" - INSERT OR IGNORE INTO allergy (id,name) - VALUES('15','Nitrit-Pökelsalz');"""); + INSERT OR IGNORE INTO allergy (id,name,handle) + VALUES('15','Nitrit-Pökelsalz','1');"""); sqls.add(""" - INSERT OR IGNORE INTO allergy (id,name) - VALUES('16','Phosphat');"""); + INSERT OR IGNORE INTO allergy (id,name,handle) + VALUES('16','Phosphat','2');"""); sqls.add(""" - INSERT OR IGNORE INTO allergy (id,name) - VALUES('17','Nitrat');"""); + INSERT OR IGNORE INTO allergy (id,name,handle) + VALUES('17','Nitrat','3');"""); sqls.add(""" - INSERT OR IGNORE INTO allergy (id,name) - VALUES('18','Antioxidationsmittel');"""); + INSERT OR IGNORE INTO allergy (id,name,handle) + VALUES('18','Antioxidationsmittel','4');"""); sqls.add(""" - INSERT OR IGNORE INTO allergy (id,name) - VALUES('19','Farbstoff');"""); + INSERT OR IGNORE INTO allergy (id,name,handle) + VALUES('19','Farbstoff','5');"""); sqls.add(""" - INSERT OR IGNORE INTO allergy (id,name) - VALUES('20','Geschmacksverstärker');"""); + INSERT OR IGNORE INTO allergy (id,name,handle) + VALUES('20','Geschmacksverstärker','6');"""); sqls.add(""" - INSERT OR IGNORE INTO allergy (id,name) - VALUES('21','Süßungsmittel');"""); + INSERT OR IGNORE INTO allergy (id,name,handle) + VALUES('21','Süßungsmittel','7');"""); sqls.add(""" - INSERT OR IGNORE INTO allergy (id,name) - VALUES('22','Konservierungsstoff');"""); + INSERT OR IGNORE INTO allergy (id,name,handle) + VALUES('22','Konservierungsstoff','8');"""); sqls.add(""" INSERT OR IGNORE INTO severity (id,name) VALUES('1','Harmlos');"""); @@ -254,6 +260,9 @@ public class Database { sqls.add(""" INSERT OR IGNORE INTO severity (id,name) VALUES('3','Kritisch');"""); + sqls.add(""" + INSERT OR IGNORE INTO price (id,price) + VALUES('1','500');"""); try(Connection conn = connect(); Statement stmt = conn.createStatement()){ for (String sql : sqls) { stmt.execute(sql); diff --git a/src/main/java/com/bib/essensbestellungsverwaltung/Food.java b/src/main/java/com/bib/essensbestellungsverwaltung/Food.java new file mode 100644 index 0000000..f8b3816 --- /dev/null +++ b/src/main/java/com/bib/essensbestellungsverwaltung/Food.java @@ -0,0 +1,62 @@ +package com.bib.essensbestellungsverwaltung; +/* + @author Malte Schulze Hobeling + */ + +import java.util.List; + +public class Food { + private long id; + private String name; + private String description; + private boolean isDessert; + private FoodType foodType; + private List allergies; + + public Food(long id, String name, String description, boolean isDessert, FoodType foodType, List allergies) { + this.id = id; + this.name = name; + this.description = description; + this.isDessert = isDessert; + this.foodType = foodType; + this.allergies = allergies; + } + + public Food(String name, String description, boolean isDessert, FoodType foodType, List allergies) { + this.id = -1; + this.name = name; + this.description = description; + this.isDessert = isDessert; + this.foodType = foodType; + this.allergies = allergies; + } + + public long getId() { + return id; + } + + public String getName() { + return name; + } + + public String getDescription() { + return description; + } + + public boolean isDessert() { + return isDessert; + } + + public FoodType getFoodType() { + return foodType; + } + + public List getAllergies() { + return allergies; + } + + @Override + public String toString() { + return getName(); + } +} diff --git a/src/main/java/com/bib/essensbestellungsverwaltung/FoodMgr.java b/src/main/java/com/bib/essensbestellungsverwaltung/FoodMgr.java index 5aa44b8..ac1bcc1 100644 --- a/src/main/java/com/bib/essensbestellungsverwaltung/FoodMgr.java +++ b/src/main/java/com/bib/essensbestellungsverwaltung/FoodMgr.java @@ -6,21 +6,21 @@ package com.bib.essensbestellungsverwaltung; import java.util.ArrayList; import java.util.List; + public class FoodMgr { /** * inserts a food int to the database and creates the food_restriction entries - * @param foodData name, description, isdessert, food_typeid - * @param allergyData allergyids * @return id of food or -1 */ - public static long createFood(String[] foodData, String[] allergyData){ + public static long createFood(Food food){ String[] foodH = {"name","description","isDessert","food_typeid"}; String[] food_restrictionH = {"foodid","allergyid"}; - long id = Database.insert("food",foodH,foodData); - if(allergyData.length > 0){ + String[] foodD = {food.getName(),food.getDescription(),(food.isDessert() ? "1" : "0"), String.valueOf(food.getFoodType().getId())}; + long id = Database.insert("food",foodH,foodD); + if(food.getAllergies().size() > 0){ String sId = String.valueOf(id); - for (String allergyId : allergyData) { - String[] food_restrictionD = {sId,allergyId}; + for (Allergy allergy : food.getAllergies()) { + String[] food_restrictionD = {sId, String.valueOf(allergy.getId())}; Database.insert("food_restriction",food_restrictionH, food_restrictionD); } } @@ -29,12 +29,16 @@ public class FoodMgr { /** * inserts a food_plan into the database - * @param food_planData date[YYYY-MM-DD], foodid[vegan], foodid, foodid[dessert,vegan], foodid[dessert] * @return id of food_plan or -1 */ - public static long createFood_plan(String[] food_planData){ + public static long createFood_plan(FoodPlan foodPlan){ String[] food_planH = {"date","food1","food2","dessert1","dessert2"}; - return Database.insert("food_plan",food_planH,food_planData); + String[] food_planD = {foodPlan.getDate(), + String.valueOf(foodPlan.getFoodVegan().getId()), + String.valueOf(foodPlan.getFoodSecond().getId()), + String.valueOf(foodPlan.getDessertVegan().getId()), + String.valueOf(foodPlan.getDessertSecond().getId())}; + return Database.insert("food_plan",food_planH,food_planD); } /** @@ -42,10 +46,16 @@ public class FoodMgr { * @param isDessert true for only desserts false for non desserts * @return a list of all non desserts or all desserts */ - public static List getFood(boolean isDessert){ + public static List getFood(boolean isDessert){ String[] foodH = {"isDessert"}; String[] foodD = {(isDessert ? "1" : "0")}; - return Database.select("food",foodH,foodD); + List entries = Database.select("food",foodH,foodD); + List foods = new ArrayList<>(); + for (String entry : entries) { + String[] parts = entry.split(":"); + foods.add(getFoodById(Long.parseLong(parts[0]))); + } + return foods; } /** @@ -53,10 +63,16 @@ public class FoodMgr { * @param isDessert true for only desserts false for non desserts * @return a list of all vegan non desserts or all vegan desserts */ - public static List getVeganFood(boolean isDessert){ + public static List getVeganFood(boolean isDessert){ String[] foodH = {"isDessert","food_typeid"}; String[] foodD = {(isDessert ? "1" : "0"),"1"}; - return Database.select("food",foodH,foodD); + List entries = Database.select("food",foodH,foodD); + List foods = new ArrayList<>(); + for (String entry : entries) { + String[] parts = entry.split(":"); + foods.add(getFoodById(Long.parseLong(parts[0]))); + } + return foods; } /** @@ -64,14 +80,66 @@ public class FoodMgr { * @param date YYYY-MM-DD one day * @return food_plan for date */ - public static List getFood_plan(String date){ + public static FoodPlan getFoodPlan(String date){ String[] food_planH = {"date"}; String[] food_planD = {date}; - return Database.select("food_plan",food_planH,food_planD); + List entry = Database.select("food_plan",food_planH,food_planD); + String[] parts = entry.get(0).split(":"); + Food foodVegan = getFoodById(Long.parseLong(parts[2])); + Food foodSecond = getFoodById(Long.parseLong(parts[3])); + Food dessertVegan = getFoodById(Long.parseLong(parts[4])); + Food dessertSecond = getFoodById(Long.parseLong(parts[5])); + boolean isSent = !parts[6].equals("0"); + return new FoodPlan(Long.parseLong(parts[0]),date,foodVegan,foodSecond,dessertVegan,dessertSecond,isSent); } - public static List getFoodById(long id){ - return Database.getEntryById("food",id); + public static FoodPlan getFoodPlanById(long id){ + List entry = Database.getEntryById("food_plan",id); + String[] parts = entry.get(0).split(":"); + Food foodVegan = getFoodById(Long.parseLong(parts[2])); + Food foodSecond = getFoodById(Long.parseLong(parts[3])); + Food dessertVegan = getFoodById(Long.parseLong(parts[4])); + Food dessertSecond = getFoodById(Long.parseLong(parts[5])); + boolean isSent = !parts[6].equals("0"); + return new FoodPlan(id,parts[1], foodVegan,foodSecond,dessertVegan,dessertSecond,isSent); + } + + public static Food getFoodById(long id){ + List entry = Database.getEntryById("food",id); + String[] parts = entry.get(0).split(":"); + String name = parts[1]; + String description = parts[2]; + boolean isDessert; + isDessert = parts[3].equals("0"); + FoodType foodType = getFoodTypeById(Long.parseLong(parts[4])); + List allergies = getAllergies(id); + return new Food(id,name,description,isDessert,foodType,allergies); + } + + public static FoodType getFoodTypeById(long id){ + List entry = Database.getEntryById("food_type",id); + String[] typeParts = entry.get(0).split(":"); + return new FoodType(Long.parseLong(typeParts[0]),typeParts[1]); + } + + public static Allergy getAllergyById(long id){ + String[] allergyH = {"id"}; + String[] allergyD = {String.valueOf(id)}; + List allergies = Database.select("allergy",allergyH,allergyD); + String[] allergyParts = allergies.get(0).split(":"); + return new Allergy(id,allergyParts[1],allergyParts[2]); + } + + public static List getAllergies(long foodId){ + List allergies = new ArrayList<>(); + String[] restrictionsH = {"foodid"}; + String[] restrictionsD = {String.valueOf(foodId)}; + List restrictions = Database.select("food_restriction",restrictionsH,restrictionsD); + for (String restriction : restrictions) { + String[] partsRestrictions = restriction.split(":"); + allergies.add(getAllergyById(Long.parseLong(partsRestrictions[2]))); + } + return allergies; } /** @@ -81,9 +149,8 @@ public class FoodMgr { */ public static long createFood_selection(String[] food_selectionData){ String[] food_selectionH = {"childid","food_planid","foodid"}; - List food_plan = Database.getEntryById("food_plan",Long.parseLong(food_selectionData[1])); - String[] food_planParts = food_plan.get(0).split(":"); - if(Long.parseLong(food_planParts[6]) == 0){ + FoodPlan food_plan = getFoodPlanById(Long.parseLong(food_selectionData[1])); + if(!food_plan.isSent()){ return Database.insert("food_selection",food_selectionH,food_selectionData); }else { return -1; @@ -97,19 +164,23 @@ public class FoodMgr { */ public static List getDayOrder(String date){ List orders = new ArrayList<>(); - List food_plan = getFood_plan(date); - String[] food_planParts = food_plan.get(0).split(":"); - for(int i = 2; i < 2+4; i++){ - List food = getFoodById(Long.parseLong(food_planParts[i])); - String[] foodParts = food.get(0).split(":"); - String foodName = foodParts[1]; - String[] food_selectionH = {"food_planid","foodid"}; - String[] food_selectionD = {food_planParts[0],foodParts[0]}; + FoodPlan food_plan = getFoodPlan(date); + String sId = String.valueOf(food_plan.getId()); + String[] food_selectionH = {"food_planid","foodid"}; + Food[] foodArray = { + food_plan.getFoodVegan(), + food_plan.getFoodSecond(), + food_plan.getDessertVegan(), + food_plan.getDessertSecond() + }; + for(int i = 0; i < 4; i++){ + String foodName = foodArray[i].getName(); + String[] food_selectionD = {sId, String.valueOf(foodArray[i].getId())}; int count = Database.count("food_selection",food_selectionH,food_selectionD); - orders.add(foodName+":"+count); + orders.add(count+" X "+foodName); } String[] updateH = {"id","issent"}; - String[] updateD = {food_planParts[0],"1"}; + String[] updateD = {sId,"1"}; if(Database.update("food_plan",updateH,updateD) < 0){ System.out.println("Fehler"); } diff --git a/src/main/java/com/bib/essensbestellungsverwaltung/FoodPlan.java b/src/main/java/com/bib/essensbestellungsverwaltung/FoodPlan.java new file mode 100644 index 0000000..c0b10a2 --- /dev/null +++ b/src/main/java/com/bib/essensbestellungsverwaltung/FoodPlan.java @@ -0,0 +1,58 @@ +package com.bib.essensbestellungsverwaltung; + +public class FoodPlan { + private long id; + private String date; + private Food foodVegan; + private Food foodSecond; + private Food dessertVegan; + private Food dessertSecond; + private boolean isSent; + + public FoodPlan(long id, String date, Food foodVegan, Food foodSecond, Food dessertVegan, Food dessertSecond, boolean isSent) { + this.id = id; + this.date = date; + this.foodVegan = foodVegan; + this.foodSecond = foodSecond; + this.dessertVegan = dessertVegan; + this.dessertSecond = dessertSecond; + this.isSent = isSent; + } + public FoodPlan(String date, Food foodVegan, Food foodSecond, Food dessertVegan, Food dessertSecond) { + this.id = -1; + this.date = date; + this.foodVegan = foodVegan; + this.foodSecond = foodSecond; + this.dessertVegan = dessertVegan; + this.dessertSecond = dessertSecond; + this.isSent = false; + } + + public long getId() { + return id; + } + + public String getDate() { + return date; + } + + public Food getFoodVegan() { + return foodVegan; + } + + public Food getFoodSecond() { + return foodSecond; + } + + public Food getDessertVegan() { + return dessertVegan; + } + + public Food getDessertSecond() { + return dessertSecond; + } + + public boolean isSent() { + return isSent; + } +} diff --git a/src/main/java/com/bib/essensbestellungsverwaltung/FoodType.java b/src/main/java/com/bib/essensbestellungsverwaltung/FoodType.java new file mode 100644 index 0000000..be7ca6a --- /dev/null +++ b/src/main/java/com/bib/essensbestellungsverwaltung/FoodType.java @@ -0,0 +1,22 @@ +package com.bib.essensbestellungsverwaltung; +/* + @author Malte Schulze Hobeling + */ + +public class FoodType { + private long id; + private String name; + + public FoodType(long id, String name) { + this.id = id; + this.name = name; + } + + public long getId() { + return id; + } + + public String getName() { + return name; + } +} diff --git a/src/main/java/com/bib/essensbestellungsverwaltung/Parent.java b/src/main/java/com/bib/essensbestellungsverwaltung/Parent.java new file mode 100644 index 0000000..616e432 --- /dev/null +++ b/src/main/java/com/bib/essensbestellungsverwaltung/Parent.java @@ -0,0 +1,24 @@ +package com.bib.essensbestellungsverwaltung; +/* + @author Malte Schulze Hobeling + */ + +import java.util.ArrayList; +import java.util.List; + +public class Parent extends User{ + List children; + + public Parent(long id, String name, String firstname, String password, String email, Address address, List children) { + super(id, name, firstname, password, email, address); + this.children = children; + } + public Parent(String name, String firstname, String password, String email, Address address) { + super(name, firstname, password, email, address); + this.children = new ArrayList<>(); + } + + public List getChildren() { + return children; + } +} diff --git a/src/main/java/com/bib/essensbestellungsverwaltung/User.java b/src/main/java/com/bib/essensbestellungsverwaltung/User.java new file mode 100644 index 0000000..23cd3e0 --- /dev/null +++ b/src/main/java/com/bib/essensbestellungsverwaltung/User.java @@ -0,0 +1,54 @@ +package com.bib.essensbestellungsverwaltung; +/* + @author Malte Schulze Hobeling + */ + +public class User { + private long id; + private String name; + private String firstname; + private String password; + private String email; + private Address address; + + public User(long id, String name, String firstname, String password, String email, Address address) { + this.id = id; + this.name = name; + this.firstname = firstname; + this.password = password; + this.email = email; + this.address = address; + } + public User(String name, String firstname, String password, String email, Address address) { + this.id = -1; + this.name = name; + this.firstname = firstname; + this.password = password; + this.email = email; + this.address = address; + } + + public long getId() { + return id; + } + + public String getName() { + return name; + } + + public String getFirstname() { + return firstname; + } + + public String getPassword() { + return password; + } + + public String getEmail() { + return email; + } + + public Address getAddress() { + return address; + } +} diff --git a/src/main/java/com/bib/essensbestellungsverwaltung/Worker.java b/src/main/java/com/bib/essensbestellungsverwaltung/Worker.java new file mode 100644 index 0000000..e4a7d5c --- /dev/null +++ b/src/main/java/com/bib/essensbestellungsverwaltung/Worker.java @@ -0,0 +1,13 @@ +package com.bib.essensbestellungsverwaltung; +/* + @author Malte Schulze Hobeling + */ + +public class Worker extends User{ + public Worker(long id, String name, String firstname, String password, String email, Address address) { + super(id, name, firstname, password, email, address); + } + public Worker(String name, String firstname, String password, String email, Address address) { + super(name, firstname, password, email, address); + } +}