sms-store/src/App/Service/SmsStoreService.php

93 lines
2.3 KiB
PHP
Raw Normal View History

2017-09-03 17:51:59 +02:00
<?php
declare(strict_types=1);
2017-09-03 17:51:59 +02:00
namespace App\Service;
use App\Entity\Sms;
use App\Entity\User;
2019-05-21 20:48:18 +02:00
use DateTime;
use Doctrine\Common\Collections\ArrayCollection;
2017-09-03 17:51:59 +02:00
use Doctrine\ORM\EntityManager;
2019-05-21 20:48:18 +02:00
use Doctrine\ORM\OptimisticLockException;
use Doctrine\ORM\ORMException;
use Exception;
use Zend\EventManager\EventManager;
2017-09-03 17:51:59 +02:00
class SmsStoreService
{
/** @var EntityManager */
private $em;
2017-09-03 17:51:59 +02:00
/** @var EventManager */
private $eventManager;
2017-09-03 17:51:59 +02:00
public function __construct(EntityManager $em, EventManager $eventManager)
{
$this->em = $em;
$this->eventManager = $eventManager;
}
2017-09-03 17:51:59 +02:00
/**
* @param string $hashKey
* @param int $direction
* @param array $requestData
* @return bool
2019-05-21 20:48:18 +02:00
* @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'])
2019-05-21 20:48:18 +02:00
->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;
}
2017-09-03 17:51:59 +02:00
/**
* @param string $hashKey
* @return User
2019-05-21 20:48:18 +02:00
* @throws ORMException
* @throws OptimisticLockException
*/
private function ensureUserExists(string $hashKey): User
{
/** @var User $user */
$user = $this->em->getRepository(User::class)->findOneBy([
'hashKey' => $hashKey
]);
2017-09-03 17:51:59 +02:00
if ($user === null) {
$user = new User();
$user->setHashKey($hashKey)->setName("Unknown");
$this->em->persist($user);
$this->em->flush();
}
2017-09-03 17:51:59 +02:00
return $user;
}
2019-05-21 20:48:18 +02:00
public function getFailedImports(): array
{
return $this->em->getRepository(Sms::class)->findBy([
'parsedAndHandled' => false,
], [
'occuredAt' => 'ASC'
]);
}
2017-09-03 17:51:59 +02:00
}