From 912cf9b00825ff1d3c6589973d3e7f767172dd34 Mon Sep 17 00:00:00 2001 From: Manuel Aranda Date: Tue, 1 Apr 2025 19:44:59 +0200 Subject: [PATCH] refs #1797. Rename image. Crete image --- .../OgRepository/Image/RenameAction.php | 81 +++++++++++++++++++ src/Dto/Input/ImageInput.php | 6 +- src/State/Processor/ImageProcessor.php | 11 ++- 3 files changed, 95 insertions(+), 3 deletions(-) create mode 100644 src/Controller/OgRepository/Image/RenameAction.php diff --git a/src/Controller/OgRepository/Image/RenameAction.php b/src/Controller/OgRepository/Image/RenameAction.php new file mode 100644 index 0000000..8d83633 --- /dev/null +++ b/src/Controller/OgRepository/Image/RenameAction.php @@ -0,0 +1,81 @@ +getImageImageRepositories(); + + if ($repositories->count() === 0) { + return new JsonResponse(data: ['error' => 'Image is not in any repository', 'code' => Response::HTTP_INTERNAL_SERVER_ERROR], status: Response::HTTP_BAD_REQUEST); + } + + $allGood = true; + foreach ($repositories as $repository) { + try { + $content = $this->createRequest('GET', 'http://'.$repository->getRepository()->getIp(). ':8006/ogrepository/v1/status'); + } catch (TransportExceptionInterface $e) { + $allGood = false; + break; + } + } + + if (!$allGood) { + $this->logger->info('Image is not available in all repositories', ['image' => $image->getName()]); + return new JsonResponse(data: ['error' => 'Image is not available in all repositories', 'code' => Response::HTTP_INTERNAL_SERVER_ERROR], status: Response::HTTP_BAD_REQUEST); + } + + $conditional = false; + foreach ($repositories as $repository) { + $params = [ + 'json' => [ + 'ID_img' => $repository->getImageFullsum(), + 'image_new_name' => $image->getName().'_bkp', + ] + ]; + + $content = $this->createRequest('POST', 'http://'.$repository->getRepository()->getIp().':8006/ogrepository/v1/images/rename', $params); + + if (isset($content['error']) && $content['code'] === Response::HTTP_INTERNAL_SERVER_ERROR ) { + $conditional = true; + break; + } + } + + if ($conditional) { + return new JsonResponse(data: ['error' => 'Error renaming image'], status: Response::HTTP_INTERNAL_SERVER_ERROR); + } + + $image->setName($image->getName().'_bkp'); + $this->entityManager->persist($image); + $this->entityManager->flush(); + + return new JsonResponse(data: [], status: Response::HTTP_OK); + } +} \ No newline at end of file diff --git a/src/Dto/Input/ImageInput.php b/src/Dto/Input/ImageInput.php index fc79464..abb8e01 100644 --- a/src/Dto/Input/ImageInput.php +++ b/src/Dto/Input/ImageInput.php @@ -5,6 +5,7 @@ namespace App\Dto\Input; use ApiPlatform\Metadata\ApiProperty; use App\Dto\Output\ClientOutput; use App\Dto\Output\ImageImageRepositoryOutput; +use App\Dto\Output\ImageOutput; use App\Dto\Output\ImageRepositoryOutput; use App\Dto\Output\OrganizationalUnitOutput; use App\Dto\Output\PartitionOutput; @@ -20,7 +21,6 @@ use Symfony\Component\Validator\Constraints as Assert; final class ImageInput { - #[Assert\NotBlank(message: 'validators.image.name.not_blank')] #[Groups(['image:write'])] #[ApiProperty(description: 'The name of the image', example: "Image 1")] public ?string $name = null; @@ -37,6 +37,10 @@ final class ImageInput #[ApiProperty(description: 'The type of the image', example: "Server")] public ?string $source = 'input'; + #[Groups(['image:write'])] + #[ApiProperty(description: 'The optional selected image')] + public ?ImageOutput $selectedImage = null; + #[Groups(['image:write'])] #[ApiProperty(description: 'The software profile of the image')] public ?SoftwareProfileOutput $softwareProfile = null; diff --git a/src/State/Processor/ImageProcessor.php b/src/State/Processor/ImageProcessor.php index ac7ad1a..80a9b4d 100644 --- a/src/State/Processor/ImageProcessor.php +++ b/src/State/Processor/ImageProcessor.php @@ -10,6 +10,7 @@ use ApiPlatform\Metadata\Put; use ApiPlatform\State\ProcessorInterface; use ApiPlatform\Validator\ValidatorInterface; use App\Controller\OgAgent\CreateImageAction; +use App\Controller\OgRepository\Image\RenameAction; use App\Controller\OgRepository\Image\TransferAction; use App\Dto\Input\ImageInput; use App\Dto\Input\ImageRepositoryInput; @@ -26,6 +27,7 @@ readonly class ImageProcessor implements ProcessorInterface private ImageRepository $imageRepository, private ValidatorInterface $validator, private CreateImageAction $createImageActionController, + private RenameAction $renameActionController, ) { } @@ -64,10 +66,15 @@ readonly class ImageProcessor implements ProcessorInterface $image = $data->createOrUpdateEntity($entity); $this->validator->validate($image); - if ($data->source !== 'input') { - $response = $this->createImageActionController->__invoke($image); + if ($data->selectedImage){ + $content = $this->renameActionController->__invoke($image); + + if ($content->getStatusCode() !== 200){ + throw new \Exception('Error renaming image'); + } } + $response = $this->createImageActionController->__invoke($image); $this->imageRepository->save($image); return new ImageOutput($image);