diff --git a/module/Core/src/Visit/RequestTracker.php b/module/Core/src/Visit/RequestTracker.php index 02fbd94e..cb36eee2 100644 --- a/module/Core/src/Visit/RequestTracker.php +++ b/module/Core/src/Visit/RequestTracker.php @@ -12,6 +12,7 @@ use Shlinkio\Shlink\Core\ErrorHandler\Model\NotFoundType; use Shlinkio\Shlink\Core\Exception\InvalidIpFormatException; use Shlinkio\Shlink\Core\ShortUrl\Entity\ShortUrl; use Shlinkio\Shlink\Core\Util\IpAddressUtils; +use Shlinkio\Shlink\Core\Visit\Entity\Visit; use Shlinkio\Shlink\Core\Visit\Model\Visitor; use function Shlinkio\Shlink\Core\ipAddressFromRequest; @@ -22,24 +23,26 @@ readonly class RequestTracker implements RequestTrackerInterface, RequestMethodI { } - public function trackIfApplicable(ShortUrl $shortUrl, ServerRequestInterface $request): void - { - if ($this->shouldTrackRequest($request)) { - $this->visitsTracker->track($shortUrl, Visitor::fromRequest($request)); - } - } - - public function trackNotFoundIfApplicable(ServerRequestInterface $request): void + public function trackIfApplicable(ShortUrl $shortUrl, ServerRequestInterface $request): Visit|null { if (! $this->shouldTrackRequest($request)) { - return; + return null; + } + + return $this->visitsTracker->track($shortUrl, Visitor::fromRequest($request)); + } + + public function trackNotFoundIfApplicable(ServerRequestInterface $request): Visit|null + { + if (! $this->shouldTrackRequest($request)) { + return null; } /** @var NotFoundType|null $notFoundType */ $notFoundType = $request->getAttribute(NotFoundType::class); $visitor = Visitor::fromRequest($request); - match (true) { + return match (true) { $notFoundType?->isBaseUrl() => $this->visitsTracker->trackBaseUrlVisit($visitor), $notFoundType?->isRegularNotFound() => $this->visitsTracker->trackRegularNotFoundVisit($visitor), $notFoundType?->isInvalidShortUrl() => $this->visitsTracker->trackInvalidShortUrlVisit($visitor), diff --git a/module/Core/src/Visit/RequestTrackerInterface.php b/module/Core/src/Visit/RequestTrackerInterface.php index 9048b07f..4fb159b0 100644 --- a/module/Core/src/Visit/RequestTrackerInterface.php +++ b/module/Core/src/Visit/RequestTrackerInterface.php @@ -6,10 +6,11 @@ namespace Shlinkio\Shlink\Core\Visit; use Psr\Http\Message\ServerRequestInterface; use Shlinkio\Shlink\Core\ShortUrl\Entity\ShortUrl; +use Shlinkio\Shlink\Core\Visit\Entity\Visit; interface RequestTrackerInterface { - public function trackIfApplicable(ShortUrl $shortUrl, ServerRequestInterface $request): void; + public function trackIfApplicable(ShortUrl $shortUrl, ServerRequestInterface $request): Visit|null; - public function trackNotFoundIfApplicable(ServerRequestInterface $request): void; + public function trackNotFoundIfApplicable(ServerRequestInterface $request): Visit|null; }