feat: analyse import + all tests fixed
This commit is contained in:
parent
fbe9619224
commit
3170a7c60e
@@ -191,36 +191,59 @@ readonly class LegacyMangaRepository implements MangaRepositoryInterface
|
||||
{
|
||||
$offset = ($page - 1) * $limit;
|
||||
|
||||
$queryBuilder = $this->entityManager->createQueryBuilder()
|
||||
->select('m')
|
||||
->from(EntityManga::class, 'm')
|
||||
->where('m.title LIKE :query')
|
||||
->orWhere('m.slug LIKE :query')
|
||||
// ->orWhere('m.author LIKE :query')
|
||||
// ->orWhere('m.description LIKE :query')
|
||||
->setParameter('query', '%' . $query . '%')
|
||||
->orderBy('m.title', 'ASC')
|
||||
->setFirstResult($offset)
|
||||
->setMaxResults($limit);
|
||||
// Utiliser une requête native pour supporter la recherche dans le champ JSON AlternativeSlugs
|
||||
$sql = "SELECT m.* FROM manga m
|
||||
WHERE m.title LIKE :query
|
||||
OR m.slug LIKE :query
|
||||
OR CAST(m.alternative_slugs AS TEXT) LIKE :query
|
||||
ORDER BY m.title ASC
|
||||
LIMIT :limit OFFSET :offset";
|
||||
|
||||
$rsm = new \Doctrine\ORM\Query\ResultSetMapping();
|
||||
$rsm->addEntityResult(EntityManga::class, 'm');
|
||||
$rsm->addFieldResult('m', 'id', 'id');
|
||||
$rsm->addFieldResult('m', 'title', 'title');
|
||||
$rsm->addFieldResult('m', 'slug', 'slug');
|
||||
$rsm->addFieldResult('m', 'image_url', 'imageUrl');
|
||||
$rsm->addFieldResult('m', 'publication_year', 'publicationYear');
|
||||
$rsm->addFieldResult('m', 'description', 'description');
|
||||
$rsm->addFieldResult('m', 'genres', 'genres');
|
||||
$rsm->addFieldResult('m', 'created_at', 'createdAt');
|
||||
$rsm->addFieldResult('m', 'rating', 'rating');
|
||||
$rsm->addFieldResult('m', 'author', 'author');
|
||||
$rsm->addFieldResult('m', 'external_id', 'externalId');
|
||||
$rsm->addFieldResult('m', 'status', 'status');
|
||||
$rsm->addFieldResult('m', 'thumbnail_url', 'thumbnailUrl');
|
||||
$rsm->addFieldResult('m', 'monitored', 'monitored');
|
||||
$rsm->addFieldResult('m', 'last_monitoring_check', 'lastMonitoringCheck');
|
||||
$rsm->addFieldResult('m', 'alternative_slugs', 'AlternativeSlugs');
|
||||
|
||||
$nativeQuery = $this->entityManager->createNativeQuery($sql, $rsm);
|
||||
$nativeQuery->setParameter('query', '%' . $query . '%');
|
||||
$nativeQuery->setParameter('limit', $limit);
|
||||
$nativeQuery->setParameter('offset', $offset);
|
||||
|
||||
return array_map(
|
||||
fn (EntityManga $entity) => $this->toDomain($entity),
|
||||
$queryBuilder->getQuery()->getResult()
|
||||
$nativeQuery->getResult()
|
||||
);
|
||||
}
|
||||
|
||||
public function countSearch(string $query): int
|
||||
{
|
||||
return $this->entityManager->createQueryBuilder()
|
||||
->select('COUNT(m.id)')
|
||||
->from(EntityManga::class, 'm')
|
||||
->where('m.title LIKE :query')
|
||||
->orWhere('m.slug LIKE :query')
|
||||
->orWhere('m.author LIKE :query')
|
||||
->orWhere('m.description LIKE :query')
|
||||
->setParameter('query', '%' . $query . '%')
|
||||
->getQuery()
|
||||
->getSingleScalarResult();
|
||||
// Utiliser une requête native pour supporter la recherche dans le champ JSON AlternativeSlugs
|
||||
$sql = "SELECT COUNT(m.id) FROM manga m
|
||||
WHERE m.title LIKE :query
|
||||
OR m.slug LIKE :query
|
||||
OR m.author LIKE :query
|
||||
OR m.description LIKE :query
|
||||
OR CAST(m.alternative_slugs AS TEXT) LIKE :query";
|
||||
|
||||
$conn = $this->entityManager->getConnection();
|
||||
$stmt = $conn->prepare($sql);
|
||||
$result = $stmt->executeQuery(['query' => '%' . $query . '%']);
|
||||
|
||||
return (int) $result->fetchOne();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user