diff --git a/web/09/09_loesungen/Arrow/arrow.js b/web/09/09_loesungen/Arrow/arrow.js new file mode 100644 index 0000000..c03309b --- /dev/null +++ b/web/09/09_loesungen/Arrow/arrow.js @@ -0,0 +1,20 @@ + +// Produktarray +const produkte = [ + { produkt: "Joghurt", preis: 2.49 }, + { produkt: "Brot", preis: 3.29 }, + { produkt: "Käse", preis: 8.99 }, + { produkt: "Duschgel", preis: 2.79 } +]; + +// neues Array + +const rabattProdukte = produkte.map(p => { + return { + produkt: p.produkt, + preis: (p.preis * 0.9).toFixed(2) // Preis um 10% reduziert und gerundet + }; +}); + +// Ausgabe +console.log(rabattProdukte); \ No newline at end of file diff --git a/web/09/09_loesungen/Aufgabe_1und2/go.mod b/web/09/09_loesungen/Aufgabe_1und2/go.mod new file mode 100644 index 0000000..32cf764 --- /dev/null +++ b/web/09/09_loesungen/Aufgabe_1und2/go.mod @@ -0,0 +1,5 @@ +module db_insert + +go 1.24.5 + +require github.com/lib/pq v1.10.9 diff --git a/web/09/09_loesungen/Aufgabe_1und2/go.sum b/web/09/09_loesungen/Aufgabe_1und2/go.sum new file mode 100644 index 0000000..aeddeae --- /dev/null +++ b/web/09/09_loesungen/Aufgabe_1und2/go.sum @@ -0,0 +1,2 @@ +github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= +github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= diff --git a/web/09/09_loesungen/Aufgabe_1und2/main.go b/web/09/09_loesungen/Aufgabe_1und2/main.go new file mode 100644 index 0000000..92d8ac4 --- /dev/null +++ b/web/09/09_loesungen/Aufgabe_1und2/main.go @@ -0,0 +1,166 @@ +package main + +import ( + "database/sql" + "fmt" + "log" + "net/http" + "strings" + + _ "github.com/lib/pq" +) + +// INSERT + +type insertHandler int + +func (ihandler insertHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + // auf Post prüfen + if r.Method != http.MethodPost { + http.Error(w, "Nur Post ist erlaubt", http.StatusMethodNotAllowed) + return + } + + //Formulardaten einlesen + err := r.ParseForm() + if err != nil { + http.Error(w, "gesendetes Formular ungültig", http.StatusBadRequest) + return + } + + name := r.FormValue("name") + alter := r.FormValue("alter") + hobbies := r.Form["hobby"] + + // alter und name sollten vorhanden sein + + if name == "" { + http.Error(w, "Name fehlt", http.StatusBadRequest) + return + } + + if alter == "" { + http.Error(w, "Alter fehlt", http.StatusBadRequest) + return + } + + // Hobbies mit Komma separiert zusammenfügen + alleHobbies := strings.Join(hobbies, ", ") + + //DB Verbindung öffnen + connStr := "user=devuser password=devpass dbname=devdb host=localhost port=5432 sslmode=disable" + + db, err := sql.Open("postgres", connStr) + if err != nil { + log.Println("Datenbank nicht erreichbar", err) + http.Error(w, "Server Fehler", http.StatusInternalServerError) + return + } + + defer db.Close() + + //Verbindung testen + err = db.Ping() + if err != nil { + log.Println("Datenbank nicht erreichbar", err) + http.Error(w, "Interner Server Error", http.StatusInternalServerError) + return + } + log.Println("Verbindung erfolgreich hergestellt") + + //Insert + + query := `INSERT INTO personen (name, hobbies, alter) VALUES ($1, $2, $3)` + _, err = db.Exec(query, name, alleHobbies, alter) + if err != nil { + log.Println("Fehler beim Einfügen der Daten", err) + http.Error(w, "Interner Server Fehler", http.StatusInternalServerError) + return + } + + fmt.Fprintln(w, "Datensatz erfolgreich eingefügt") + +} + +// UPDATE + +type updateHandler int + +func (uhandler updateHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + // nur POST erlauben + if r.Method != http.MethodPost { + http.Error(w, "Nur Post ist erlaubt", http.StatusMethodNotAllowed) + return + } + + // Formulardaten einlesen + err := r.ParseForm() + if err != nil { + http.Error(w, "gesendetes Formular ungültig", http.StatusBadRequest) + return + } + + name := r.FormValue("name") + alter := r.FormValue("alter") + hobbies := r.Form["hobby"] + + if name == "" { + http.Error(w, "Name fehlt", http.StatusBadRequest) + return + } + + if alter == "" { + http.Error(w, "Alter fehlt", http.StatusBadRequest) + return + } + + // Hobbies zusammenfügen + alleHobbies := strings.Join(hobbies, ", ") + + // DB-Verbindung + connStr := "user=devuser dbname=devdb host=localhost port=5432 sslmode=disable" + db, err := sql.Open("postgres", connStr) + if err != nil { + log.Println("Datenbank nicht erreichbar", err) + http.Error(w, "Server Fehler", http.StatusInternalServerError) + return + } + defer db.Close() + + err = db.Ping() + if err != nil { + log.Println("Datenbank nicht erreichbar", err) + http.Error(w, "Interner Server Fehler", http.StatusInternalServerError) + return + } + + // Update-Query + query := `UPDATE personen SET hobbies = $1, alter = $2 WHERE name = $3` + res, err := db.Exec(query, alleHobbies, alter, name) + if err != nil { + log.Println("Fehler beim Update", err) + http.Error(w, "Interner Server Fehler", http.StatusInternalServerError) + return + } + + rowsAffected, _ := res.RowsAffected() + if rowsAffected == 0 { + http.Error(w, "Kein Datensatz mit diesem Namen gefunden", http.StatusNotFound) + return + } + + fmt.Fprintln(w, "Datensatz erfolgreich aktualisiert") +} + +func main() { + + var ihandler insertHandler + var uhandler updateHandler + + http.Handle("/insert", ihandler) // Insert-Endpunkt + http.Handle("/update", uhandler) // Update-Endpunkt + + log.Println("Server startet auf http://localhost:8080") + log.Fatal(http.ListenAndServe("localhost:8080", nil)) + +} diff --git a/web/09/09_loesungen/JS_Grundlagen/grundlagen.js b/web/09/09_loesungen/JS_Grundlagen/grundlagen.js new file mode 100644 index 0000000..f09273a --- /dev/null +++ b/web/09/09_loesungen/JS_Grundlagen/grundlagen.js @@ -0,0 +1,9 @@ +const zahlen = [38, 0, 226, 384, 111, 500383]; + +for (let i = 0; i < zahlen.length; i++){ + if (zahlen[i] === 0){ + console.log("Null"); + } else { + console.log(zahlen[i] % 2 === 0 ? "Gerade Zahl" : "Ungerade Zahl") + } +} diff --git a/web/own_web/Anamese/Anamese.html b/web/own_web/Anamese/Anamese.html new file mode 100644 index 0000000..9e26db2 --- /dev/null +++ b/web/own_web/Anamese/Anamese.html @@ -0,0 +1,37 @@ + + + + + Anamesebogen + + +

