<?php
namespace App\EventSubscriber;
use App\Model\Exception\ContactNotFoundException;
use App\Model\Exception\ProspectNotFoundException;
use App\Model\Exception\QuoteNotFoundException;
use App\Model\Exception\SavedUserSearchNotFoundException;
use App\Model\Exception\SubResourceNotFoundException;
use App\Model\Exception\TaskNotFoundException;
use App\V4\Logger\SentryLogger;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpClient\Exception\ClientException;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Event\ExceptionEvent;
use Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException;
use Symfony\Component\HttpKernel\KernelEvents;
/**
* Class ProductManager.
*/
final class DataRetrieverEventManager implements EventSubscriberInterface
{
/**
* @var SentryLogger
*/
private $sentryLogger;
/**
* DataRetrieverEventManager constructor.
*
* @param SentryLogger $sentryLogger
*/
public function __construct(SentryLogger $sentryLogger)
{
$this->sentryLogger = $sentryLogger;
}
/**
* @return array
*/
public static function getSubscribedEvents(): array
{
return [
KernelEvents::EXCEPTION => [
['checkException', 5],
],
];
}
/**
* @param ExceptionEvent $event
*
* @throws \Exception
*/
public function checkException(ExceptionEvent $event): void
{
$e = $event->getThrowable();
if (!$e instanceof ProspectNotFoundException
&& !$e instanceof ContactNotFoundException
&& !$e instanceof TaskNotFoundException
&& !$e instanceof SavedUserSearchNotFoundException
&& !$e instanceof QuoteNotFoundException
&& !$e instanceof SubResourceNotFoundException
&& !$e instanceof UnauthorizedHttpException
&& !$e instanceof ClientException) {
return;
}
$this->sentryLogger->captureException(SentryLogger::CHANNEL_DATA_RETRIEVER, $e, ['catchOnClass' => self::class]);
$response = new JsonResponse(
[
'code' => $e instanceof ClientException || $e instanceof UnauthorizedHttpException ? Response::HTTP_UNAUTHORIZED : Response::HTTP_INTERNAL_SERVER_ERROR,
'errorMessage' => $e instanceof ClientException ? 'erreur_deconnexion' : $e->getMessage(),
],
200
);
$response->headers->set('Content-Type', 'application/+json');
$event->setResponse($response);
}
}