<?php
declare(strict_types=1);
namespace App\Entity;
use App\Repository\SsoEmailInstanceMappingRepository;
use DateTimeImmutable;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass=SsoEmailInstanceMappingRepository::class)
* @ORM\Table(
* name="sso_email_instance_mapping",
* uniqueConstraints={
* @ORM\UniqueConstraint(
* name="uniq_sso_email_instance_mapping_normalized_email",
* columns={"normalized_email"}
* )
* },
* indexes={
* @ORM\Index(
* name="idx_sso_email_instance_mapping_instance",
* columns={"instance_id"}
* )
* }
* )
* @ORM\HasLifecycleCallbacks
*/
class SsoEmailInstanceMapping
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private ?int $id = null;
/**
* @ORM\Column(type="string", length=255)
*/
private string $email;
/**
* @ORM\Column(name="normalized_email", type="string", length=255, unique=true)
*/
private string $normalizedEmail;
/**
* @ORM\ManyToOne(targetEntity=Instance::class)
* @ORM\JoinColumn(name="instance_id", nullable=false, onDelete="CASCADE")
*/
private ?Instance $instance = null;
/**
* @ORM\Column(name="source_organization_label", type="string", length=255)
*/
private string $sourceOrganizationLabel;
/**
* @ORM\Column(name="created_at", type="datetime_immutable")
*/
private DateTimeImmutable $createdAt;
/**
* @ORM\Column(name="updated_at", type="datetime_immutable")
*/
private DateTimeImmutable $updatedAt;
public function __construct()
{
$now = new DateTimeImmutable();
$this->createdAt = $now;
$this->updatedAt = $now;
}
public function getId(): ?int
{
return $this->id;
}
public function getEmail(): string
{
return $this->email;
}
public function setEmail(string $email): self
{
$this->email = trim($email);
return $this;
}
public function getNormalizedEmail(): string
{
return $this->normalizedEmail;
}
public function setNormalizedEmail(string $normalizedEmail): self
{
$this->normalizedEmail = trim($normalizedEmail);
return $this;
}
public function getInstance(): ?Instance
{
return $this->instance;
}
public function setInstance(Instance $instance): self
{
$this->instance = $instance;
return $this;
}
public function getSourceOrganizationLabel(): string
{
return $this->sourceOrganizationLabel;
}
public function setSourceOrganizationLabel(string $sourceOrganizationLabel): self
{
$this->sourceOrganizationLabel = self::collapseWhitespace($sourceOrganizationLabel);
return $this;
}
public function getCreatedAt(): DateTimeImmutable
{
return $this->createdAt;
}
public function setCreatedAt(DateTimeImmutable $createdAt): self
{
$this->createdAt = $createdAt;
return $this;
}
public function getUpdatedAt(): DateTimeImmutable
{
return $this->updatedAt;
}
public function setUpdatedAt(DateTimeImmutable $updatedAt): self
{
$this->updatedAt = $updatedAt;
return $this;
}
/**
* @ORM\PrePersist
*/
public function onPrePersist(): void
{
$now = new DateTimeImmutable();
$this->createdAt ??= $now;
$this->updatedAt = $this->updatedAt ?? $this->createdAt;
}
/**
* @ORM\PreUpdate
*/
public function onPreUpdate(): void
{
$this->updatedAt = new DateTimeImmutable();
}
public function touch(): self
{
$this->updatedAt = new DateTimeImmutable();
return $this;
}
private static function collapseWhitespace(string $value): string
{
return trim((string) preg_replace('/\s+/u', ' ', trim($value)));
}
}