From 927677ddc0c3d086b0c278fe98bcb348800fb3ad Mon Sep 17 00:00:00 2001 From: Manuel Aranda Date: Tue, 8 Apr 2025 15:42:53 +0200 Subject: [PATCH] refs #1858. Added description into imageImageRepositort --- migrations/Version20250407063100.php | 31 +++++++++++++++++++ .../Webhook/ResponseController.php | 9 +++++- src/Dto/Input/ImageImageRepositoryInput.php | 13 ++------ src/Dto/Output/ImageImageRepositoryOutput.php | 4 +++ src/Entity/ImageImageRepository.php | 15 +++++++++ src/State/Processor/ImageProcessor.php | 10 ++++-- .../Provider/ImageImageRepositoryProvider.php | 15 +++++++++ 7 files changed, 83 insertions(+), 14 deletions(-) create mode 100644 migrations/Version20250407063100.php diff --git a/migrations/Version20250407063100.php b/migrations/Version20250407063100.php new file mode 100644 index 0000000..2181e1c --- /dev/null +++ b/migrations/Version20250407063100.php @@ -0,0 +1,31 @@ +addSql('ALTER TABLE image_image_repository ADD description VARCHAR(255) DEFAULT NULL'); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('ALTER TABLE image_image_repository DROP description'); + } +} diff --git a/src/Controller/OgRepository/Webhook/ResponseController.php b/src/Controller/OgRepository/Webhook/ResponseController.php index b4900f7..13541a0 100644 --- a/src/Controller/OgRepository/Webhook/ResponseController.php +++ b/src/Controller/OgRepository/Webhook/ResponseController.php @@ -51,10 +51,17 @@ class ResponseController extends AbstractOgRepositoryController $imageImageRepository = $this->getImageImageRepository($trace); if (!$imageImageRepository) return $this->jsonResponseError('Image not found', Response::HTTP_NOT_FOUND, $trace); + $imageImageRepository->setStatus(ImageStatus::SUCCESS); + $this->entityManager->persist($imageImageRepository); + + if ($data['success'] !== true) { + $this->updateTraceStatus($trace, TraceStatus::FAILED, $data['output'] ?? 'Action failed'); + return new JsonResponse(['message' => 'Success'], Response::HTTP_OK); + } + if ($setFullsum) { $imageImageRepository->setImageFullsum($data['image_id']); } - $imageImageRepository->setStatus(ImageStatus::SUCCESS); $this->entityManager->persist($imageImageRepository); $this->updateTraceStatus($trace, TraceStatus::SUCCESS); diff --git a/src/Dto/Input/ImageImageRepositoryInput.php b/src/Dto/Input/ImageImageRepositoryInput.php index 9cd95ca..b595bb2 100644 --- a/src/Dto/Input/ImageImageRepositoryInput.php +++ b/src/Dto/Input/ImageImageRepositoryInput.php @@ -12,13 +12,8 @@ use Symfony\Component\Validator\Constraints as Assert; final class ImageImageRepositoryInput { - #[Assert\NotNull] #[Groups(['image-image-repository:write'])] - public ?ImageRepositoryOutput $imageRepository = null; - - #[Assert\NotNull] - #[Groups(['image-image-repository:write'])] - public ?string $status = ''; + public ?string $description = ''; public function __construct(?ImageImageRepository $imageImageRepository = null) { @@ -26,8 +21,7 @@ final class ImageImageRepositoryInput return; } - $this->imageRepository = new ImageRepositoryOutput($imageImageRepository->getRepository()); - $this->status = $imageImageRepository->getStatus(); + $this->description = $imageImageRepository->getDescription(); } public function createOrUpdateEntity(?ImageImageRepository $imageImageRepository = null): ImageImageRepository @@ -36,8 +30,7 @@ final class ImageImageRepositoryInput $imageImageRepository = new ImageImageRepository(); } - $imageImageRepository->setRepository($this->imageRepository); - $imageImageRepository->setStatus($this->status); + $imageImageRepository->setDescription($this->description); return $imageImageRepository; } diff --git a/src/Dto/Output/ImageImageRepositoryOutput.php b/src/Dto/Output/ImageImageRepositoryOutput.php index 2db73bc..013b4f3 100644 --- a/src/Dto/Output/ImageImageRepositoryOutput.php +++ b/src/Dto/Output/ImageImageRepositoryOutput.php @@ -24,6 +24,9 @@ class ImageImageRepositoryOutput extends AbstractOutput #[Groups(['image-image-repository:read', 'image:read'])] public ?string $datasize = null; + #[Groups(['image-image-repository:read', 'image:read'])] + public ?string $description = null; + #[Groups(['image:read', 'image-image-repository:read'])] public ?int $version = null; @@ -51,6 +54,7 @@ class ImageImageRepositoryOutput extends AbstractOutput $this->status = $imageImageRepository->getStatus(); $this->imageFullsum = $imageImageRepository->getImageFullsum(); $this->datasize = $imageImageRepository->getDatasize(); + $this->description = $imageImageRepository->getDescription(); $this->createdAt = $imageImageRepository->getCreatedAt(); $this->createdBy = $imageImageRepository->getCreatedBy(); } diff --git a/src/Entity/ImageImageRepository.php b/src/Entity/ImageImageRepository.php index d80012c..fa95665 100644 --- a/src/Entity/ImageImageRepository.php +++ b/src/Entity/ImageImageRepository.php @@ -32,6 +32,9 @@ class ImageImageRepository extends AbstractEntity #[ORM\Column(nullable: true)] private ?int $version = null; + #[ORM\Column(length: 255, nullable: true)] + private ?string $description = null; + public function getImage(): ?Image { return $this->image; @@ -115,4 +118,16 @@ class ImageImageRepository extends AbstractEntity return $this; } + + public function getDescription(): ?string + { + return $this->description; + } + + public function setDescription(?string $description): static + { + $this->description = $description; + + return $this; + } } diff --git a/src/State/Processor/ImageProcessor.php b/src/State/Processor/ImageProcessor.php index 12bcf5d..efea176 100644 --- a/src/State/Processor/ImageProcessor.php +++ b/src/State/Processor/ImageProcessor.php @@ -18,16 +18,16 @@ use App\Dto\Output\ImageOutput; use App\Entity\ImageImageRepository; use App\Repository\ImageRepository; use App\Repository\ImageRepositoryRepository as ImageRepositoryRepository; +use Symfony\Component\HttpKernel\KernelInterface; use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface; readonly class ImageProcessor implements ProcessorInterface { public function __construct( - private ImageRepositoryRepository $imageRepositoryRepository, private ImageRepository $imageRepository, private ValidatorInterface $validator, private CreateImageAction $createImageActionController, - private RenameAction $renameActionController, + private KernelInterface $kernel, ) { } @@ -72,7 +72,11 @@ readonly class ImageProcessor implements ProcessorInterface } else { $image = $data->createOrUpdateEntity($entity); - $response = $this->createImageActionController->__invoke($image); + if ($this->kernel->getEnvironment() !== 'test') { + $response = $this->createImageActionController->__invoke($image); + } + + $this->validator->validate($image); $this->imageRepository->save($image); } diff --git a/src/State/Provider/ImageImageRepositoryProvider.php b/src/State/Provider/ImageImageRepositoryProvider.php index 9c47ca3..ba5a1aa 100644 --- a/src/State/Provider/ImageImageRepositoryProvider.php +++ b/src/State/Provider/ImageImageRepositoryProvider.php @@ -9,6 +9,7 @@ use ApiPlatform\Metadata\Patch; use ApiPlatform\Metadata\Put; use ApiPlatform\State\Pagination\TraversablePaginator; use ApiPlatform\State\ProviderInterface; +use App\Dto\Input\ImageImageRepositoryInput; use App\Dto\Output\ImageImageRepositoryOutput; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; @@ -26,6 +27,9 @@ readonly class ImageImageRepositoryProvider implements ProviderInterface switch ($operation){ case $operation instanceof GetCollection: return $this->provideCollection($operation, $uriVariables, $context); + case $operation instanceof Patch: + case $operation instanceof Put: + return $this->provideInput($operation, $uriVariables, $context); case $operation instanceof Get: return $this->provideItem($operation, $uriVariables, $context); } @@ -53,4 +57,15 @@ readonly class ImageImageRepositoryProvider implements ProviderInterface return new ImageImageRepositoryOutput($item); } + + public function provideInput(Operation $operation, array $uriVariables = [], array $context = []): object|array|null + { + if (isset($uriVariables['uuid'])) { + $item = $this->itemProvider->provide($operation, $uriVariables, $context); + + return $item !== null ? new ImageImageRepositoryInput($item) : null; + } + + return new ImageImageRepositoryInput(); + } }