60 lines
2.3 KiB
PHP
60 lines
2.3 KiB
PHP
<?php
|
|
|
|
namespace App\Service\DTO;
|
|
|
|
use App\Entity\DTO\QRCode\QRCode;
|
|
use App\Entity\DTO\QRCode\QRCodeMoney;
|
|
use App\Entity\DTO\QRCode\QRCodePaymentIdentification;
|
|
use App\Entity\DTO\QRCode\QRCodeQROptions;
|
|
use Nubium\Exception\ThisShouldNeverHappenException;
|
|
use Symfony\Component\Validator\Validator\ValidatorInterface;
|
|
|
|
final readonly class QRCodeEntityConverter
|
|
{
|
|
public function __construct(private ValidatorInterface $validator) {
|
|
|
|
}
|
|
|
|
public function convert(\App\Entity\Input\QRCode\QRCode $code): QRCode {
|
|
if (count($this->validator->validate($code)) !== 0) {
|
|
throw new \InvalidArgumentException("QRCode entity is not valid");
|
|
}
|
|
|
|
return new QRCode(
|
|
$code->getIban() ?? throw new ThisShouldNeverHappenException("iban not set"),
|
|
\DateTimeImmutable::createFromMutable($code->getDueDate() ?? throw new ThisShouldNeverHappenException("due date not set")),
|
|
$code->getMessage() ?? throw new ThisShouldNeverHappenException("message not set"),
|
|
$this->convertMoney($code->getMoney() ?? throw new ThisShouldNeverHappenException("money not set")),
|
|
$this->convertCodeOptions($code->getCodeQROptions() ?? throw new ThisShouldNeverHappenException("codeQROptions not set")),
|
|
$this->convertIdentification($code->getPaymentIdentification())
|
|
);
|
|
}
|
|
|
|
protected function convertMoney(\App\Entity\Input\QRCode\QRCodeMoney $money): QRCodeMoney
|
|
{
|
|
return new QRCodeMoney(
|
|
$money->getAmount() ?? throw new ThisShouldNeverHappenException("amount not set"),
|
|
$money->getCurrency() ?? throw new ThisShouldNeverHappenException("currency not set")
|
|
);
|
|
}
|
|
|
|
protected function convertCodeOptions(\App\Entity\Input\QRCode\QRCodeQROptions $options): QRCodeQROptions
|
|
{
|
|
return new QRCodeQROptions(
|
|
$options->getScale(),
|
|
$options->getMargin()
|
|
);
|
|
}
|
|
|
|
protected function convertIdentification(?\App\Entity\Input\QRCode\QRCodePaymentIdentification $ident): ?QRCodePaymentIdentification {
|
|
return match ($ident) {
|
|
null => null,
|
|
default => new QRCodePaymentIdentification(
|
|
$ident->getVariableSymbol(),
|
|
$ident->getSpecificSymbol(),
|
|
$ident->getConstantSymbol()
|
|
)
|
|
};
|
|
}
|
|
}
|