Improved how existing imported short URLs are checked by tracking its original short code

This commit is contained in:
Alejandro Celaya
2020-10-25 11:57:26 +01:00
parent 786e4f642b
commit 7c343f42c1
7 changed files with 49 additions and 21 deletions

View File

@@ -190,13 +190,7 @@ DQL;
->setParameter('slug', $slug)
->setMaxResults(1);
if ($domain !== null) {
$qb->join('s.domain', 'd')
->andWhere($qb->expr()->eq('d.authority', ':authority'))
->setParameter('authority', $domain);
} else {
$qb->andWhere($qb->expr()->isNull('s.domain'));
}
$this->whereDomainIs($qb, $domain);
return $qb;
}
@@ -256,15 +250,31 @@ DQL;
return $qb->getQuery()->getOneOrNullResult();
}
public function importedUrlExists(ImportedShlinkUrl $url, bool $importShortCodes): bool
public function importedUrlExists(ImportedShlinkUrl $url): bool
{
$findConditions = ['importSource' => $url->source()];
if ($importShortCodes) {
$findConditions['shortCode'] = $url->shortCode();
} else {
$findConditions['longUrl'] = $url->longUrl();
}
$qb = $this->getEntityManager()->createQueryBuilder();
$qb->select('COUNT(DISTINCT s.id)')
->from(ShortUrl::class, 's')
->andWhere($qb->expr()->eq('s.importOriginalShortCode', ':shortCode'))
->setParameter('shortCode', $url->shortCode())
->andWhere($qb->expr()->eq('s.importSource', ':importSource'))
->setParameter('importSource', $url->source())
->setMaxResults(1);
return $this->count($findConditions) > 0;
$this->whereDomainIs($qb, $url->domain());
$result = (int) $qb->getQuery()->getSingleScalarResult();
return $result > 0;
}
private function whereDomainIs(QueryBuilder $qb, ?string $domain): void
{
if ($domain !== null) {
$qb->join('s.domain', 'd')
->andWhere($qb->expr()->eq('d.authority', ':authority'))
->setParameter('authority', $domain);
} else {
$qb->andWhere($qb->expr()->isNull('s.domain'));
}
}
}

View File

@@ -32,5 +32,5 @@ interface ShortUrlRepositoryInterface extends ObjectRepository
public function findOneMatching(string $url, array $tags, ShortUrlMeta $meta): ?ShortUrl;
public function importedUrlExists(ImportedShlinkUrl $url, bool $importShortCodes): bool;
public function importedUrlExists(ImportedShlinkUrl $url): bool;
}