getContainer()->getPermissionsService()->currentUserCanWrite(Entities::SERVICES)) { throw new AccessDeniedException('You are not allowed to add category.'); } $result = new CommandResult(); $this->checkMandatoryFields($command); $category = CategoryFactory::create($command->getFields()); if (!$category instanceof Category) { $result->setResult(CommandResult::RESULT_ERROR); $result->setMessage('Could not create category.'); return $result; } /** @var CategoryRepository $categoryRepository */ $categoryRepository = $this->container->get('domain.bookable.category.repository'); /** @var ServiceRepository $serviceRepository */ $serviceRepository = $this->container->get('domain.bookable.service.repository'); $categoryRepository->beginTransaction(); if (!($categoryId = $categoryRepository->add($category))) { $categoryRepository->rollback(); } $category->setId(new Id($categoryId)); if ($category->getServiceList() !== null) { $serviceList = $category->getServiceList(); foreach ($serviceList->getItems() as $service) { /** @var Service $service */ $service->setCategoryId(new Id($categoryId)); if (!$serviceRepository->add($service)) { $categoryRepository->rollback(); } } } $categoryRepository->commit(); $result->setResult(CommandResult::RESULT_SUCCESS); $result->setMessage('Successfully added new category.'); $result->setData([ Entities::CATEGORY => $category->toArray() ]); return $result; } }