diff --git a/src/bank.ts b/src/bank.ts index b5ee9bd..590ceb7 100644 --- a/src/bank.ts +++ b/src/bank.ts @@ -3,9 +3,13 @@ import { Money } from './money'; export class Bank { reduce(source: Expression, to: string):Money { - return source.reduce(to); + return source.reduce(this, to); } - addRate(from: string, to: string, rate: number) { + addRate(from: string, to: string, rate: number) { + } + + rate(from: string, to: string): number { + return from === 'CHF' && to === 'USD' ? 2 : 1 } } diff --git a/src/expression.ts b/src/expression.ts index 120a2ba..cf9f153 100644 --- a/src/expression.ts +++ b/src/expression.ts @@ -1,5 +1,6 @@ +import { Bank } from "./bank"; import { Money } from "./money"; export interface Expression{ - reduce(to: string): Money; + reduce(bank: Bank, to: string): Money; } diff --git a/src/money.ts b/src/money.ts index 6916583..ee13485 100644 --- a/src/money.ts +++ b/src/money.ts @@ -1,3 +1,4 @@ +import { Bank } from "./bank"; import { Expression } from "./expression"; import { Sum } from "./sum"; @@ -33,8 +34,8 @@ export class Money implements Expression { return new Sum(this, addend); } - reduce(to: string): Money { - const rate = this.currency === 'CHF' && to === 'USD' ? 2 : 1; - return new Money(this.amount / rate, to) + reduce(bank: Bank,to: string): Money { + const rate = bank.rate(this.currency, to); + return new Money(this.amount / rate, to); } } diff --git a/src/sum.ts b/src/sum.ts index 8c3914f..59191d9 100644 --- a/src/sum.ts +++ b/src/sum.ts @@ -1,3 +1,4 @@ +import { Bank } from "./bank"; import { Expression } from "./expression"; import { Money } from "./money"; @@ -5,7 +6,7 @@ export class Sum implements Expression { constructor(public augend: Money, public addend: Money) { } - reduce(to: string):Money { + reduce(bank: Bank, to: string):Money { const amount :number = this.augend.amount + this.addend.amount; return new Money(amount, to); }