Anamesebogen

+

Bitte ausfüllen

+
+
+ Persönliches + +

+ +

+ +

+ + +
+
+ Körperdaten + +

+ +

+
+ +
+ + \ No newline at end of file diff --git a/web/own_web/Anamese/main.go b/web/own_web/Anamese/main.go new file mode 100644 index 0000000..62ee68c --- /dev/null +++ b/web/own_web/Anamese/main.go @@ -0,0 +1,62 @@ +package main + +import ( + "encoding/json" + "net/http" + "time" +) + +// ist ein Struct sowas wie eine Klasse in Java ? +type Klient struct { + Name string `json:"name"` + Vorname string `json:"vorname"` + Gebdatum time.Time `json:"gebdatum"` + Geschlecht string `json:"gender"` + Gewicht int `json:"gewicht"` + Groesse int `json:"groesse"` +} + +func anameseHandler(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodPost { + http.Error(w, "Methode ungültig", http.StatusMethodNotAllowed) + return + } + // ist ka dann eine Art Objekt von der Klasse KLient? + var k Klient + + err := json.NewDecoder(r.Body).Decode(&k) + if err != nil { + http.Error(w, "Kein gültiges Json", http.StatusBadRequest) + return + } + + if k.Name == "" || k.Vorname == "" || k.Geschlecht == "" { + http.Error(w, "Pflichtfelder sind leer", http.StatusBadRequest) + return + } + + if k.Gebdatum.IsZero() { + http.Error(w, "Geburtsdatum fehlt", http.StatusBadRequest) + return + } + if k.Gewicht == 0 || k.Groesse == 0 { + warnings = append(warnings, "BMI kann nicht berechnet werden") + + } + + // Erfolg und Warnung zurückgeben wnn genu wird die response varibale genutzt? + response := map[string]interface{}{ + "message:": "Klient erfolgreich angelegt", + "warnings": warnings, + } + + //ok response habe ich hier gefunden, aber den Rest dieses Codes verstehe ich gerade nich + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(http.StatusCreated) + json.NewEncoder(w).Encode(response) + +} + +func main() { + +} diff --git a/web/own_web/Anamese/swagger.yaml b/web/own_web/Anamese/swagger.yaml new file mode 100644 index 0000000..72555fc --- /dev/null +++ b/web/own_web/Anamese/swagger.yaml @@ -0,0 +1,45 @@ +openapi: 3.0.x +info: + title: Anamese API + version: 1.0.0 + description: API für Anamesebogen +servers: + - url: http://localhost:8080 +paths: + /anamese: + post: + summary: Daten erfassen + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Klient' + responses: + '200': + description: Klient erfolgreich angelegt + '400': + description: Eingaben ungültig +components: + schemas: + Klient: + type: object + properties: + name: + type: string + vorname: + type: string + gebdatum: + type: date + gender: + type: string + enum: [weiblich, männluch, divers, ka] + gewicht: + type: number + groesse: + type: number + required: + - name + - vorname + - gebdatum + - gender diff --git a/web/own_web/Wichteln/swagger.yaml b/web/own_web/Wichteln/swagger.yaml new file mode 100644 index 0000000..4cc76b4 --- /dev/null +++ b/web/own_web/Wichteln/swagger.yaml @@ -0,0 +1,85 @@ +openapi: 3.0.x +info: + title: Wichteln + version: 1.0.0 + description: API für Wichtelaktion +servers: + - url: http://localhost:8080 +paths: + /wichtelaktion: + post: + summary: Aktion anlegen + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + name: + type: string + adminEmail: + type: string + format: email + startDate: + type: string + format: date + endDate: + type: string + format: date + required: + - name + - adminEmail + - startDate + - endDate + responses: + '200': + description: Aktion erfolgreich erstellt + '400': + description: Aktion konnte nicht erstellt werden + /wichtelaktion/{id}/invite: + post: + summary: Teilnehmer einladen und Tokens generieren + parameters: + - name: id + in: path + required: true + schema: + type: string + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + emails: + type: array + items: + type: string + reqired: + - emails + responses: + '200': + description: Teilnehmer erfolgreich eingeladen + '400': + description: Teilnehmer konnten nicht eingeladen werden + /wichtelaktion/{id}/: + put: + summary: Wichtelaktion bearbeiten + parameters: + - name: id + in: path + required: true + schema: + type: string + responseBody: + required: true + content: + application/json: + schema: + + + + +