ldc-boutique-cnc-sable/app/Services/CodeGenerationService.php

47 lines
1.2 KiB
PHP
Raw Permalink Normal View History

<?php
declare(strict_types=1);
namespace App\Services;
use Domain\Models\ValueObjects\Code;
use Domain\Models\ValueObjects\Matricule;
use Kwaadpepper\Serial\SerialCaster;
use Kwaadpepper\Serial\SerialCasterBuilder;
class CodeGenerationService
{
private SerialCaster $serialCaster;
public function __construct(
SerialCasterBuilder $serialCasterBuilder
) {
$this->serialCaster = $serialCasterBuilder
->withChars(Code::ALLOWED_CHARACTERS)
->withLength(Code::LENGTH)
->build();
}
public function generateFrom(Matricule $matricule): Code
{
return $this->generateCodeFromMatricule($matricule);
}
private function generateCodeFromMatricule(Matricule $value): Code
{
$integerValue = $this->matriculeToInteger($value);
$codeValue = $this->serialCaster->encode($integerValue);
return new Code($codeValue);
}
private function matriculeToInteger(Matricule $matricule): int
{
if (! ctype_digit($matricule->value)) {
throw new \InvalidArgumentException('Matricule must be numeric');
}
return (int) $matricule->value;
}
}