feat(workshop): add bonus exercises for custom providers and currencies

Introduce optional bonus tasks in part4 covering:
- CSV-based exchange rate provider
- historical exchange rate provider with date handling
- custom currency (DKP) with bidirectional conversion

Provide exercise scaffolding and tests for all scenarios.

Signed-off-by: Marcus Fihlon <marcus@fihlon.swiss>
This commit is contained in:
Marcus Fihlon 2026-04-20 10:01:47 +02:00
parent 59d2342104
commit 8e61f2d2e2
Signed by: McPringle
GPG key ID: C6B7F469EE363E1F
11 changed files with 677 additions and 4 deletions

View file

@ -154,9 +154,11 @@ BigDecimal amount = new BigDecimal("10.123") // gültig oder nicht?
<div class="my-6"></div>
- CHF: 2 Nachkommastellen
- JPY: keine Nachkommastellen
- TND: 3 Nachkommastellen
<ul v-click>
<li>CHF: 2 Nachkommastellen</li>
<li>JPY: keine Nachkommastellen</li>
<li>TND: 3 Nachkommastellen</li>
</ul>
---
@ -991,6 +993,66 @@ Warenkorb / Bestellung
---
# Bonusaufgabe 1
Eigener Exchange Rate Provider
Package: `swiss.fihlon.workshop.money.part4`
- Implementiere einen eigenen `ExchangeRateProvider`
- Lade Wechselkurse aus `exchange-rates.csv`
- CSV enthält:
- Quellwährung
- Zielwährung
- Wechselkurs
- Stelle Umrechnungen zwischen den Währungen bereit
- Noch **ohne** Historisierung
Relevante Interfaces: `ExchangeRateProvider`
👉 Ziel: eigener Provider mit lokal geladenen Kursen
---
# Bonus 2
Historische Kurse
Package: `swiss.fihlon.workshop.money.part4`
- Erweitere deinen Provider aus Bonus 1
- Verwende `exchange-rates-hist.csv`
- CSV enthält zusätzlich:
- Datum pro Wechselkurs
- Wähle den passenden Kurs für ein angefragtes Datum
- Fallback: sinnvoller Standard (z. B. letzter verfügbarer Kurs)
Relevante Interfaces: `ExchangeRateProvider`
👉 Ziel: zeitabhängige Wechselkurse unterstützen
---
# Bonus 3
Eigene Währung
Package: `swiss.fihlon.workshop.money.part4`
- Implementiere die eigene Währung `DKP`
- Vorgegebener Umrechnungsfaktor:
- 10 CHF = 1 DKP
- Baue einen eigenen Converter
- Unterstütze:
- CHF → DKP
- DKP → CHF
Relevante Interfaces: `CurrencyUnit` und `ExchangeRateProvider`
👉 Ziel: eigene Währung ins Modell integrieren
---
# Voraussetzungen
Java-Versionen
@ -1057,4 +1119,4 @@ layout: center
layout: center
---
# **Danke!**
# Danke!