src/Entity/Common/Contact.php line 37

Open in your IDE?
  1. <?php
  2. namespace App\Entity\Common;
  3. use App\Entity\Account\User;
  4. use App\Entity\Sync\SyncableInterface;
  5. use App\Repository\Common\ContactRepository;
  6. use Doctrine\ORM\Mapping as ORM;
  7. use DrosalysWeb\ObjectExtensions\Blame\Model\BlameInterface;
  8. use DrosalysWeb\ObjectExtensions\Blame\Model\BlameTrait;
  9. use DrosalysWeb\ObjectExtensions\Timestamp\Model\TimestampInterface;
  10. use DrosalysWeb\ObjectExtensions\Timestamp\Model\TimestampTrait;
  11. use Nellapp\Bundle\SDKBundle\Channel\Entity\Contact\ContactInterface;
  12. use Nellapp\Bundle\SDKBundle\Channel\Entity\Contact\ContactMethodTrait;
  13. use Nellapp\Bundle\SDKBundle\Entity\Common\Address\Address;
  14. use Nellapp\Bundle\SDKBundle\Entity\Common\Address\AddressInterface;
  15. use Nellapp\Bundle\SDKBundle\Sync\EntityKeys;
  16. use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
  17. use Symfony\Component\Serializer\Annotation as Serial;
  18. use Symfony\Component\Uid\Uuid;
  19. use Symfony\Component\Validator\Constraints as Assert;
  20. #[UniqueEntity(
  21. fields: ['email'],
  22. message: 'contact.email.UniqueEntity',
  23. errorPath: 'email',
  24. groups: ['check_unique'],
  25. )]
  26. #[
  27. ORM\Entity(repositoryClass: ContactRepository::class),
  28. ORM\UniqueConstraint(fields: ['email']),
  29. ORM\Table(name: 'contacts'),
  30. ORM\Index(fields: ['email'], flags: ['fulltext']),
  31. ORM\Index(fields: ['firstName'], flags: ['fulltext']),
  32. ORM\Index(fields: ['lastName'], flags: ['fulltext']),
  33. ]
  34. class Contact implements TimestampInterface, BlameInterface, ContactInterface, SyncableInterface
  35. {
  36. // TODO: move Timestamp and Blame to ChannelContact
  37. use TimestampTrait;
  38. use BlameTrait;
  39. use ContactMethodTrait;
  40. #[
  41. ORM\Id,
  42. ORM\GeneratedValue(strategy: 'NONE'),
  43. ORM\Column(type: 'string', length: 36)
  44. ]
  45. #[Serial\Groups(['Manager', 'Sync'])]
  46. private ?string $id = null;
  47. #[ORM\Column(type: 'string', length: 180, unique: true)]
  48. #[Serial\Groups(['Manager', 'Sync'])]
  49. #[
  50. Assert\NotBlank(message: 'contact.email.NotBlank'),
  51. Assert\Email(message: 'contact.email.Email', mode: 'strict'),
  52. Assert\Length(
  53. min: 6,
  54. max: 64,
  55. minMessage: 'contact.email.Length.min',
  56. maxMessage: 'contact.email.Length.max',
  57. )
  58. ]
  59. private ?string $email = null;
  60. #[ORM\Column(type: 'string', nullable: true)]
  61. #[Serial\Groups(['Manager', 'Sync'])]
  62. #[
  63. Assert\NotBlank(message: 'contact.firstName.NotBlank'),
  64. Assert\Length(
  65. min: 2,
  66. max: 255,
  67. minMessage: 'contact.firstName.Length.min',
  68. maxMessage: 'contact.firstName.Length.max',
  69. )
  70. ]
  71. private ?string $firstName = null;
  72. #[ORM\Column(type: 'string', nullable: true)]
  73. #[Serial\Groups(['Manager', 'Sync'])]
  74. #[
  75. Assert\NotBlank(message: 'contact.lastName.NotBlank'),
  76. Assert\Length(
  77. min: 2,
  78. max: 255,
  79. minMessage: 'contact.lastName.Length.min',
  80. maxMessage: 'contact.lastName.Length.max',
  81. )
  82. ]
  83. private ?string $lastName = null;
  84. #[ORM\Column(type: 'string', length: 20, nullable: true)]
  85. #[Serial\Groups(['Manager', 'Sync'])]
  86. #[
  87. Assert\Length(
  88. min: 8,
  89. max: 20,
  90. minMessage: 'contact.phoneNumber.Length.min',
  91. maxMessage: 'contact.phoneNumber.Length.max',
  92. )
  93. ]
  94. private ?string $phoneNumber = null;
  95. #[ORM\Embedded(class: Address::class)]
  96. #[Assert\Valid()]
  97. #[Serial\Groups(['Sync'])]
  98. private ?AddressInterface $address = null;
  99. #[ORM\OneToOne(mappedBy: 'contact', targetEntity: User::class, fetch: 'LAZY')]
  100. private ?User $user = null;
  101. public function __construct()
  102. {
  103. $this->initContactMethod();
  104. }
  105. public static function getSyncKey(): string
  106. {
  107. return EntityKeys::CONTACT;
  108. }
  109. public function getSyncDisplayLabel(): string
  110. {
  111. return 'Contact ' . $this->__toString();
  112. }
  113. public function getFullName(): string
  114. {
  115. return trim(($this->getFirstName() ?: '') . ' ' . ($this->getLastName() ?: ''));
  116. }
  117. #[Serial\Groups(['Manager'])]
  118. public function getFullNameWithEmail(): string
  119. {
  120. return trim(($this->getFullName() ?: '') . ' (' . $this->getEmail() . ')');
  121. }
  122. public function getUser(): ?User
  123. {
  124. return $this->user;
  125. }
  126. }