Update RequestTracker so that its methods return the new Visit instance, if any

This commit is contained in:
Alejandro Celaya
2024-11-11 08:58:16 +01:00
parent a5a98bd578
commit 48ecef3436
2 changed files with 16 additions and 12 deletions

View File

@@ -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),

View File

@@ -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;
}