diff --git a/src/Serializer/AttachmentNormalizer.php b/src/Serializer/AttachmentNormalizer.php new file mode 100644 index 00000000..7911a9c3 --- /dev/null +++ b/src/Serializer/AttachmentNormalizer.php @@ -0,0 +1,70 @@ +. + */ + +declare(strict_types=1); + + +namespace App\Serializer; + +use App\Entity\Attachments\Attachment; +use App\Services\Attachments\AttachmentURLGenerator; +use Symfony\Component\DependencyInjection\Attribute\Autowire; +use Symfony\Component\Serializer\Normalizer\NormalizerInterface; +use Symfony\Component\Serializer\Normalizer\ObjectNormalizer; + +class AttachmentNormalizer implements NormalizerInterface +{ + public function __construct( + #[Autowire(service: ObjectNormalizer::class)] + private readonly NormalizerInterface $normalizer, + private readonly AttachmentURLGenerator $attachmentURLGenerator, + ) + { + + } + + public function normalize(mixed $object, string $format = null, array $context = []) + { + if (!$object instanceof Attachment) { + throw new \InvalidArgumentException('This normalizer only supports Attachment objects!'); + } + + $data = $this->normalizer->normalize($object, $format, $context); + + $data['media_url'] = $this->attachmentURLGenerator->getViewURL($object); + //Add thumbnail url if the attachment is a picture + $data['thumbnail_url'] = $object->isPicture() ? $this->attachmentURLGenerator->getThumbnailURL($object) : null; + + return $data; + } + + public function supportsNormalization(mixed $data, string $format = null, array $context = []): bool + { + return $data instanceof Attachment; + } + + public function getSupportedTypes(?string $format): array + { + return [ + //We depend on the context to determine if we should normalize or not + Attachment::class => true, + ]; + } +} \ No newline at end of file