<?php
declare(strict_types=1);
namespace App\Domain\Entity;
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\Behavior\Identifiable;
use App\Domain\Entity\Translation\DirectoryDepartmentTranslation;
use DateTime;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Gedmo\SoftDeleteable\Traits\SoftDeleteable;
use Gedmo\Timestampable\Traits\Timestampable;
use Locastic\ApiPlatformTranslationBundle\Model\AbstractTranslatable;
use Locastic\ApiPlatformTranslationBundle\Model\TranslationInterface;
#[ApiResource(
operations: [
new Delete(security: "is_granted('ROLE_ADMIN')"),
new GetCollection(filters: [
'directory_department.search_filter',
'directory_department.query_filter',
'directory_department.order_filter',
]),
new Get(),
new Post(normalizationContext: ['groups' => ['translations']], security: "is_granted('ROLE_ADMIN')"),
new Put(normalizationContext: ['groups' => ['translations']], security: "is_granted('ROLE_ADMIN')"),
],
normalizationContext: ['groups' => ['directory_department_read']],
denormalizationContext: ['groups' => ['directory_department_write']],
filters: ['translation.groups']
)]
class DirectoryDepartment extends AbstractTranslatable
{
use Identifiable;
use SoftDeleteable;
use Timestampable;
private Collection $offmaps;
public function __construct(
public DirectoryCountry $country,
public Media $photo,
public ?string $reference = null,
public ?string $sqlStr = null,
public ?string $remoteId = null,
public ?DateTime $zhistUpdate = null,
) {
parent::__construct();
$this->offmaps = new ArrayCollection();
}
public function getDescription(): ?string
{
return $this->getTranslationType()->getDescription();
}
public function getTranslationType(?string $locale = null): DirectoryDepartmentTranslation
{
return $this->getTranslation($locale);
}
public function setDescription(?string $description): void
{
$this->getTranslationType()->setDescription($description);
}
public function getName(?string $locale = null): ?string
{
return $this->getTranslationType($locale)->getName();
}
public function setName(?string $name): void
{
$this->getTranslationType()->setName($name);
}
public function createTranslation(): TranslationInterface
{
return new DirectoryDepartmentTranslation();
}
/**
* @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);
}
}