taktik-nette

This commit is contained in:
2025-01-22 23:36:03 +01:00
commit 8e2cd6ca68
45 changed files with 5410 additions and 0 deletions
+31
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
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);
}
}
+11
View File
@@ -0,0 +1,11 @@
<?php
declare(strict_types=1);
namespace App\UI\DTO;
enum OrderDirection: string
{
case ASC = "ASC";
case DESC = "DESC";
}