65 lines
2.1 KiB
PHP
65 lines
2.1 KiB
PHP
<?php
|
|
|
|
namespace App\Domain\Scraping\Infrastructure\Persistence;
|
|
|
|
use App\Domain\Scraping\Domain\Contract\Repository\ScrapingJobRepositoryInterface;
|
|
use App\Domain\Scraping\Domain\Model\ScrapingJob;
|
|
use App\Domain\Scraping\Domain\Model\ScrapingStatus;
|
|
use App\Domain\Scraping\Infrastructure\Persistence\Entity\ScrapingJobEntity;
|
|
use Doctrine\ORM\EntityManagerInterface;
|
|
|
|
readonly class DoctrineScrapingJobRepository implements ScrapingJobRepositoryInterface
|
|
{
|
|
public function __construct(
|
|
private EntityManagerInterface $entityManager
|
|
) {
|
|
}
|
|
|
|
public function save(ScrapingJob $job): void
|
|
{
|
|
$entity = ScrapingJobEntity::fromDomain($job);
|
|
$this->entityManager->persist($entity);
|
|
$this->entityManager->flush();
|
|
}
|
|
|
|
public function findById(string $id): ?ScrapingJob
|
|
{
|
|
$entity = $this->entityManager->getRepository(ScrapingJobEntity::class)
|
|
->find($id);
|
|
|
|
return $entity?->toDomain();
|
|
}
|
|
|
|
public function findByChapterId(string $chapterId): ?ScrapingJob
|
|
{
|
|
$entity = $this->entityManager->getRepository(ScrapingJobEntity::class)
|
|
->findOneBy(['chapterId' => $chapterId]);
|
|
|
|
return $entity?->toDomain();
|
|
}
|
|
|
|
public function findPendingJobs(): array
|
|
{
|
|
$entities = $this->entityManager->getRepository(ScrapingJobEntity::class)
|
|
->createQueryBuilder('sj')
|
|
->where('sj.status = :status')
|
|
->setParameter('status', ScrapingStatus::PENDING->value)
|
|
->getQuery()
|
|
->getResult();
|
|
|
|
return array_map(fn (ScrapingJobEntity $entity) => $entity->toDomain(), $entities);
|
|
}
|
|
|
|
public function findInProgressJobs(): array
|
|
{
|
|
$entities = $this->entityManager->getRepository(ScrapingJobEntity::class)
|
|
->createQueryBuilder('sj')
|
|
->where('sj.status = :status')
|
|
->setParameter('status', ScrapingStatus::IN_PROGRESS->value)
|
|
->getQuery()
|
|
->getResult();
|
|
|
|
return array_map(fn (ScrapingJobEntity $entity) => $entity->toDomain(), $entities);
|
|
}
|
|
}
|