From 1085809fa5838dde0a6d7a5da70171d759f80553 Mon Sep 17 00:00:00 2001 From: Alejandro Celaya Date: Mon, 30 Sep 2019 20:01:36 +0200 Subject: [PATCH] Moved code to convert a ShortUrl into a full link as string to the entity itself --- data/migrations/Version20190930165521.php | 1 - .../ShortUrl/GenerateShortUrlCommand.php | 10 +++------ module/Core/src/Entity/ShortUrl.php | 10 ++++++++- .../Transformer/ShortUrlDataTransformer.php | 22 ++++++++----------- module/Core/src/Util/ShortUrlBuilderTrait.php | 16 -------------- 5 files changed, 21 insertions(+), 38 deletions(-) delete mode 100644 module/Core/src/Util/ShortUrlBuilderTrait.php diff --git a/data/migrations/Version20190930165521.php b/data/migrations/Version20190930165521.php index 2f4e277b..65b83aae 100644 --- a/data/migrations/Version20190930165521.php +++ b/data/migrations/Version20190930165521.php @@ -5,7 +5,6 @@ namespace ShlinkMigrations; use Doctrine\DBAL\Schema\Schema; use Doctrine\DBAL\Schema\SchemaException; -use Doctrine\DBAL\Schema\Table; use Doctrine\DBAL\Types\Type; use Doctrine\Migrations\AbstractMigration; diff --git a/module/CLI/src/Command/ShortUrl/GenerateShortUrlCommand.php b/module/CLI/src/Command/ShortUrl/GenerateShortUrlCommand.php index 5977094f..6b2c2eeb 100644 --- a/module/CLI/src/Command/ShortUrl/GenerateShortUrlCommand.php +++ b/module/CLI/src/Command/ShortUrl/GenerateShortUrlCommand.php @@ -9,7 +9,6 @@ use Shlinkio\Shlink\Core\Exception\InvalidUrlException; use Shlinkio\Shlink\Core\Exception\NonUniqueSlugException; use Shlinkio\Shlink\Core\Model\ShortUrlMeta; use Shlinkio\Shlink\Core\Service\UrlShortenerInterface; -use Shlinkio\Shlink\Core\Util\ShortUrlBuilderTrait; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; @@ -26,8 +25,6 @@ use function sprintf; class GenerateShortUrlCommand extends Command { - use ShortUrlBuilderTrait; - public const NAME = 'short-url:generate'; private const ALIASES = ['shortcode:generate', 'short-code:generate']; @@ -119,7 +116,7 @@ class GenerateShortUrlCommand extends Command $maxVisits = $input->getOption('maxVisits'); try { - $shortCode = $this->urlShortener->urlToShortCode( + $shortUrl = $this->urlShortener->urlToShortCode( new Uri($longUrl), $tags, ShortUrlMeta::createFromParams( @@ -129,12 +126,11 @@ class GenerateShortUrlCommand extends Command $maxVisits !== null ? (int) $maxVisits : null, $input->getOption('findIfExists') ) - )->getShortCode(); - $shortUrl = $this->buildShortUrl($this->domainConfig, $shortCode); + ); $io->writeln([ sprintf('Processed long URL: %s', $longUrl), - sprintf('Generated short URL: %s', $shortUrl), + sprintf('Generated short URL: %s', $shortUrl->toString($this->domainConfig)), ]); return ExitCodes::EXIT_SUCCESS; } catch (InvalidUrlException $e) { diff --git a/module/Core/src/Entity/ShortUrl.php b/module/Core/src/Entity/ShortUrl.php index fa4d69e1..d6578318 100644 --- a/module/Core/src/Entity/ShortUrl.php +++ b/module/Core/src/Entity/ShortUrl.php @@ -8,6 +8,7 @@ use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; use Shlinkio\Shlink\Common\Entity\AbstractEntity; use Shlinkio\Shlink\Core\Model\ShortUrlMeta; +use Zend\Diactoros\Uri; use function count; @@ -135,7 +136,14 @@ class ShortUrl extends AbstractEntity return $this->maxVisits !== null && $this->getVisitsCount() >= $this->maxVisits; } - public function domain(string $fallback = ''): string + public function toString(array $domainConfig): string + { + return (string) (new Uri())->withPath($this->shortCode) + ->withScheme($domainConfig['schema'] ?? 'http') + ->withHost($this->resolveDomain($domainConfig['hostname'] ?? '')); + } + + private function resolveDomain(string $fallback = ''): string { if ($this->domain === null) { return $fallback; diff --git a/module/Core/src/Transformer/ShortUrlDataTransformer.php b/module/Core/src/Transformer/ShortUrlDataTransformer.php index 6bd2bfa4..ddb8b9d6 100644 --- a/module/Core/src/Transformer/ShortUrlDataTransformer.php +++ b/module/Core/src/Transformer/ShortUrlDataTransformer.php @@ -5,15 +5,12 @@ namespace Shlinkio\Shlink\Core\Transformer; use Shlinkio\Shlink\Common\Rest\DataTransformerInterface; use Shlinkio\Shlink\Core\Entity\ShortUrl; -use Shlinkio\Shlink\Core\Util\ShortUrlBuilderTrait; use function Functional\invoke; use function Functional\invoke_if; class ShortUrlDataTransformer implements DataTransformerInterface { - use ShortUrlBuilderTrait; - /** @var array */ private $domainConfig; @@ -23,21 +20,20 @@ class ShortUrlDataTransformer implements DataTransformerInterface } /** - * @param ShortUrl $value + * @param ShortUrl $shortUrl */ - public function transform($value): array + public function transform($shortUrl): array { - $longUrl = $value->getLongUrl(); - $shortCode = $value->getShortCode(); + $longUrl = $shortUrl->getLongUrl(); return [ - 'shortCode' => $shortCode, - 'shortUrl' => $this->buildShortUrl($this->domainConfig, $shortCode), + 'shortCode' => $shortUrl->getShortCode(), + 'shortUrl' => $shortUrl->toString($this->domainConfig), 'longUrl' => $longUrl, - 'dateCreated' => $value->getDateCreated()->toAtomString(), - 'visitsCount' => $value->getVisitsCount(), - 'tags' => invoke($value->getTags(), '__toString'), - 'meta' => $this->buildMeta($value), + 'dateCreated' => $shortUrl->getDateCreated()->toAtomString(), + 'visitsCount' => $shortUrl->getVisitsCount(), + 'tags' => invoke($shortUrl->getTags(), '__toString'), + 'meta' => $this->buildMeta($shortUrl), // Deprecated 'originalUrl' => $longUrl, diff --git a/module/Core/src/Util/ShortUrlBuilderTrait.php b/module/Core/src/Util/ShortUrlBuilderTrait.php deleted file mode 100644 index fe627b0f..00000000 --- a/module/Core/src/Util/ShortUrlBuilderTrait.php +++ /dev/null @@ -1,16 +0,0 @@ -withPath($shortCode) - ->withScheme($domainConfig['schema'] ?? 'http') - ->withHost($domainConfig['hostname'] ?? ''); - } -}