From 656e1554b545a0e0fc94d261d5c6e21d82fcdf74 Mon Sep 17 00:00:00 2001 From: Yorda Date: Thu, 27 Jun 2024 17:59:11 -0600 Subject: [PATCH] update to always handle domain and move things to base option and fixes. --- src/Actions/ShortUrlRedirect.php | 1 + .../UrlBuilder/Options/BaseOption.php | 2 ++ .../UrlBuilder/Options/WithActivation.php | 1 + .../UrlBuilder/Options/WithDomain.php | 3 +++ .../UrlBuilder/Options/WithOwnership.php | 1 + .../UrlBuilder/Options/WithPassword.php | 1 + .../UrlBuilder/Options/WithTracing.php | 5 ++-- src/Builders/UrlBuilder/UrlBuilder.php | 8 +++--- src/Repositories/UrlRepository.php | 4 +-- src/Services/UrlService.php | 4 +-- ..._table_unique_identifier_for_recycling.php | 26 +++++++++++++++++++ 11 files changed, 47 insertions(+), 9 deletions(-) create mode 100644 src/Utility/Migrations/2024_06_27_163744_update_short_urls_table_unique_identifier_for_recycling.php diff --git a/src/Actions/ShortUrlRedirect.php b/src/Actions/ShortUrlRedirect.php index 96c7e5a..b397060 100644 --- a/src/Actions/ShortUrlRedirect.php +++ b/src/Actions/ShortUrlRedirect.php @@ -24,6 +24,7 @@ class ShortUrlRedirect extends Controller */ public function __invoke(Request $request, string $identifier) { + dd($request, $identifier); $this->identifier = $identifier; /** * Get Short URL Identifier & Validate diff --git a/src/Builders/UrlBuilder/Options/BaseOption.php b/src/Builders/UrlBuilder/Options/BaseOption.php index b341db2..494ea09 100644 --- a/src/Builders/UrlBuilder/Options/BaseOption.php +++ b/src/Builders/UrlBuilder/Options/BaseOption.php @@ -20,12 +20,14 @@ class BaseOption implements UrlBuilderOptionInterface */ public function resolve(Collection &$shortUrlCollection): void { + $domain = $shortUrlCollection->get('domain'); $identifier = $shortUrlCollection->has('identifier') ? $shortUrlCollection->get('identifier') : $this->generateUrlIdentifier(); $shortUrlCollection = $shortUrlCollection->merge([ 'identifier' => $identifier, + 'domain' => $domain, ]); $shortUrlArr = $shortUrlCollection->only([ diff --git a/src/Builders/UrlBuilder/Options/WithActivation.php b/src/Builders/UrlBuilder/Options/WithActivation.php index bbed37f..e7c7f50 100644 --- a/src/Builders/UrlBuilder/Options/WithActivation.php +++ b/src/Builders/UrlBuilder/Options/WithActivation.php @@ -16,6 +16,7 @@ public function resolve(Collection &$shortUrlCollection): void { UrlRepository::updateShortUrl( $shortUrlCollection->get('identifier'), + $shortUrlCollection->get('domain'), ['activation' => $shortUrlCollection->get('activation')] ); } diff --git a/src/Builders/UrlBuilder/Options/WithDomain.php b/src/Builders/UrlBuilder/Options/WithDomain.php index 12c6cf8..f6868cf 100644 --- a/src/Builders/UrlBuilder/Options/WithDomain.php +++ b/src/Builders/UrlBuilder/Options/WithDomain.php @@ -7,6 +7,9 @@ use YorCreative\UrlShortener\Exceptions\UrlRepositoryException; use YorCreative\UrlShortener\Repositories\UrlRepository; +/** + * @deprecated + */ class WithDomain implements UrlBuilderOptionInterface { /** diff --git a/src/Builders/UrlBuilder/Options/WithOwnership.php b/src/Builders/UrlBuilder/Options/WithOwnership.php index b8c75a2..ea64f78 100644 --- a/src/Builders/UrlBuilder/Options/WithOwnership.php +++ b/src/Builders/UrlBuilder/Options/WithOwnership.php @@ -18,6 +18,7 @@ public function resolve(Collection &$shortUrlCollection): void $primary_key = $model->getKeyName(); UrlService::attachOwnership( + $shortUrlCollection->get('domain'), $shortUrlCollection->get('identifier'), $model->getMorphClass(), $model->$primary_key diff --git a/src/Builders/UrlBuilder/Options/WithPassword.php b/src/Builders/UrlBuilder/Options/WithPassword.php index 2fc0272..a0b4d28 100644 --- a/src/Builders/UrlBuilder/Options/WithPassword.php +++ b/src/Builders/UrlBuilder/Options/WithPassword.php @@ -16,6 +16,7 @@ public function resolve(Collection &$shortUrlCollection): void { UrlRepository::updateShortUrl( $shortUrlCollection->get('identifier'), + $shortUrlCollection->get('domain'), ['password' => $shortUrlCollection->get('password')] ); } diff --git a/src/Builders/UrlBuilder/Options/WithTracing.php b/src/Builders/UrlBuilder/Options/WithTracing.php index d04db74..af3fab6 100644 --- a/src/Builders/UrlBuilder/Options/WithTracing.php +++ b/src/Builders/UrlBuilder/Options/WithTracing.php @@ -22,8 +22,9 @@ public function resolve(Collection &$shortUrlCollection): void ); $trace = [ - 'short_url_id' => UrlRepository::findByIdentifier( - $shortUrlCollection->get('identifier') + 'short_url_id' => UrlRepository::findByDomainIdentifier( + $shortUrlCollection->get('domain'), + $shortUrlCollection->get('identifier'), )->id, ]; diff --git a/src/Builders/UrlBuilder/UrlBuilder.php b/src/Builders/UrlBuilder/UrlBuilder.php index 9a9063f..9612c79 100644 --- a/src/Builders/UrlBuilder/UrlBuilder.php +++ b/src/Builders/UrlBuilder/UrlBuilder.php @@ -120,9 +120,11 @@ public function withDomain(string $domain): UrlBuilder { $this->shortUrlCollection->put('domain', $domain); - $this->options->add( - new WithDomain() - ); +// $this->options->add( +// new WithDomain() +// ); + + // handled in baseOption now return $this; } diff --git a/src/Repositories/UrlRepository.php b/src/Repositories/UrlRepository.php index f8ca893..c037ca4 100644 --- a/src/Repositories/UrlRepository.php +++ b/src/Repositories/UrlRepository.php @@ -97,10 +97,10 @@ public static function create(array $ShortUrl): ShortUrl /** * @throws UrlRepositoryException */ - public static function updateShortUrl(string $identifier, array $updates): ShortUrl + public static function updateShortUrl(string $identifier, string $domain, array $updates): ShortUrl { try { - $ShortUrlRecord = self::findByIdentifier($identifier); + $ShortUrlRecord = self::findByDomainIdentifier($domain, $identifier); $ShortUrlRecord->update($updates); return $ShortUrlRecord; diff --git a/src/Services/UrlService.php b/src/Services/UrlService.php index 58a9390..2d2b2b5 100644 --- a/src/Services/UrlService.php +++ b/src/Services/UrlService.php @@ -72,11 +72,11 @@ public static function attempt(string $identifier, string $password): ?ShortUrl /** * @throws UrlRepositoryException */ - public static function attachOwnership($identifier, $type, $id): void + public static function attachOwnership($domain, $identifier, $type, $id): void { try { UrlRepository::findOrCreateOwnershipRecord([ - 'short_url_id' => UrlRepository::findByIdentifier($identifier)->id, + 'short_url_id' => UrlRepository::findByDomainIdentifier($domain, $identifier)->id, 'ownerable_type' => $type, 'ownerable_id' => $id, ]); diff --git a/src/Utility/Migrations/2024_06_27_163744_update_short_urls_table_unique_identifier_for_recycling.php b/src/Utility/Migrations/2024_06_27_163744_update_short_urls_table_unique_identifier_for_recycling.php new file mode 100644 index 0000000..0c6c31b --- /dev/null +++ b/src/Utility/Migrations/2024_06_27_163744_update_short_urls_table_unique_identifier_for_recycling.php @@ -0,0 +1,26 @@ +dropUnique(['identifier']); + + // Add the new unique composite key that should not + // allow more than one identifier per domain at a time + // soft deleting recycles the identifier + $table->unique(['domain', 'identifier', 'deleted_at']); + }); + } +};