ensureCurrency($currencyCode); $this->setCurrencyCode($currencyCode); $this->setAmount($amount); } /** * @param $apiResult * * @return static */ public static function fromApiResult(object $apiResult): self { return new self((float)$apiResult->amount, $apiResult->currency_code); } /** * @param array $dbState * * @return static */ public static function fromDbState(array $dbState): self { return new self( (float)$dbState['amount'], empty($dbState['currency_code']) ? 'EUR' : $dbState['currency_code'] ); } /** * @return array */ public function toArray(): array { return [ 'currency_code' => $this->getCurrencyCode(), 'amount' => $this->getAmount(), ]; } /** * @return string */ public function getCurrencyCode(): string { return $this->currencyCode; } /** * @param string $currencyCode */ public function setCurrencyCode(string $currencyCode): void { $this->ensureCurrency($currencyCode); $this->currencyCode = $currencyCode; } /** * @return float */ public function getAmount(): float { return $this->amount; } /** * @param float $amount */ public function setAmount(float $amount): void { $this->amount = (float)number_format($amount, 2, '.', ''); } /** * @param string $currencyCode */ private function ensureCurrency(string $currencyCode): void { if (!in_array( $currencyCode, AmountsPerPaymentType::getAllowedCurrencies(), true )) { throw new InvalidArgumentException("invalid currency {$currencyCode}"); } } }