diff --git a/src/State/WorkflowDeleteProcessor.php b/src/State/WorkflowDeleteProcessor.php new file mode 100644 index 0000000..a0efec9 --- /dev/null +++ b/src/State/WorkflowDeleteProcessor.php @@ -0,0 +1,42 @@ + + */ +final readonly class WorkflowDeleteProcessor implements ProcessorInterface +{ + public function __construct( + private EntityManagerInterface $entityManager, + ) {} + + public function process(mixed $data, Operation $operation, array $uriVariables = [], array $context = []): void + { + /** @var Workflow $workflow */ + $workflow = $data; + + $count = (int) $this->entityManager->getConnection()->fetchOne( + 'SELECT COUNT(*) FROM project WHERE workflow_id = :id', + ['id' => $workflow->getId()], + ); + + if ($count > 0) { + throw new HttpException(409, sprintf( + 'Workflow used by %d project(s). Reassign them before deleting.', + $count, + )); + } + + $this->entityManager->remove($workflow); + $this->entityManager->flush(); + } +}