sms-store/src/App/Service/SmsStoreService.php
2019-05-21 20:48:18 +02:00

93 lines
2.3 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Service;
use App\Entity\Sms;
use App\Entity\User;
use DateTime;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\OptimisticLockException;
use Doctrine\ORM\ORMException;
use Exception;
use Zend\EventManager\EventManager;
class SmsStoreService
{
/** @var EntityManager */
private $em;
/** @var EventManager */
private $eventManager;
public function __construct(EntityManager $em, EventManager $eventManager)
{
$this->em = $em;
$this->eventManager = $eventManager;
}
/**
* @param string $hashKey
* @param int $direction
* @param array $requestData
* @return bool
* @throws ORMException
* @throws OptimisticLockException
* @throws Exception
*/
public function storeSms(string $hashKey, int $direction, array $requestData): bool
{
$normalizedDate = str_replace("at ", "", $requestData['when']);
$user = $this->ensureUserExists($hashKey);
$sms = new Sms();
$sms->setDirection($direction)
->setContactName($requestData['contactName'])
->setContactNumber($requestData['contactNumber'])
->setOccuredAt(new DateTime($normalizedDate))
->setOwner($user)
->setText($requestData['text']);
$this->em->persist($sms);
$this->em->flush();
$this->eventManager->trigger('store.sms.persisted', $this, [
'sms' => $sms,
]);
return true;
}
/**
* @param string $hashKey
* @return User
* @throws ORMException
* @throws OptimisticLockException
*/
private function ensureUserExists(string $hashKey): User
{
/** @var User $user */
$user = $this->em->getRepository(User::class)->findOneBy([
'hashKey' => $hashKey
]);
if ($user === null) {
$user = new User();
$user->setHashKey($hashKey)->setName("Unknown");
$this->em->persist($user);
$this->em->flush();
}
return $user;
}
public function getFailedImports(): array
{
return $this->em->getRepository(Sms::class)->findBy([
'parsedAndHandled' => false,
], [
'occuredAt' => 'ASC'
]);
}
}