ldc-boutique-cnc-sable/app/Dto/SettingDto.php

86 lines
1.8 KiB
PHP
Raw Permalink Normal View History

<?php
declare(strict_types=1);
namespace App\Dto;
use App\Models\Setting;
use Domain\Models\ValueObjects\ShopperSiteCode;
use Illuminate\Contracts\Routing\UrlRoutable;
use Illuminate\Contracts\Support\Arrayable;
/**
* @implements Arrayable<string, mixed>
*/
final readonly class SettingDto implements Arrayable, UrlRoutable
{
/**
* @param array<int, string> $employeeSites
*/
public function __construct(
public int $id,
public array $employeeSites = [],
) {
}
public static function fromModel(Setting $setting): self
{
return new self(
id: $setting->id,
employeeSites: $setting->employee_sites ?? [],
);
}
public function employeeSitesAsString(): string
{
return implode(', ', $this->employeeSites);
}
/**
* @return array<int, \Domain\Models\ValueObjects\ShopperSiteCode>
*/
public function getShopperSiteCodes(): array
{
return array_map(
static fn (string $site): ShopperSiteCode => new ShopperSiteCode($site),
$this->employeeSites
);
}
#[\Override]
public function getRouteKey(): mixed
{
return $this->id;
}
#[\Override]
public function getRouteKeyName(): string
{
return 'setting';
}
#[\Override]
public function resolveRouteBinding($value, $field = null): mixed
{
return null;
}
#[\Override]
public function resolveChildRouteBinding($childType, $value, $field): mixed
{
return null;
}
/**
* @return array{id: int, employee_sites: array<int, string>}
*/
#[\Override]
public function toArray(): array
{
return [
'id' => $this->id,
'employee_sites' => $this->employeeSites,
];
}
}