Modernize DomainRedirectsRequest

This commit is contained in:
Alejandro Celaya
2026-04-02 11:37:36 +02:00
parent 3fed574949
commit 8bcee302ea
3 changed files with 30 additions and 42 deletions
@@ -28,7 +28,7 @@ class DomainRedirectsAction extends AbstractRestAction
$requestData = DomainRedirectsRequest::fromRawData($body);
$apiKey = AuthenticationMiddleware::apiKeyFromRequest($request);
$authority = $requestData->authority();
$authority = $requestData->authority;
$domain = $this->domainService->getOrCreate($authority);
$notFoundRedirects = $requestData->toNotFoundRedirects($domain);
@@ -11,59 +11,47 @@ use Shlinkio\Shlink\Core\Exception\ValidationException;
use function array_key_exists;
class DomainRedirectsRequest
final readonly class DomainRedirectsRequest
{
private string $authority;
private string|null $baseUrlRedirect = null;
private bool $baseUrlRedirectWasProvided = false;
private string|null $regular404Redirect = null;
private bool $regular404RedirectWasProvided = false;
private string|null $invalidShortUrlRedirect = null;
private bool $invalidShortUrlRedirectWasProvided = false;
private function __construct()
{
}
public static function fromRawData(array $payload): self
{
$instance = new self();
$instance->validateAndInit($payload);
return $instance;
private function __construct(
private(set) string $authority,
private string|null $baseUrlRedirect = null,
private bool $baseUrlRedirectWasProvided = false,
private string|null $regular404Redirect = null,
private bool $regular404RedirectWasProvided = false,
private string|null $invalidShortUrlRedirect = null,
private bool $invalidShortUrlRedirectWasProvided = false,
) {
}
/**
* @throws ValidationException
*/
private function validateAndInit(array $payload): void
public static function fromRawData(array $payload): self
{
$inputFilter = DomainRedirectsInputFilter::withData($payload);
if (! $inputFilter->isValid()) {
throw ValidationException::fromInputFilter($inputFilter);
}
$this->baseUrlRedirectWasProvided = array_key_exists(
DomainRedirectsInputFilter::BASE_URL_REDIRECT,
$payload,
return new self(
authority: $inputFilter->getValue(DomainRedirectsInputFilter::DOMAIN),
baseUrlRedirect: $inputFilter->getValue(DomainRedirectsInputFilter::BASE_URL_REDIRECT),
baseUrlRedirectWasProvided: array_key_exists(
DomainRedirectsInputFilter::BASE_URL_REDIRECT,
$payload,
),
regular404Redirect: $inputFilter->getValue(DomainRedirectsInputFilter::REGULAR_404_REDIRECT),
regular404RedirectWasProvided: array_key_exists(
DomainRedirectsInputFilter::REGULAR_404_REDIRECT,
$payload,
),
invalidShortUrlRedirect: $inputFilter->getValue(DomainRedirectsInputFilter::INVALID_SHORT_URL_REDIRECT),
invalidShortUrlRedirectWasProvided: array_key_exists(
DomainRedirectsInputFilter::INVALID_SHORT_URL_REDIRECT,
$payload,
),
);
$this->regular404RedirectWasProvided = array_key_exists(
DomainRedirectsInputFilter::REGULAR_404_REDIRECT,
$payload,
);
$this->invalidShortUrlRedirectWasProvided = array_key_exists(
DomainRedirectsInputFilter::INVALID_SHORT_URL_REDIRECT,
$payload,
);
$this->authority = $inputFilter->getValue(DomainRedirectsInputFilter::DOMAIN);
$this->baseUrlRedirect = $inputFilter->getValue(DomainRedirectsInputFilter::BASE_URL_REDIRECT);
$this->regular404Redirect = $inputFilter->getValue(DomainRedirectsInputFilter::REGULAR_404_REDIRECT);
$this->invalidShortUrlRedirect = $inputFilter->getValue(DomainRedirectsInputFilter::INVALID_SHORT_URL_REDIRECT);
}
public function authority(): string
{
return $this->authority;
}
public function toNotFoundRedirects(NotFoundRedirectConfigInterface|null $defaults = null): NotFoundRedirects
@@ -39,7 +39,7 @@ class DomainRedirectsRequestTest extends TestCase
$request = DomainRedirectsRequest::fromRawData($data);
$notFound = $request->toNotFoundRedirects($defaults);
self::assertEquals($expectedAuthority, $request->authority());
self::assertEquals($expectedAuthority, $request->authority);
self::assertEquals($expectedBaseUrlRedirect, $notFound->baseUrlRedirect);
self::assertEquals($expectedRegular404Redirect, $notFound->regular404Redirect);
self::assertEquals($expectedInvalidShortUrlRedirect, $notFound->invalidShortUrlRedirect);