<?php
namespace App\EventSubscriber\Import;
use App\Event\Import\ImportFileSavedEvent;
use App\Event\Import\ImportFileStatusChangedEvent;
use App\Import\DTO\ChangeImportHistoryStatus;
use App\Import\DTO\CreateImportHistory;
use App\Import\Query\GetImportHistoryFromFilePathQuery;
use App\Message\Import\ChangeImportHistoryStatusMessage;
use App\Message\Import\CreateImportHistoryMessage;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Messenger\MessageBusInterface;
final class ImportSubscriber implements EventSubscriberInterface
{
private MessageBusInterface $messageBus;
private GetImportHistoryFromFilePathQuery $getImportHistoryFromFilePathQuery;
public function __construct(
MessageBusInterface $messageBus,
GetImportHistoryFromFilePathQuery $getImportHistoryFromFilePathQuery
) {
$this->messageBus = $messageBus;
$this->getImportHistoryFromFilePathQuery = $getImportHistoryFromFilePathQuery;
}
public static function getSubscribedEvents(): array
{
return [
ImportFileSavedEvent::class => 'onImportFileSaved',
ImportFileStatusChangedEvent::class => 'onImportFileStatusChanged',
];
}
public function onImportFileSaved(ImportFileSavedEvent $event): void
{
$this->messageBus->dispatch(new CreateImportHistoryMessage(new CreateImportHistory(
$event->getFilePath(),
$event->getFileHash(),
$event->getType(),
$event->getContext(),
$event->getSheetName(),
$event->getStatus()
)));
}
public function onImportFileStatusChanged(ImportFileStatusChangedEvent $event): void
{
$importHistory = $this->getImportHistoryFromFilePathQuery->get($event->getPath());
if (!is_null($importHistory)) {
$this->messageBus->dispatch(new ChangeImportHistoryStatusMessage(new ChangeImportHistoryStatus(
$importHistory->getId(),
$event->getStatus(),
)));
}
}
}