ldc-boutique-cnc-sable/app/Providers/SerialCasterServiceProvider.php
Jérémy Munsch e0c4b34ed8
feat(employees): implement deterministic 6-character code generation using SerialCaster
- Add kwaadpepper/serial-int-caster and SerialCasterServiceProvider
- Update CodeGenerationService to encode Matricule deterministically with length 6
- Update Code value object to support lengths between 6 and 10 with 53 non-ambiguous characters
- Add database migration to sanitize legacy ambiguous codes
- Recreate and update unit and integration tests for CodeGenerationService and Code value object
2026-10-27 09:58:46 +01:00

56 lines
1.6 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Providers;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\ServiceProvider;
use Kwaadpepper\Serial\Converters\BaseConverter;
use Kwaadpepper\Serial\Converters\BCMathBaseConverter;
use Kwaadpepper\Serial\Converters\GmpBaseConverter;
use Kwaadpepper\Serial\Converters\NativeBaseConverter;
use Kwaadpepper\Serial\SerialCasterBuilder;
use Kwaadpepper\Serial\Shufflers\FisherYatesShuffler;
use Kwaadpepper\Serial\Shufflers\Shuffler;
class SerialCasterServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
#[\Override]
public function register()
{
$this->app->singleton(
BaseConverter::class,
fn () => match (true) {
extension_loaded('bcmath') => new BCMathBaseConverter(),
extension_loaded('gmp') => new GmpBaseConverter(),
default => new NativeBaseConverter(),
}
);
$this->app->singleton(
Shuffler::class,
fn () => new FisherYatesShuffler()
);
$this->app->singleton(
SerialCasterBuilder::class,
function (Application $app) {
$converter = $app->make(BaseConverter::class);
$shuffler = $app->make(Shuffler::class);
$seed = Config::integer('serial-caster.seed');
return new SerialCasterBuilder($converter)
->withShuffler($shuffler)
->withSeed($seed);
}
);
}
}