diff --git a/src/Module/Directory/Domain/Entity/Address.php b/src/Module/Directory/Domain/Entity/Address.php new file mode 100644 index 0000000..00c2e45 --- /dev/null +++ b/src/Module/Directory/Domain/Entity/Address.php @@ -0,0 +1,183 @@ + ['address:read']], + denormalizationContext: ['groups' => ['address:write']], + order: ['id' => 'ASC'], +)] +#[ApiFilter(SearchFilter::class, properties: ['client' => 'exact', 'prospect' => 'exact'])] +#[ORM\Entity(repositoryClass: DoctrineAddressRepository::class)] +#[ORM\Table(name: 'directory_address')] +class Address implements TimestampableInterface, BlamableInterface +{ + use TimestampableBlamableTrait; + + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column] + #[Groups(['address:read'])] + private ?int $id = null; + + #[ORM\Column(length: 255, nullable: true)] + #[Groups(['address:read', 'address:write', 'client:read', 'prospect:read'])] + private ?string $label = null; + + #[ORM\Column(length: 255, nullable: true)] + #[Groups(['address:read', 'address:write', 'client:read', 'prospect:read'])] + private ?string $street = null; + + #[ORM\Column(length: 255, nullable: true)] + #[Groups(['address:read', 'address:write', 'client:read', 'prospect:read'])] + private ?string $streetComplement = null; + + #[ORM\Column(length: 20, nullable: true)] + #[Groups(['address:read', 'address:write', 'client:read', 'prospect:read'])] + private ?string $postalCode = null; + + #[ORM\Column(length: 255, nullable: true)] + #[Groups(['address:read', 'address:write', 'client:read', 'prospect:read'])] + private ?string $city = null; + + #[ORM\Column(length: 2)] + #[Groups(['address:read', 'address:write', 'client:read', 'prospect:read'])] + private string $country = 'FR'; + + #[ORM\ManyToOne(targetEntity: Client::class)] + #[ORM\JoinColumn(name: 'client_id', referencedColumnName: 'id', nullable: true, onDelete: 'CASCADE')] + #[Groups(['address:read', 'address:write'])] + private ?Client $client = null; + + #[ORM\ManyToOne(targetEntity: Prospect::class)] + #[ORM\JoinColumn(name: 'prospect_id', referencedColumnName: 'id', nullable: true, onDelete: 'CASCADE')] + #[Groups(['address:read', 'address:write'])] + private ?Prospect $prospect = null; + + public function getId(): ?int + { + return $this->id; + } + + public function getLabel(): ?string + { + return $this->label; + } + + public function setLabel(?string $label): static + { + $this->label = $label; + + return $this; + } + + public function getStreet(): ?string + { + return $this->street; + } + + public function setStreet(?string $street): static + { + $this->street = $street; + + return $this; + } + + public function getStreetComplement(): ?string + { + return $this->streetComplement; + } + + public function setStreetComplement(?string $streetComplement): static + { + $this->streetComplement = $streetComplement; + + return $this; + } + + public function getPostalCode(): ?string + { + return $this->postalCode; + } + + public function setPostalCode(?string $postalCode): static + { + $this->postalCode = $postalCode; + + return $this; + } + + public function getCity(): ?string + { + return $this->city; + } + + public function setCity(?string $city): static + { + $this->city = $city; + + return $this; + } + + public function getCountry(): string + { + return $this->country; + } + + public function setCountry(string $country): static + { + $this->country = $country; + + return $this; + } + + public function getClient(): ?Client + { + return $this->client; + } + + public function setClient(?Client $client): static + { + $this->client = $client; + + return $this; + } + + public function getProspect(): ?Prospect + { + return $this->prospect; + } + + public function setProspect(?Prospect $prospect): static + { + $this->prospect = $prospect; + + return $this; + } +} diff --git a/src/Module/Directory/Domain/Repository/AddressRepositoryInterface.php b/src/Module/Directory/Domain/Repository/AddressRepositoryInterface.php new file mode 100644 index 0000000..44b05f0 --- /dev/null +++ b/src/Module/Directory/Domain/Repository/AddressRepositoryInterface.php @@ -0,0 +1,12 @@ + + */ +final class DoctrineAddressRepository extends ServiceEntityRepository implements AddressRepositoryInterface +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, Address::class); + } + + public function findById(int $id): ?Address + { + return $this->find($id); + } +}