From 5e3b4da7c0442b646aadcb66083f8ebd1328d1f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20P?= Date: Mon, 25 Nov 2024 17:46:26 +0100 Subject: [PATCH] Biblio and images for Finding --- src/Controller/FindingController.php | 23 ++++++++++++++ src/Entity/Finding.php | 37 +++++++++++++++++++++++ src/Entity/Image.php | 15 +++++++++ src/Repository/BibliographyRepository.php | 25 +++++++++++++++ 4 files changed, 100 insertions(+) diff --git a/src/Controller/FindingController.php b/src/Controller/FindingController.php index e655948..7360bee 100644 --- a/src/Controller/FindingController.php +++ b/src/Controller/FindingController.php @@ -2,11 +2,13 @@ namespace App\Controller; +use App\Entity\Bibliography; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\Routing\Attribute\Route; use Doctrine\ORM\EntityManagerInterface; use App\Entity\Finding; +use App\Entity\Image; class FindingController extends AbstractController { @@ -26,4 +28,25 @@ class FindingController extends AbstractController return $this->json($findings); } + + #[Route('/finding/{id<\d+>}', name: 'app_finding_record')] + public function record(Finding $finding, EntityManagerInterface $em): JsonResponse + { + $repo = $em->getRepository(Finding::class); + $coords = $repo->coordinates($finding->getId()); + $finding->setLat($coords['lat']); + $finding->setLng($coords['lng']); + $repo = $em->getRepository(Bibliography::class); + $biblio = $repo->findAllByFinding($finding->getId()); + $repo = $em->getRepository(Image::class); + $images = $repo->findBy( + ['finding' => $finding->getId()], + ['sequence' => 'ASC'] + ); + + $finding->setBibliography($biblio); + $finding->setImages($images); + + return $this->json($finding); + } } diff --git a/src/Entity/Finding.php b/src/Entity/Finding.php index 458bca2..724d167 100644 --- a/src/Entity/Finding.php +++ b/src/Entity/Finding.php @@ -56,6 +56,16 @@ class Finding implements \JsonSerializable private ?float $lng = null; + /** + * @var Bibliography[] $bibliography + */ + private ?array $bibliography = null; + + /** + * @var Bibliography[] $images + */ + private ?array $images = null; + public function getId(): ?int { return $this->id; @@ -236,9 +246,34 @@ class Finding implements \JsonSerializable return $this; } + public function getBibliography(): ?array + { + return $this->bibliography; + } + + public function setBibliography(array $bibliography): static + { + $this->bibliography = $bibliography; + + return $this; + } + + public function getImages(): ?array + { + return $this->images; + } + + public function setImages(array $images): static + { + $this->images = $images; + + return $this; + } + public function jsonSerialize(): array { return [ + 'id' => $this->id, 'object' => $this->object, 'material' => $this->material, 'measurements' => $this->measurements, @@ -251,6 +286,8 @@ class Finding implements \JsonSerializable 'description' => $this->description, 'author' => $this->author, 'coordinates' => [$this->lat, $this->lng], + 'bibliography' => $this->bibliography, + 'images' => $this->images, ]; } } diff --git a/src/Entity/Image.php b/src/Entity/Image.php index 7965df7..d144942 100644 --- a/src/Entity/Image.php +++ b/src/Entity/Image.php @@ -28,6 +28,9 @@ class Image implements \JsonSerializable #[ORM\Column(name: 'sito', type: Types::BIGINT, nullable: true)] private ?string $site = null; + #[ORM\Column(name: 'rinvenimento', type: Types::BIGINT, nullable: true)] + private ?string $finding = null; + #[ORM\Column(name: 'ordine', type: Types::SMALLINT)] private ?int $sequence = null; @@ -94,6 +97,18 @@ class Image implements \JsonSerializable return $this; } + public function getFinding(): ?string + { + return $this->finding; + } + + public function setFinding(?string $finding): static + { + $this->finding = $finding; + + return $this; + } + public function getSequence(): ?int { return $this->sequence; diff --git a/src/Repository/BibliographyRepository.php b/src/Repository/BibliographyRepository.php index 9af7d6c..f085bbb 100644 --- a/src/Repository/BibliographyRepository.php +++ b/src/Repository/BibliographyRepository.php @@ -40,6 +40,31 @@ class BibliographyRepository extends ServiceEntityRepository $query->setParameter('id', $notConserId); + return $query->getResult(); + } + /** + * @return Bibliography[] + */ + public function findAllByFinding(int $findingId): array + { + $rsm = new ResultSetMappingBuilder($this->getEntityManager()); + $rsm->addRootEntityFromClassMetadata('App\Entity\Bibliography', 'b'); + $query = $this->getEntityManager()->createNativeQuery( + 'SELECT + id, + citazione, + riferimento, + pagine + FROM bibliografia b + JOIN bibliografia_rinvenim + ON id_bibliografia = b.id + WHERE id_rinvenimento = :id + ORDER BY ordine ASC', + $rsm + ); + + $query->setParameter('id', $findingId); + return $query->getResult(); } }