diff --git a/src/main/java/Logik/Account.java b/src/main/java/Logik/Account.java index b5f6dd4..0f9be93 100644 --- a/src/main/java/Logik/Account.java +++ b/src/main/java/Logik/Account.java @@ -10,7 +10,7 @@ public class Account { // region Felder private String passwort; - private transient int id; + private /*transient*/ int id; private String name; @@ -65,5 +65,17 @@ public class Account { else if (this instanceof ElternAccount) rid = 1; } + + public Account(int id, String passwort, String name, String email) { + this.id = id; + this.passwort = passwort; + this.name = name; + this.email = email; + + if(this instanceof MitarbeiterAccount) + rid = 0; + else if (this instanceof ElternAccount) + rid = 1; + } // endregion } diff --git a/src/main/java/Logik/Kind.java b/src/main/java/Logik/Kind.java index 1174262..0d9e035 100644 --- a/src/main/java/Logik/Kind.java +++ b/src/main/java/Logik/Kind.java @@ -6,7 +6,7 @@ public class Kind { // region Felder - private transient int id; + private /*transient*/ int id; private String name; private String vorname; private int bid; diff --git a/src/main/java/RestAPISchnittstelle/IRestAPI.java b/src/main/java/RestAPISchnittstelle/IRestAPI.java index 565dda5..d805829 100644 --- a/src/main/java/RestAPISchnittstelle/IRestAPI.java +++ b/src/main/java/RestAPISchnittstelle/IRestAPI.java @@ -17,6 +17,8 @@ public interface IRestAPI { String get (String controllerName, int id, boolean bezahlt); + String get(String controllerName, String[] params); + //endregion // region put diff --git a/src/main/java/RestAPISchnittstelle/RestApiClient.java b/src/main/java/RestAPISchnittstelle/RestApiClient.java index e7c3716..3bff168 100644 --- a/src/main/java/RestAPISchnittstelle/RestApiClient.java +++ b/src/main/java/RestAPISchnittstelle/RestApiClient.java @@ -35,6 +35,8 @@ public class RestApiClient implements IRestAPI{ RestApiClient client1 = new RestApiClient(); + client1.delete("Kind", 15); + Tagesplan t = client1.getGerichteOnTag("2023-12-17"); @@ -131,6 +133,36 @@ public class RestApiClient implements IRestAPI{ } } + @Override + public String get(String controllerName, String[] params) { + String ende = ""; + for (String str : params) { + ende += str + ","; + } + ende = ende.substring(0, ende.length() - 1); + URI apiUri = URI.create(String.format("%s/%s?%s", urlBase, controllerName, ende)); + + HttpRequest httpRequest = HttpRequest.newBuilder() + .uri(apiUri) + .GET() + .build(); + + try { + // Send the request and get the response + HttpResponse httpResponse = client.send(httpRequest, HttpResponse.BodyHandlers.ofString()); + + // Print the response status code and body + System.out.println("Status Code: " + httpResponse.statusCode() + httpResponse.body()); + + return httpResponse.body(); + + //System.out.println("Response Body: " + test); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + /** * Methode für einen Put-Aufruf. Aktualisiert einen Eintrag. * diff --git a/src/main/java/de/subway_surfers/vpr_app/AccounterstellungMitarbeiter.java b/src/main/java/de/subway_surfers/vpr_app/AccounterstellungMitarbeiter.java index 9b8844f..bf5d064 100644 --- a/src/main/java/de/subway_surfers/vpr_app/AccounterstellungMitarbeiter.java +++ b/src/main/java/de/subway_surfers/vpr_app/AccounterstellungMitarbeiter.java @@ -5,6 +5,9 @@ import Logik.ElternAccount; import Logik.Kind; import Logik.MitarbeiterAccount; import RestAPISchnittstelle.RestApiClient; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonParser; import javafx.collections.ListChangeListener; import javafx.event.ActionEvent; import javafx.fxml.FXML; @@ -43,14 +46,30 @@ public class AccounterstellungMitarbeiter { kinder = new ArrayList<>(); } + /** + * Hauptmenü wird angezeigt + * + * @param actionEvent + * @author Sven Alteköster + */ public void onZurueck(ActionEvent actionEvent) { VerwaltungApplication.sceneWechseln("hauptmenue_mitarbeiter-view.fxml"); } + /** + * Der nutzer wird abgemeldet + * @param actionEvent + * @author Sven Alteköster + */ public void onAbmelden(ActionEvent actionEvent) { //VerwaltungApplication.abmelden(); } + /** + * Die Felder zum Erstellen von Kindern werden gelöscht + * @param actionEvent + * @author Sven Alteköster + */ public void onTypMitarbeiter(ActionEvent actionEvent) { kindDaten.getChildren().clear(); } @@ -58,9 +77,12 @@ public class AccounterstellungMitarbeiter { /** * Einfügen der Eingabefelder für Kinder, wenn der Eltern-Radiobutton ausgewählt wird * @param actionEvent + * @author Sven Alteköster */ public void onTypEltern(ActionEvent actionEvent) { //Einfügen der Eingabefelder für Kinder + + //Einfügen der Überschrift Label ueberschrift = new Label(); ueberschrift.setText("Daten des Kindes:"); kindDaten.addRow(0); @@ -68,18 +90,21 @@ public class AccounterstellungMitarbeiter { kindDaten.addRow(1); kindDaten.add(ueberschrift,0,0); + //Einfügen der Eingabe für den Vornamen eines Kindes kindDaten.addRow(1); Label vname = new Label("Vorname:"); kindDaten.add(vname, 0, 1); TextField vnameEingabe = new TextField(); kindDaten.add(vnameEingabe, 1, 1); + //Einfügen der Eingabe für den Nachnamen eines Kindes kindDaten.addRow(2); Label nname = new Label("Nachname:"); kindDaten.add(nname, 0, 2); TextField nnameEingabe = new TextField(); kindDaten.add(nnameEingabe, 1, 2); + //Einfügen der Eingabe für den Geburtstag eines Kindes kindDaten.addRow(3); Label geburtstag = new Label("Geburtstag: "); kindDaten.add(geburtstag, 0, 3); @@ -87,11 +112,15 @@ public class AccounterstellungMitarbeiter { geburtstagEingabe.setEditable(false); kindDaten.add(geburtstagEingabe, 1, 3); + //Einfügen des bestätigen Buttons kindDaten.addRow(4); Button hinzufuegen = new Button("hinzufügen"); kindDaten.add(hinzufuegen, 1, 4); - kindDaten.addRow(5); + if (kindDaten.getRowCount() < 5) { + kindDaten.addRow(5); + } + //wird der Button zum hinzufügen eines Kindes geclickt wird dieses Event ausgelöst hinzufuegen.setOnAction(e -> { Button neues = new Button(vnameEingabe.getText()); @@ -130,6 +159,11 @@ public class AccounterstellungMitarbeiter { }); } + /** + * Generiert ein zufälliges Passwort bestehend aus Buchstaben zwischen A und Z + * @return ein Passwort der länge pwLaenge + * @author Sven Alteköster + */ private String einmalPwGenerieren() { final int pwLaenge = 8; String pw = ""; @@ -143,14 +177,16 @@ public class AccounterstellungMitarbeiter { /** * Prüft, ob in allen Textfeldern für die Eltern Text steht. * @return true, wenn kein Feld leer ist + * @author Sven Alteköster */ private boolean eingabenGueltig() { return !accountname.getText().equals("") && !email.getText().equals("") && (typEltern.isSelected() || typMitarbeiter.isSelected()); } /** - * + * Speichert die Eingegebenen Daten in der Datenbank, wenn diese noch nicht vorhanden sind * @param actionEvent + * @author Sven Alteköster */ public void onSpeichern(ActionEvent actionEvent) { if (eingabenGueltig()) { @@ -160,15 +196,24 @@ public class AccounterstellungMitarbeiter { //Schnittstelle zur RestAPI RestApiClient api = new RestApiClient(); + Gson gson = new Gson(); + //id, die das Elternobjekt bekommt, dass im laufe der Methode erstellt wird + String[] accName = {String.format("name=%s", accountname.getText())}; + + String json = api.get("Benutzer", accName); int id = api.nextId("Benutzer"); + boolean kontoVorhanden = false; + if (!json.equals("false")) { + kontoVorhanden = true; + id = gson.fromJson(json, Account.class).getId(); + } //Erstellen des neuen Accounts Account neuer; //Handelt es sich um einen Elternaccount, werden alle Eingegebenen Kinder erstellt. if (typEltern.isSelected()) { neuer = new ElternAccount(String.format("%d",einmalpw.getText().hashCode()), accountname.getText(), email.getText()); - System.out.println(neuer.getEmail()); //Kinder dem neuen Account hinzufügen for (Kind k : kinder) { ((ElternAccount)neuer).getKinder().add(k); @@ -185,10 +230,11 @@ public class AccounterstellungMitarbeiter { //Die Liste, zum Speichern der gespeicherten Liste wird zurückgesetzt, da die Kinder jetzt im Elternobjekt gespeichert werden kinder.clear(); - Gson gson = new Gson(); + //Das Elternelement wird in der DB gespeichert, wenn es keinen gleichnamigen Account gibt. + if (!kontoVorhanden) { + api.post("Benutzer", gson.toJson(neuer)); + } - //Das Elternelement wird in der DB gespeichert. - api.post("Benutzer", gson.toJson(neuer)); //handelt es sich um einen Elternaccount, werden alle Kind-Objekte in der DB gespeichert if (neuer instanceof ElternAccount) { @@ -203,5 +249,69 @@ public class AccounterstellungMitarbeiter { else { status.setText("Accounterstellung Fehlgeschlagen"); } + + kindanzeige.getChildren().clear(); + kinder.clear(); + } + + /** + * Lädt alle zugehörigen Daten aus der Datenbank, die mit dem eingegebenen Benutzernamen übereinstimmen + * @param actionEvent + * @author Sven Alteköster + */ + public void onLaden(ActionEvent actionEvent) { + kindanzeige.getChildren().clear(); + kinder.clear(); + + Gson gson = new Gson(); + RestApiClient api = new RestApiClient(); + + String[] params = {String.format("name=%s", accountname.getText())}; + String jsonAcc = api.get("Benutzer", params); + + Account acc; + //Handelt es sich um einen Mitarbeiter, wird dieser ausgewählt un die zugehörigen Felder werden ausgefüllt + if (jsonAcc.contains("\"rid\":\"0\"")) { + acc = gson.fromJson(jsonAcc, MitarbeiterAccount.class); + + accountTyp.selectToggle(typMitarbeiter); + } + //Handelt es sich um einen Elternaccount werden die Felder ausgefüllt und alle Kinder geladen + else if (jsonAcc.contains("\"rid\":\"1\"")) { + acc = gson.fromJson(jsonAcc, ElternAccount.class); + + accountTyp.selectToggle(typEltern); + onTypEltern(new ActionEvent()); + + kindDaten.addRow(5); + + String jsonString = api.get("Kind", acc.getId()); + JsonElement je = JsonParser.parseString(jsonString); + JsonArray ja = je.getAsJsonArray(); + + //Alle Kinder werden als clickbarer Button eingefügt + for (JsonElement str : ja) { + Kind kind = gson.fromJson(str, Kind.class); + + Button btn = new Button(); + btn.setText(kind.getVorname()); + + kindanzeige.getChildren().add(btn); + + //Wird der Button gecklickt, wird das Kind gelöscht + btn.setOnAction(a -> { + api.delete("Kind", kind.getId()); + //Der geclickte Button wird entfernt + ((HBox) btn.getParent()).getChildren().remove(btn); + }); + } + + } + //Wird der Account nicht gefunden, wird abgebrochen + else { + status.setText("Account nicht gefunden"); + return; + } + email.setText(acc.getEmail()); } } diff --git a/src/main/resources/de/subway_surfers/vpr_app/accounterstellung_mitarbeiter.fxml b/src/main/resources/de/subway_surfers/vpr_app/accounterstellung_mitarbeiter.fxml index dfc7714..2cb05a3 100644 --- a/src/main/resources/de/subway_surfers/vpr_app/accounterstellung_mitarbeiter.fxml +++ b/src/main/resources/de/subway_surfers/vpr_app/accounterstellung_mitarbeiter.fxml @@ -51,6 +51,7 @@