feat: suite du passage en DDD de Scraping

This commit is contained in:
ext.jeremy.guillot@maxicoffee.domains
2025-02-01 13:59:37 +01:00
committed by ThysTips
parent 0c8ca6cca9
commit 0a8e6786a8
4 changed files with 190 additions and 44 deletions

View File

@@ -3,7 +3,9 @@
namespace App\Domain\Scraping\Infrastructure\Persistence;
use App\Domain\Scraping\Domain\Model\ScrapingJob;
use App\Domain\Scraping\Domain\Model\ScrapingStatus;
use App\Domain\Scraping\Domain\Repository\ScrapingJobRepositoryInterface;
use App\Domain\Scraping\Infrastructure\Persistence\Entity\ScrapingJobEntity;
use Doctrine\ORM\EntityManagerInterface;
class DoctrineScrapingJobRepository implements ScrapingJobRepositoryInterface
@@ -14,38 +16,48 @@ class DoctrineScrapingJobRepository implements ScrapingJobRepositoryInterface
public function save(ScrapingJob $job): void
{
$this->entityManager->persist($job);
$entity = ScrapingJobEntity::fromDomain($job);
$this->entityManager->persist($entity);
$this->entityManager->flush();
}
public function findById(string $id): ?ScrapingJob
{
return $this->entityManager->getRepository(ScrapingJob::class)->find($id);
$entity = $this->entityManager->getRepository(ScrapingJobEntity::class)
->find($id);
return $entity?->toDomain();
}
public function findByChapterId(string $chapterId): ?ScrapingJob
{
return $this->entityManager->getRepository(ScrapingJob::class)
$entity = $this->entityManager->getRepository(ScrapingJobEntity::class)
->findOneBy(['chapterId' => $chapterId]);
return $entity?->toDomain();
}
public function findPendingJobs(): array
{
return $this->entityManager->getRepository(ScrapingJob::class)
$entities = $this->entityManager->getRepository(ScrapingJobEntity::class)
->createQueryBuilder('sj')
->where('sj.status = :status')
->setParameter('status', 'pending')
->setParameter('status', ScrapingStatus::PENDING->value)
->getQuery()
->getResult();
return array_map(fn(ScrapingJobEntity $entity) => $entity->toDomain(), $entities);
}
public function findInProgressJobs(): array
{
return $this->entityManager->getRepository(ScrapingJob::class)
$entities = $this->entityManager->getRepository(ScrapingJobEntity::class)
->createQueryBuilder('sj')
->where('sj.status = :status')
->setParameter('status', 'in_progress')
->setParameter('status', ScrapingStatus::IN_PROGRESS->value)
->getQuery()
->getResult();
return array_map(fn(ScrapingJobEntity $entity) => $entity->toDomain(), $entities);
}
}