# Ü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 ``` → 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)