ShortUrlDataTransformer.php 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. <?php
  2. declare(strict_types=1);
  3. namespace Shlinkio\Shlink\Core\ShortUrl\Transformer;
  4. use Shlinkio\Shlink\Common\Rest\DataTransformerInterface;
  5. use Shlinkio\Shlink\Core\Entity\ShortUrl;
  6. use Shlinkio\Shlink\Core\ShortUrl\Helper\ShortUrlStringifierInterface;
  7. use function Functional\invoke;
  8. use function Functional\invoke_if;
  9. class ShortUrlDataTransformer implements DataTransformerInterface
  10. {
  11. private ShortUrlStringifierInterface $stringifier;
  12. public function __construct(ShortUrlStringifierInterface $stringifier)
  13. {
  14. $this->stringifier = $stringifier;
  15. }
  16. /**
  17. * @param ShortUrl $shortUrl
  18. */
  19. public function transform($shortUrl): array // phpcs:ignore
  20. {
  21. return [
  22. 'shortCode' => $shortUrl->getShortCode(),
  23. 'shortUrl' => $this->stringifier->stringify($shortUrl),
  24. 'longUrl' => $shortUrl->getLongUrl(),
  25. 'dateCreated' => $shortUrl->getDateCreated()->toAtomString(),
  26. 'visitsCount' => $shortUrl->getVisitsCount(),
  27. 'tags' => invoke($shortUrl->getTags(), '__toString'),
  28. 'meta' => $this->buildMeta($shortUrl),
  29. 'domain' => $shortUrl->getDomain(),
  30. ];
  31. }
  32. private function buildMeta(ShortUrl $shortUrl): array
  33. {
  34. $validSince = $shortUrl->getValidSince();
  35. $validUntil = $shortUrl->getValidUntil();
  36. $maxVisits = $shortUrl->getMaxVisits();
  37. return [
  38. 'validSince' => invoke_if($validSince, 'toAtomString'),
  39. 'validUntil' => invoke_if($validUntil, 'toAtomString'),
  40. 'maxVisits' => $maxVisits,
  41. ];
  42. }
  43. }