From 1a8e4cdfd78a25de64b77c165c3be811d1f69470 Mon Sep 17 00:00:00 2001 From: Alejandro Celaya Date: Sun, 2 Feb 2020 08:57:04 +0100 Subject: [PATCH] Exposed domain on short URLs --- docs/swagger/definitions/ShortUrl.json | 4 ++++ docs/swagger/paths/v1_short-urls.json | 14 +++++++++----- docs/swagger/paths/v1_short-urls_shorten.json | 3 ++- docs/swagger/paths/v1_short-urls_{shortCode}.json | 3 ++- module/Core/src/Entity/Domain.php | 8 +++++++- module/Core/src/Entity/ShortUrl.php | 5 +++++ .../src/Transformer/ShortUrlDataTransformer.php | 5 ++--- module/Rest/test-api/Action/ListShortUrlsTest.php | 5 +++++ 8 files changed, 36 insertions(+), 11 deletions(-) diff --git a/docs/swagger/definitions/ShortUrl.json b/docs/swagger/definitions/ShortUrl.json index 8111bd6e..66d20115 100644 --- a/docs/swagger/definitions/ShortUrl.json +++ b/docs/swagger/definitions/ShortUrl.json @@ -31,6 +31,10 @@ }, "meta": { "$ref": "./ShortUrlMeta.json" + }, + "domain": { + "type": "string", + "description": "The domain in which the short URL was created. Null if it belongs to default domain." } } } diff --git a/docs/swagger/paths/v1_short-urls.json b/docs/swagger/paths/v1_short-urls.json index 0c6d0484..be274ab6 100644 --- a/docs/swagger/paths/v1_short-urls.json +++ b/docs/swagger/paths/v1_short-urls.json @@ -123,7 +123,8 @@ "validSince": "2017-01-21T00:00:00+02:00", "validUntil": null, "maxVisits": 100 - } + }, + "domain": null }, { "shortCode": "12Kb3", @@ -138,11 +139,12 @@ "validSince": null, "validUntil": null, "maxVisits": null - } + }, + "domain": null }, { "shortCode": "123bA", - "shortUrl": "https://doma.in/123bA", + "shortUrl": "https://example.com/123bA", "longUrl": "https://www.google.com", "dateCreated": "2015-10-01T20:34:16+02:00", "visitsCount": 25, @@ -151,7 +153,8 @@ "validSince": "2017-01-21T00:00:00+02:00", "validUntil": null, "maxVisits": null - } + }, + "domain": "example.com" } ], "pagination": { @@ -271,7 +274,8 @@ "validSince": "2017-01-21T00:00:00+02:00", "validUntil": null, "maxVisits": 500 - } + }, + "domain": null } } }, diff --git a/docs/swagger/paths/v1_short-urls_shorten.json b/docs/swagger/paths/v1_short-urls_shorten.json index c5ad9352..c31c0cd9 100644 --- a/docs/swagger/paths/v1_short-urls_shorten.json +++ b/docs/swagger/paths/v1_short-urls_shorten.json @@ -72,7 +72,8 @@ "validSince": "2017-01-21T00:00:00+02:00", "validUntil": null, "maxVisits": 100 - } + }, + "domain": null }, "text/plain": "https://doma.in/abc123" } diff --git a/docs/swagger/paths/v1_short-urls_{shortCode}.json b/docs/swagger/paths/v1_short-urls_{shortCode}.json index d4537a83..4fbdeb8e 100644 --- a/docs/swagger/paths/v1_short-urls_{shortCode}.json +++ b/docs/swagger/paths/v1_short-urls_{shortCode}.json @@ -58,7 +58,8 @@ "validSince": "2017-01-21T00:00:00+02:00", "validUntil": null, "maxVisits": 100 - } + }, + "domain": null } } }, diff --git a/module/Core/src/Entity/Domain.php b/module/Core/src/Entity/Domain.php index 924b50e5..f836f7ed 100644 --- a/module/Core/src/Entity/Domain.php +++ b/module/Core/src/Entity/Domain.php @@ -4,9 +4,10 @@ declare(strict_types=1); namespace Shlinkio\Shlink\Core\Entity; +use JsonSerializable; use Shlinkio\Shlink\Common\Entity\AbstractEntity; -class Domain extends AbstractEntity +class Domain extends AbstractEntity implements JsonSerializable { private string $authority; @@ -19,4 +20,9 @@ class Domain extends AbstractEntity { return $this->authority; } + + public function jsonSerialize(): string + { + return $this->getAuthority(); + } } diff --git a/module/Core/src/Entity/ShortUrl.php b/module/Core/src/Entity/ShortUrl.php index e260896d..98d6a146 100644 --- a/module/Core/src/Entity/ShortUrl.php +++ b/module/Core/src/Entity/ShortUrl.php @@ -69,6 +69,11 @@ class ShortUrl extends AbstractEntity return $this->dateCreated; } + public function getDomain(): ?Domain + { + return $this->domain; + } + /** * @return Collection|Tag[] */ diff --git a/module/Core/src/Transformer/ShortUrlDataTransformer.php b/module/Core/src/Transformer/ShortUrlDataTransformer.php index 532fa122..a6fb4c14 100644 --- a/module/Core/src/Transformer/ShortUrlDataTransformer.php +++ b/module/Core/src/Transformer/ShortUrlDataTransformer.php @@ -24,16 +24,15 @@ class ShortUrlDataTransformer implements DataTransformerInterface */ public function transform($shortUrl): array // phpcs:ignore { - $longUrl = $shortUrl->getLongUrl(); - return [ 'shortCode' => $shortUrl->getShortCode(), 'shortUrl' => $shortUrl->toString($this->domainConfig), - 'longUrl' => $longUrl, + 'longUrl' => $shortUrl->getLongUrl(), 'dateCreated' => $shortUrl->getDateCreated()->toAtomString(), 'visitsCount' => $shortUrl->getVisitsCount(), 'tags' => invoke($shortUrl->getTags(), '__toString'), 'meta' => $this->buildMeta($shortUrl), + 'domain' => $shortUrl->getDomain(), ]; } diff --git a/module/Rest/test-api/Action/ListShortUrlsTest.php b/module/Rest/test-api/Action/ListShortUrlsTest.php index 3fec6f7a..40c9fa9c 100644 --- a/module/Rest/test-api/Action/ListShortUrlsTest.php +++ b/module/Rest/test-api/Action/ListShortUrlsTest.php @@ -24,6 +24,7 @@ class ListShortUrlsTest extends ApiTestCase 'validUntil' => null, 'maxVisits' => null, ], + 'domain' => null, ]; private const SHORT_URL_CUSTOM_SLUG_AND_DOMAIN = [ 'shortCode' => 'custom-with-domain', @@ -37,6 +38,7 @@ class ListShortUrlsTest extends ApiTestCase 'validUntil' => null, 'maxVisits' => null, ], + 'domain' => 'some-domain.com', ]; private const SHORT_URL_META = [ 'shortCode' => 'def456', @@ -52,6 +54,7 @@ class ListShortUrlsTest extends ApiTestCase 'validUntil' => null, 'maxVisits' => null, ], + 'domain' => null, ]; private const SHORT_URL_CUSTOM_SLUG = [ 'shortCode' => 'custom', @@ -65,6 +68,7 @@ class ListShortUrlsTest extends ApiTestCase 'validUntil' => null, 'maxVisits' => 2, ], + 'domain' => null, ]; private const SHORT_URL_CUSTOM_DOMAIN = [ 'shortCode' => 'ghi789', @@ -80,6 +84,7 @@ class ListShortUrlsTest extends ApiTestCase 'validUntil' => null, 'maxVisits' => null, ], + 'domain' => 'example.com', ]; /**