<?php
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\Application\Controller\Api\TeamMember\DeleteTeamMemberAction;
use App\Domain\Entity\Behavior\Identifiable;
use App\Domain\Entity\Translation\TeamMemberTranslation;
use Doctrine\Common\Collections\ArrayCollection;
use Gedmo\SoftDeleteable\Traits\SoftDeleteable;
use Gedmo\Timestampable\Traits\Timestampable;
use Locastic\ApiPlatformTranslationBundle\Model\AbstractTranslatable;
/**
* Class TeamMember
*
* @package App\Domain\Entity
*/
#[ApiResource(
operations: [
new Delete(uriTemplate: '/team_members/{uuid}', controller: DeleteTeamMemberAction::class, security: "is_granted('ROLE_ADMIN')"),
new Get(),
new GetCollection(
filters: [
'soft_delete_filter',
'team_member.search_or_filter',
'team_member.order_filter',
]
),
new Post(security: "is_granted('ROLE_ADMIN')"),
new Put(security: "is_granted('ROLE_ADMIN')"),
],
normalizationContext: ['groups' => ['team_member_read']],
denormalizationContext: ['groups' => ['team_member_write']]
)]
class TeamMember extends AbstractTranslatable
{
use Identifiable;
use SoftDeleteable;
use Timestampable;
/**
* @param string $familyName
* @param string $givenName
* @param bool $isCaramapsEmployee
* @param int $position
* @param string|null $email
* @param Locale|null $locale
* @param Media|null $photo1
* @param Media|null $photo2
* @param string|null $telephone
* @param array $translations
*/
public function __construct(
public string $familyName,
public string $givenName,
public bool $isCaramapsEmployee,
public int $position,
public ?string $email = null,
public ?Locale $locale = null,
public ?Media $photo1 = null,
public ?Media $photo2 = null,
public ?string $telephone = null,
) {
$this->translations = new ArrayCollection();
}
public function createTranslation(): TeamMemberTranslation
{
return new TeamMemberTranslation();
}
public function getDescription(): ?string
{
return $this->getTranslationType()->getDescription();
}
public function setDescription(?string $value): void
{
$this->getTranslationType()->setDescription($value);
}
public function getJobTitle(): ?string
{
return $this->getTranslationType()->getJobTitle();
}
public function setJobTitle(?string $value): void
{
$this->getTranslationType()->setJobTitle($value);
}
public function getTranslationType(?string $locale = null): TeamMemberTranslation
{
return $this->getTranslation($locale);
}
}