<?php
namespace App\Entity\User\Address;
use App\Repository\User\Address\AddressRepository;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Timestampable\Traits\TimestampableEntity;
use Ramsey\Uuid\Doctrine\UuidGenerator;
use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\Serializer\Annotation\SerializedName;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ORM\InheritanceType("SINGLE_TABLE")
* @ORM\DiscriminatorColumn(name="discr", type="string")
* @ORM\DiscriminatorMap({
* "home" = "Home",
* "delivery" = "Delivery",
* "order" = "Order",
* })
*
* @ORM\Entity(repositoryClass=AddressRepository::class)
*/
abstract class Address
{
/**
* Hook timestampable behavior
* updates createdAt, updatedAt fields
*/
use TimestampableEntity;
/**
* @ORM\Id
* @ORM\Column(type="uuid", unique=true)
* @ORM\GeneratedValue(strategy="CUSTOM")
* @ORM\CustomIdGenerator(class=UuidGenerator::class)
* @SerializedName("id")
* @Assert\Uuid()
* @Groups({
* "Order:output",
* "User:io",
* "put_address_home",
* "put_address_delivery",
* "AddressHome:io",
* "AddressDelivery:io",
* })
*/
private string $id;
/**
* @ORM\Column(type="string", length=38)
* @SerializedName("street")
* @Assert\NotBlank()
* @Assert\Length(min="1", max="38")
* @Groups({
* "Order:output",
* "User:io",
* "put_address_home",
* "put_address_delivery",
* "AddressHome:io",
* "AddressDelivery:io",
* })
*/
private string $street;
/**
* @ORM\Column(type="string", length=38, nullable=true)
* @SerializedName("complement")
* @Groups({
* "Order:output",
* "User:io",
* "put_address_home",
* "put_address_delivery",
* "AddressHome:io",
* "AddressDelivery:io",
* })
*/
private ?string $complement = null;
/**
* @ORM\Column(type="string", length=5)
* @SerializedName("postal_code")
* @Assert\NotBlank()
* @Assert\Length(min="5", max="5")
* @Assert\Type(type="numeric")
* @Groups({
* "Order:output",
* "User:io",
* "put_address_home",
* "put_address_delivery",
* "AddressHome:io",
* "AddressDelivery:io",
* })
*/
private string $postalCode;
/**
* @ORM\Column(type="string", length=38)
* @SerializedName("city")
* @Assert\NotBlank()
* @Assert\Length(min="1", max="38")
* @Groups({
* "Order:output",
* "User:io",
* "put_address_home",
* "put_address_delivery",
* "AddressHome:io",
* "AddressDelivery:io",
* })
* @Assert\Regex("/^[a-zA-Z-ëêéèâàäôïîç ]*$/",
* message = "Numbers or special characters are not allowed")
*/
private string $city;
/**
* @ORM\Column(type="string", length=2)
* @SerializedName("country_code")
* @Assert\NotBlank()
* @Assert\Country()
*/
private string $countryCode = 'FR';
/**
* @ORM\Column(type="boolean")
* @SerializedName("favorite")
* @Groups({
* "User:io",
* "put_address_home",
* "put_address_delivery",
* "AddressHome:io",
* "AddressDelivery:io",
* })
*/
private bool $favorite;
/**
* @return string
*/
public function getId(): ?string
{
return $this->id;
}
public function getStreet(): ?string
{
return $this->street;
}
public function setStreet(string $street): self
{
$this->street = $street;
return $this;
}
public function getComplement(): ?string
{
return $this->complement;
}
public function setComplement(?string $complement): self
{
$this->complement = $complement;
return $this;
}
public function getPostalCode(): ?string
{
return $this->postalCode;
}
public function setPostalCode(string $postalCode): self
{
$this->postalCode = $postalCode;
return $this;
}
public function getCity(): ?string
{
return $this->city;
}
public function setCity(string $city): self
{
$this->city = $city;
return $this;
}
public function getCountryCode(): ?string
{
return $this->countryCode;
}
public function setCountryCode(string $countryCode): self
{
$this->countryCode = $countryCode;
return $this;
}
public function getFavorite(): ?bool
{
return $this->favorite;
}
public function setFavorite(bool $favorite): self
{
$this->favorite = $favorite;
return $this;
}
}