taktik-nette

This commit is contained in:
2025-01-22 22:52:26 +01:00
commit 8e2cd6ca68
45 changed files with 5410 additions and 0 deletions

31
app/UI/DTO/FilterDTO.php Normal file
View File

@@ -0,0 +1,31 @@
<?php
declare(strict_types=1);
namespace App\UI\DTO;
class FilterDTO
{
/**
* @param array<string, mixed> $filters
*/
public function __construct(public readonly array $filters = [])
{
}
/**
* @param array<string, mixed>|null $data
* @param array<int, string> $acceptFilters
* @return FilterDTO
*/
public static function createFromData(?array $data, array $acceptFilters = []): FilterDTO
{
if ($data === null) {
return new self([]);
}
$result = array_intersect_key($data, array_flip($acceptFilters));
return new self($result);
}
}

34
app/UI/DTO/OrderDTO.php Normal file
View File

@@ -0,0 +1,34 @@
<?php
declare(strict_types=1);
namespace App\UI\DTO;
class OrderDTO
{
public function __construct(public readonly string $column, public readonly OrderDirection $direction)
{
}
/**
* @param array<int, string> $acceptColumns
*/
public static function createOrReturnNullFromData(?string $order, ?string $direction, array $acceptColumns = []): ?OrderDTO
{
if ($order === null || $direction === null) {
return null;
}
if (!in_array($order, $acceptColumns, true)) {
return null;
}
$direction = OrderDirection::tryFrom($direction);
if ($direction === null) {
return null;
}
return new self($order, $direction);
}
}

View File

@@ -0,0 +1,11 @@
<?php
declare(strict_types=1);
namespace App\UI\DTO;
enum OrderDirection: string
{
case ASC = "ASC";
case DESC = "DESC";
}