*/ final readonly class TaskNumberProcessor implements ProcessorInterface { /** * @param ProcessorInterface $persistProcessor */ public function __construct( #[Autowire(service: 'api_platform.doctrine.orm.state.persist_processor')] private ProcessorInterface $persistProcessor, private TaskRepository $taskRepository, private EntityManagerInterface $entityManager, ) {} /** * @param Task $data */ public function process(mixed $data, Operation $operation, array $uriVariables = [], array $context = []): mixed { if ($operation instanceof Post && null !== $data->getProject()) { return $this->entityManager->wrapInTransaction(function () use ($data, $operation, $uriVariables, $context) { $maxNumber = $this->taskRepository->findMaxNumberByProjectForUpdate($data->getProject()); $data->setNumber($maxNumber + 1); return $this->persistProcessor->process($data, $operation, $uriVariables, $context); }); } return $this->persistProcessor->process($data, $operation, $uriVariables, $context); } }