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:
parent
4f915afb06
commit
f307005c6d
11 changed files with 679 additions and 7 deletions
|
|
@ -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!
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue