forked from WEB-IMB-WS2526/lab-development-imb
124 lines
4.5 KiB
Markdown
124 lines
4.5 KiB
Markdown
# Ü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 4 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). |