2018-05-06 13:53:46 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
declare(strict_types=1);
|
|
|
|
|
|
|
|
|
|
namespace App\Service;
|
|
|
|
|
|
|
|
|
|
use App\Entity\Awardee;
|
|
|
|
|
use Doctrine\ORM\EntityManager;
|
2018-05-12 00:14:34 +02:00
|
|
|
use UtilityModule\Hydrator\DoctrineObject;
|
2018-05-06 13:53:46 +02:00
|
|
|
|
|
|
|
|
class AwardeeManager
|
|
|
|
|
{
|
|
|
|
|
/** @var EntityManager */
|
|
|
|
|
private $entityManager;
|
|
|
|
|
|
2018-05-11 18:21:48 +02:00
|
|
|
/** @var DoctrineObject */
|
|
|
|
|
private $hydrator;
|
|
|
|
|
|
|
|
|
|
public function __construct(
|
|
|
|
|
EntityManager $entityManager,
|
|
|
|
|
DoctrineObject $hydrator
|
|
|
|
|
) {
|
2018-05-06 13:53:46 +02:00
|
|
|
$this->entityManager = $entityManager;
|
2018-05-11 18:21:48 +02:00
|
|
|
$this->hydrator = $hydrator;
|
2018-05-06 13:53:46 +02:00
|
|
|
}
|
|
|
|
|
|
2018-05-11 10:46:00 +02:00
|
|
|
public function getAwardees(): ?array
|
|
|
|
|
{
|
|
|
|
|
return $this->entityManager->getRepository(Awardee::class)->findBy([], [
|
|
|
|
|
'year' => 'DESC',
|
|
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
|
2018-05-06 13:53:46 +02:00
|
|
|
/**
|
|
|
|
|
* @param int $year
|
|
|
|
|
* @return Awardee[]
|
|
|
|
|
*/
|
2018-05-08 18:10:38 +02:00
|
|
|
public function getAwardeesByYear(int $year): ?array
|
2018-05-06 13:53:46 +02:00
|
|
|
{
|
|
|
|
|
return $this->entityManager->getRepository(Awardee::class)->findBy([
|
|
|
|
|
'year' => $year,
|
|
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
|
2018-05-11 10:46:00 +02:00
|
|
|
public function getAwardee(int $id): ?Awardee
|
|
|
|
|
{
|
|
|
|
|
/** @var Awardee $awardee */
|
|
|
|
|
$awardee = $this->entityManager->getRepository(Awardee::class)->find($id);
|
|
|
|
|
return $awardee;
|
|
|
|
|
}
|
|
|
|
|
|
2018-05-06 13:53:46 +02:00
|
|
|
/**
|
|
|
|
|
* @param string $slug
|
|
|
|
|
* @return Awardee|null
|
|
|
|
|
*/
|
2018-05-08 18:10:38 +02:00
|
|
|
public function getAwardeeFromSlug(string $slug): ?Awardee
|
2018-05-06 13:53:46 +02:00
|
|
|
{
|
|
|
|
|
/** @var Awardee $awardee */
|
|
|
|
|
$awardee = $this->entityManager->getRepository(Awardee::class)->findOneBy([
|
|
|
|
|
'slug' => $slug,
|
|
|
|
|
]);
|
|
|
|
|
return $awardee;
|
|
|
|
|
}
|
2018-05-11 18:21:48 +02:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @return Awardee
|
|
|
|
|
* @throws \Doctrine\ORM\ORMException
|
|
|
|
|
* @throws \Doctrine\ORM\OptimisticLockException
|
|
|
|
|
*/
|
|
|
|
|
public function create($data): Awardee
|
|
|
|
|
{
|
|
|
|
|
/** @var Awardee $awardee */
|
|
|
|
|
$awardee = $this->hydrator->hydrate($data, new Awardee());
|
|
|
|
|
$this->entityManager->persist($awardee);
|
|
|
|
|
$this->entityManager->flush();
|
|
|
|
|
return $awardee;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @param int $id
|
|
|
|
|
* @param $data
|
|
|
|
|
* @return Awardee
|
|
|
|
|
* @throws \Doctrine\ORM\ORMException
|
|
|
|
|
* @throws \Doctrine\ORM\OptimisticLockException
|
|
|
|
|
*/
|
|
|
|
|
public function update(int $id, $data): Awardee
|
|
|
|
|
{
|
|
|
|
|
$awardee = $this->entityManager->getRepository(Awardee::class)->find($id);
|
|
|
|
|
/** @var Awardee $awardee */
|
|
|
|
|
$awardee = $this->hydrator->hydrate($data, $awardee);
|
|
|
|
|
$this->entityManager->persist($awardee);
|
|
|
|
|
$this->entityManager->flush();
|
|
|
|
|
return $awardee;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @param int $id
|
|
|
|
|
* @return bool
|
|
|
|
|
* @throws \Doctrine\ORM\ORMException
|
|
|
|
|
* @throws \Doctrine\ORM\OptimisticLockException
|
|
|
|
|
*/
|
|
|
|
|
public function delete(int $id): bool {
|
|
|
|
|
if (null !== ($entity = $this->getAwardee($id))) {
|
|
|
|
|
$this->entityManager->remove($entity);
|
|
|
|
|
$this->entityManager->flush();
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
2018-05-06 13:53:46 +02:00
|
|
|
}
|