# Übungsblatt 09 ### Hinweise: - Aufgabe 3 + 6: Keine Abgabe erforderlich - **Aufgabe 1 + 2 + 4 + 5: Abgabe erforderlich** Im Normalfall ist **immer** eine Abgabe erforderlich, es sei denn es gibt einen expliziten Hinweis! ## 1. Go-Übung: Datenbank INSERT **Aufgabenstellung**: Erstellen Sie ein Webserver-Programm in Go, dass beim Aufruf eines Endpunkts `/insert` einen neuen Datensatz in der Datenbank speichert. #### Hinweis Siehe [Hinweise zu Aufgaben 2 und 3](#Hinweise-zu-Aufgaben-1-und-2) weiter unten. ## 2. Go-Übung: Datenbank UPDATE **Aufgabenstellung**: Erweitern Sie das Programm aus Aufgabe 1 um einen neuen Endpunkt `/update`, der einen vorhandenen Datensatz in der Datenbank aktualisiert. #### Hinweis Siehe [Hinweise zu Aufgaben 1 und 2](#Hinweise-zu-Aufgaben-1-und-2) weiter unten. ### Hinweise zu Aufgaben 1 und 2 1. Erstellen Sie zunächst die benötigten Tabellen und Datensätze in Ihrer Datenbank. Eine Anleitung hierfür finden Sie hier: [Datenbank vorbereiten](db/anleitung_db.md) 2. Verwenden Sie folgende Schnittstellen-Definition für Ihre Implementierung: [Swagger-API](hobbiesapi.json) 3. Tipp: Um die Elemente eines Slice in einem String zusammenzufügen, können Sie das Paket `strings` aus der Standard-Bibliothek verwenden: [strings.Join](https://pkg.go.dev/strings#Join) ## 3. Dev-Container aktualisieren _Keine Abgabe erforderlich_ **Aufgabenstellung**: Aktualisieren Sie Ihren Dev-Dontainer in VS Code als Vorbereitung auf die nächste Vorlesung und Labor. #### Arbeitsschritte 1. Neueste Änderungen am `Dockerfile` holen ```bash git pull ``` 2. Sicherstellen, dass die neuen Dateien lokal da sind - Prüfe `.devcontainer/Dockerfile` auf einen neuen Eintrag zu ``` # Node.js 24 (LTS) installieren ``` 3. Dev-Container neu bauen - In VS Code: `F1` → **Dev Containers: Rebuild Container** - oder über die Statusleiste → **Rebuild Container** 4. Testen der neuen NodeJS-Installation ```bash node --version ``` Es sollte folgendes ausgegeben werden: ```bash v24.11.1 ``` ## 4. Javascript-Übung: Grundlagen **Aufgabenstellung**: Machen Sie sich zunächst mit den Grundlagen der Programmiersprache vertraut und schreiben Sie dann ein Programm, das über ein vorgegebenes Array von Zahlen iteriert und für jede Zahl ausgibt: - "Null" wenn die Zahl 0 ist - "Gerade Zahl" wenn die Zahl gerade ist - "Ungerade Zahl" wenn die Zahl ungerade ist *Ausgangsdaten*: ```js const zahlen = [38, 0, 226, 384, 111, 500383]; ``` #### Arbeitsschritte 1. Arbeiten Sie mindestens die folgenden Kapitel auf [Javascript Tutorial](https://www.w3schools.com/js/default.asp) durch: - JS Syntax - JS Variables - JS If Conditions - JS Loops 2. Verwenden Sie zur Lösung der Aufgabe eine **for‑Schleife** und den **ternären Operator**. 3. _Tipp_: `zahlen.length` liefert die aktuelle Länge des Arrays. ## 5. Javascript-Übung: Arrow-Function **Aufgabenstellung**: Die Produktdaten eines kleinen Online-Supermarkts liegen als Array von Objekten vor, jedes Objekt enthält den Namen und den Preis eines Produkts. Schreiben Sie eine kleine Javascript-Funktion, die ein neues Array erstellt, in dem alle Preise um 10 % reduziert sind. Die Preise sollen dabei auf zwei Nachkommastellen gerundet werden. *Ausgangsdaten*: ```json [ { "produkt": "Joghurt", "preis": 2.49 }, { "produkt": "Brot", "preis": 3.29 }, { "produkt": "Käse", "preis": 8.99 }, { "produkt": "Duschgel","preis": 2.79 } ] ``` #### Arbeitsschritte 1. Verwenden Sie `map`, um ein neues Array zu erzeugen. 2. Nutzen Sie eine Arrow-Function, um den Rabatt zu berechnen. 3. Mit `.toFixed(2)` können Sie die Preise auf zwei Nachkommastellen formatieren. 4. Geben Sie das neue Array in der Konsole aus. ## 6. Go-Übung: CORS _Keine Abgabe erforderlich_ **Aufgabenstellung**: Erweitern Sie die beiden serverseitigen Go-Programme zur Workshop-Anmeldung aus den vorangegangen Übungsblättern 07 und 08 so, dass beim Ausführen der "Try Out"-Funktion in der SwaggerUI-Preview kein CORS-Fehler mehr auftaucht. #### Arbeitsschritte 1. Fügen Sie folgende Zeile am Anfang in Ihrer Handler `func` oder in der `ServeHTTP`-Funktion ihres `http.Handler` auf: ```go w.Header().Set("Access-Control-Allow-Origin", "*") w.Header().Set("Access-Control-Allow-Methods", "GET, POST, OPTIONS") w.Header().Set("Access-Control-Allow-Headers", "Content-Type") if r.Method == "OPTIONS" { w.WriteHeader(http.StatusNoContent) return } ``` 2. Testen Sie Ihr(e) Programm(e) mit dieser [Workshop-API](workshop-api.json).