<?php
declare(strict_types=1);
namespace App\Domain\Entity;
use ApiPlatform\Metadata\ApiProperty;
use ApiPlatform\Metadata\ApiResource;
use ApiPlatform\Metadata\Delete;
use ApiPlatform\Metadata\Get;
use ApiPlatform\Metadata\GetCollection;
use ApiPlatform\Metadata\Post;
use ApiPlatform\Metadata\Put;
use App\Domain\Entity\Translation\CountryTranslation;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Locastic\ApiPlatformTranslationBundle\Model\AbstractTranslatable;
use Locastic\ApiPlatformTranslationBundle\Model\TranslationInterface;
#[ApiResource(
operations: [
new Delete(security: "is_granted('ROLE_ADMIN')"),
new GetCollection(
paginationEnabled: false,
filters: ['country.search_filter', 'country.query_filter'],
),
new Get(),
new Post(security: "is_granted('ROLE_ADMIN')"),
new Put(security: "is_granted('ROLE_ADMIN')"),
],
normalizationContext: ['groups' => ['country_read', 'translations']],
denormalizationContext: ['groups' => ['country_write']],
filters: ['translation.groups']
)]
class Country extends AbstractTranslatable
{
#[ApiProperty(identifier: true)]
public ?int $id = null;
private Collection $offmaps;
public function __construct(
public string $alpha2,
public string $alpha3,
public int $countryCode,
public string $iso31665,
public string $region,
public string $subRegion,
public string $intermediateRegion,
public int $regionCode,
public int $subRegionCode,
public int $intermediateRegionCode,
) {
parent::__construct();
$this->offmaps = new ArrayCollection();
}
public function getName(?string $locale = null): ?string
{
return $this->getTranslationType($locale)->getName();
}
public function getTranslationType(?string $locale = null): CountryTranslation
{
return $this->getTranslation($locale);
}
public function setName(?string $name): void
{
$this->getTranslationType()->setName($name);
}
public function createTranslation(): TranslationInterface
{
return new CountryTranslation();
}
/**
* @return Collection
*/
public function getOffmaps(): Collection
{
return $this->offmaps;
}
/**
* @param Collection $offmaps
*/
public function setOffmaps(Collection $offmaps): void
{
$this->offmaps = $offmaps;
}
public function addOffmap(Offmap $offmap): void
{
if ($this->offmaps->contains($offmap)) {
return;
}
$this->offmaps->add($offmap);
}
public function removeOffmap(Offmap $offmap): void
{
if (!$this->offmaps->contains($offmap)) {
return;
}
$this->offmaps->removeElement($offmap);
}
}