development-ib-fork/web/06/labor/06_aufgaben.md

74 lines
3.0 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

# Übungsblatt 06
## 1. SWAGGER-Übung: Workshop-API
**Aufgabenstellung**: Erstellen Sie eine OpenAPI-Spezifikation für die Workshop-Anmeldung aus Übungsblatt 04 ([HTML-Formular](workshop-anmeldung.html)).
#### Arbeitsschritte
1. Setzen die OpenAPI-Version auf `3.0.0`.
2. Setzen Sie Meta-Daten wie Titel und API-Version im Info-Objekt.
3. Setzen Sie `https://web4-637691723779.europe-west1.run.app` als URL im Servers-Objekt.
4. Setzen Sie einen **Pfad** `/registrierung` für die HTTP-Methode `POST`. Definieren Sie eine Beschreibung, den Request-Body sowie mögliche Antworten des Servers.
1. Request-Body für die Übergabe von **Formulardaten**
2. Request-Body für die Übergabe von **JSON-Daten**
_Tipp: Verwenden Sie das Components-Objekt._
5. Verwenden Sie Enums (https://swagger.io/docs/specification/v3_0/data-models/enums/) für die Spezifikation der Checkboxen und der Radiobuttons (s. Hinweis unten).
- Beispiel für `enum` in JSON-OpenAPI:
```json
"farbe": {
"type": "string",
"enum": ["rot","gruen","blau"],
"example": "gruen"
},
```
6. Testen Sie Ihre API-Spezifikation mit Swagger.
#### Hinweis
Der serverseitige API-Endpunkt hat sich geändert (neue URL: `https://web4-637691723779.europe-west1.run.app`) und wurde nun folgendermaßen implementiert:
1. Wenn die Checkbox aktiviert wurde, wird für **agb**, **newsletter** und **equipment** nur noch der Wert (`value`-Attribut) _ja_ akzeptiert.
2. Für **format** werden die Werte (`value`-Attribut) _online_ und _praesenz_ akzeptiert, je nach dem, welcher Radiobutton aktiviert wurde.
3. Die Eingabefelder zu Vorname, Nachname, AGB und Format sind nun Pflichtfelder.
## 2. Go-Übung: Kommandozeilenprogramm
**Aufgabenstellung**: Entwickeln Sie ein Kommandozeilenprogramm in Go, mit dem Nutzer:innen ihre persönliche Büchersammlung verwalten können.
#### Arbeitsschritte
Implementieren Sie ein Programm mit folgenden Funktionen:
1. **Buch hinzufügen**
```bash
go run main.go book.go add "Titel" "Autor"
```
→ Fügt ein neues Buch zur Sammlung hinzu.
2. **Bücher auflisten**
```bash
go run main.go book.go list
```
→ Zeigt alle Bücher mit ID, Titel, Autor und Lesestatus.
3. **Buch als gelesen markieren**
```bash
go run main.go book.go read <ID>
```
→ Markiert das Buch mit der angegebenen ID als gelesen.
4. **Persistenz**
- Die Bücher sollen in einer Datei `books.json` gespeichert und beim Programmstart wieder geladen werden.
- Verwenden Sie dafür das `encoding/json`-Paket und `os.ReadFile` / `os.WriteFile`.
### Hinweise
- Verwenden Sie `struct` für die Buch- und Bibliotheksdaten.
- Arbeiten Sie mit `slice` zur Verwaltung der Bücherliste.
- Nutzen Sie Methoden zur Kapselung von Logik (z.B. `Add`, `MarkRead`, `Save`).
- Behandeln Sie Fehler sinnvoll und benutzerfreundlich.
- Strukturieren Sie Ihr Projekt in mindestens zwei Dateien (`main.go`, `book.go`). Hierzu müssen Sie Module verwenden. Eine kurze Anleitung dazu finden Sie hier: [Abhängigkeiten mit go.mod](anleitung_extlib.md)