Files
radarsargasses/backend/src/Entity/CoastalPoint.php

107 lines
3.7 KiB
PHP

<?php
namespace App\Entity;
use ApiPlatform\Metadata\ApiResource;
use ApiPlatform\Metadata\Get;
use ApiPlatform\Metadata\GetCollection;
use App\Repository\CoastalPointRepository;
use Symfony\Component\Serializer\Annotation\Groups;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Types\UuidType;
use Symfony\Component\Uid\Uuid;
#[ORM\Entity(repositoryClass: CoastalPointRepository::class)]
#[ORM\Index(columns: ['type'], name: 'idx_coastal_type')]
#[ORM\Index(columns: ['region'], name: 'idx_coastal_region')]
#[ApiResource(
shortName: 'Spot',
operations: [
new GetCollection(),
new Get(),
],
normalizationContext: ['groups' => ['spot:read']],
order: ['name' => 'ASC'],
paginationEnabled: false,
)]
class CoastalPoint
{
#[ORM\Id]
#[ORM\Column(type: UuidType::NAME, unique: true)]
#[ORM\GeneratedValue(strategy: 'CUSTOM')]
#[ORM\CustomIdGenerator(class: 'doctrine.uuid_generator')]
#[Groups(['spot:read'])]
private ?Uuid $id = null;
#[ORM\Column(length: 150)]
#[Groups(['spot:read'])]
private string $name;
#[ORM\Column(type: 'geometry', options: ['geometry_type' => 'POINT', 'srid' => 4326])]
private mixed $geometry = null;
#[ORM\Column(length: 30)]
#[Groups(['spot:read'])]
private string $type;
#[ORM\Column(length: 100)]
#[Groups(['spot:read'])]
private string $region;
#[ORM\Column(length: 30, nullable: true, unique: true)]
private ?string $osmId = null;
/** @var Collection<int, ImpactScore> */
#[ORM\OneToMany(targetEntity: ImpactScore::class, mappedBy: 'coastalPoint')]
private Collection $impactScores;
/** @var Collection<int, UserFeedback> */
#[ORM\OneToMany(targetEntity: UserFeedback::class, mappedBy: 'coastalPoint')]
private Collection $feedbacks;
public function __construct()
{
$this->name = '';
$this->type = '';
$this->region = '';
$this->impactScores = new ArrayCollection();
$this->feedbacks = new ArrayCollection();
}
public function getId(): ?Uuid { return $this->id; }
public function getName(): string { return $this->name; }
public function setName(string $name): static { $this->name = $name; return $this; }
public function getGeometry(): mixed { return $this->geometry; }
public function setGeometry(mixed $geometry): static { $this->geometry = $geometry; return $this; }
#[Groups(['spot:read'])]
public function getLongitude(): ?float
{
if ($this->geometry === null) return null;
preg_match('/POINT\(([^ ]+) /', (string) $this->geometry, $m);
return isset($m[1]) ? (float) $m[1] : null;
}
#[Groups(['spot:read'])]
public function getLatitude(): ?float
{
if ($this->geometry === null) return null;
preg_match('/POINT\([^ ]+ ([^)]+)\)/', (string) $this->geometry, $m);
return isset($m[1]) ? (float) $m[1] : null;
}
public function getType(): string { return $this->type; }
public function setType(string $type): static { $this->type = $type; return $this; }
public function getRegion(): string { return $this->region; }
public function setRegion(string $region): static { $this->region = $region; return $this; }
public function getOsmId(): ?string { return $this->osmId; }
public function setOsmId(?string $osmId): static { $this->osmId = $osmId; return $this; }
/** @return Collection<int, ImpactScore> */
public function getImpactScores(): Collection { return $this->impactScores; }
/** @return Collection<int, UserFeedback> */
public function getFeedbacks(): Collection { return $this->feedbacks; }
}