mirror of
https://github.com/shlinkio/shlink.git
synced 2025-02-25 18:45:27 -06:00
Created method to get non-bot visits count for a short URL
This commit is contained in:
parent
0c83dea8b7
commit
99f28b569b
@ -33,9 +33,9 @@ class ShortUrl extends AbstractEntity
|
|||||||
private string $longUrl;
|
private string $longUrl;
|
||||||
private string $shortCode;
|
private string $shortCode;
|
||||||
private Chronos $dateCreated;
|
private Chronos $dateCreated;
|
||||||
/** @var Collection|Visit[] */
|
/** @var Collection<int, Visit> */
|
||||||
private Collection $visits;
|
private Collection $visits;
|
||||||
/** @var Collection|Tag[] */
|
/** @var Collection<int, Tag> */
|
||||||
private Collection $tags;
|
private Collection $tags;
|
||||||
private ?Chronos $validSince = null;
|
private ?Chronos $validSince = null;
|
||||||
private ?Chronos $validUntil = null;
|
private ?Chronos $validUntil = null;
|
||||||
@ -141,7 +141,7 @@ class ShortUrl extends AbstractEntity
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Collection|Tag[]
|
* @return Collection<int, Tag>
|
||||||
*/
|
*/
|
||||||
public function getTags(): Collection
|
public function getTags(): Collection
|
||||||
{
|
{
|
||||||
@ -168,6 +168,12 @@ class ShortUrl extends AbstractEntity
|
|||||||
return count($this->visits);
|
return count($this->visits);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function nonBotVisitsCount(): int
|
||||||
|
{
|
||||||
|
$criteria = Criteria::create()->where(Criteria::expr()->eq('potentialBot', false));
|
||||||
|
return count($this->visits->matching($criteria));
|
||||||
|
}
|
||||||
|
|
||||||
public function mostRecentImportedVisitDate(): ?Chronos
|
public function mostRecentImportedVisitDate(): ?Chronos
|
||||||
{
|
{
|
||||||
/** @var Selectable $visits */
|
/** @var Selectable $visits */
|
||||||
@ -183,7 +189,7 @@ class ShortUrl extends AbstractEntity
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param Collection|Visit[] $visits
|
* @param Collection<int, Visit> $visits
|
||||||
* @internal
|
* @internal
|
||||||
*/
|
*/
|
||||||
public function setVisits(Collection $visits): self
|
public function setVisits(Collection $visits): self
|
||||||
|
@ -13,7 +13,7 @@ use function Functional\invoke_if;
|
|||||||
|
|
||||||
class ShortUrlDataTransformer implements DataTransformerInterface
|
class ShortUrlDataTransformer implements DataTransformerInterface
|
||||||
{
|
{
|
||||||
public function __construct(private ShortUrlStringifierInterface $stringifier)
|
public function __construct(private readonly ShortUrlStringifierInterface $stringifier)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -27,13 +27,17 @@ class ShortUrlDataTransformer implements DataTransformerInterface
|
|||||||
'shortUrl' => $this->stringifier->stringify($shortUrl),
|
'shortUrl' => $this->stringifier->stringify($shortUrl),
|
||||||
'longUrl' => $shortUrl->getLongUrl(),
|
'longUrl' => $shortUrl->getLongUrl(),
|
||||||
'dateCreated' => $shortUrl->getDateCreated()->toAtomString(),
|
'dateCreated' => $shortUrl->getDateCreated()->toAtomString(),
|
||||||
'visitsCount' => $shortUrl->getVisitsCount(),
|
'nonBotVisitsCount' => $shortUrl->nonBotVisitsCount(),
|
||||||
'tags' => invoke($shortUrl->getTags(), '__toString'),
|
'tags' => invoke($shortUrl->getTags(), '__toString'),
|
||||||
'meta' => $this->buildMeta($shortUrl),
|
'meta' => $this->buildMeta($shortUrl),
|
||||||
'domain' => $shortUrl->getDomain(),
|
'domain' => $shortUrl->getDomain(),
|
||||||
'title' => $shortUrl->title(),
|
'title' => $shortUrl->title(),
|
||||||
'crawlable' => $shortUrl->crawlable(),
|
'crawlable' => $shortUrl->crawlable(),
|
||||||
'forwardQuery' => $shortUrl->forwardQuery(),
|
'forwardQuery' => $shortUrl->forwardQuery(),
|
||||||
|
'visitsSummary' => $this->buildVisitsSummary($shortUrl),
|
||||||
|
|
||||||
|
// Deprecated
|
||||||
|
'visitsCount' => $shortUrl->getVisitsCount(),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -49,4 +53,16 @@ class ShortUrlDataTransformer implements DataTransformerInterface
|
|||||||
'maxVisits' => $maxVisits,
|
'maxVisits' => $maxVisits,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function buildVisitsSummary(ShortUrl $shortUrl): array
|
||||||
|
{
|
||||||
|
$totalVisits = $shortUrl->getVisitsCount();
|
||||||
|
$nonBotVisits = $shortUrl->nonBotVisitsCount();
|
||||||
|
|
||||||
|
return [
|
||||||
|
'total' => $totalVisits,
|
||||||
|
'nonBots' => $nonBotVisits,
|
||||||
|
'bots' => $totalVisits - $nonBotVisits,
|
||||||
|
];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user