diff --git a/domain/services.go b/domain/services.go new file mode 100644 index 0000000..4814aae --- /dev/null +++ b/domain/services.go @@ -0,0 +1,22 @@ +package domain + + +// CurrencyConverter is a domain service for currency conversion operations +type CurrencyConverter struct{} + +// NewCurrencyConverter creates a new CurrencyConverter +func NewCurrencyConverter() *CurrencyConverter { + return &CurrencyConverter{} +} + +// Convert converts money from one currency to another using the provided rate +func (c *CurrencyConverter) Convert(money Money, rate Rate) (Money, error) { + if money.Currency.Code != rate.From.Code { + return Money{}, ErrCurrencyMismatch + } + + convertedAmount := money.Amount.Mul(rate.Value) + + return NewMoneyFromDecimal(convertedAmount, rate.To) +} +