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:04:51 +02:00
parent 4f915afb06
commit f307005c6d
Signed by: McPringle
GPG key ID: C6B7F469EE363E1F
11 changed files with 679 additions and 7 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>
---
@ -234,8 +236,7 @@ Was ist JSR-354?
- Spezifikation: Java Community Process (JCP)
- Referenzimplementierung: Moneta
- Entwickelt und gepflegt von der Java-Community
- Spec Lead JSR-354: Werner Keil
- Lead der Referenzimplementierung (Moneta): Anatole Tresch
- Spec Leads: Anatole Tresch, Werner Keil und Otavio Santana
👉 Open Source und gemeinschaftlich weiterentwickelt
@ -676,7 +677,7 @@ MonetaryAmount amountCHF = Money.of(10, "CHF");
ConversionQuery query = ConversionQueryBuilder.of()
.setTermCurrency("EUR")
.set(LocalDateTime.class, LocalDateTime.of(2026, 3, 13, 14, 3, 27))
.set(LocalDate.class, LocalDate.of(2026, 3, 13))
.build();
CurrencyConversion conversion = MonetaryConversions.getConversion(query);
@ -992,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
@ -1058,4 +1119,4 @@ layout: center
layout: center
---
# **Danke!**
# Danke!