diff --git a/src/Bundle/ChillMainBundle/Entity/Notification.php b/src/Bundle/ChillMainBundle/Entity/Notification.php index 40fa17a91..4e6953239 100644 --- a/src/Bundle/ChillMainBundle/Entity/Notification.php +++ b/src/Bundle/ChillMainBundle/Entity/Notification.php @@ -11,7 +11,10 @@ declare(strict_types=1); namespace Chill\MainBundle\Entity; +use Chill\MainBundle\Doctrine\Model\TrackUpdateInterface; +use Chill\MainBundle\Entity\Embeddable\CommentEmbeddable; use DateTimeImmutable; +use DateTimeInterface; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; @@ -23,7 +26,7 @@ use Doctrine\ORM\Mapping as ORM; * ) * @ORM\HasLifecycleCallbacks */ -class Notification +class Notification implements TrackUpdateInterface { private array $addedAddresses = []; @@ -82,6 +85,16 @@ class Notification */ private Collection $unreadBy; + /** + * @ORM\Column(type="datetime_immutable") + */ + private ?DateTimeImmutable $updatedAt; + + /** + * @ORM\ManyToOne(targetEntity=User::class) + */ + private ?User $updatedBy; + public function __construct() { $this->addressees = new ArrayCollection(); @@ -172,6 +185,16 @@ class Notification return $this->unreadBy; } + public function getUpdatedAt(): ?DateTimeImmutable + { + return $this->updatedAt; + } + + public function getUpdatedBy(): ?User + { + return $this->updatedBy; + } + public function isReadBy(User $user): bool { return !$this->unreadBy->contains($user); @@ -276,4 +299,18 @@ class Notification return $this; } + + public function setUpdatedAt(DateTimeInterface $datetime): self + { + $this->updatedAt = $datetime; + + return $this; + } + + public function setUpdatedBy(User $user): self + { + $this->updatedBy = $user; + + return $this; + } } diff --git a/src/Bundle/ChillMainBundle/migrations/Version20211229140308.php b/src/Bundle/ChillMainBundle/migrations/Version20211229140308.php new file mode 100644 index 000000000..cfa0b4b5a --- /dev/null +++ b/src/Bundle/ChillMainBundle/migrations/Version20211229140308.php @@ -0,0 +1,41 @@ +addSql('ALTER TABLE chill_main_notification DROP CONSTRAINT FK_5BDC806765FF1AEC'); + $this->addSql('DROP INDEX IDX_5BDC806765FF1AEC'); + $this->addSql('ALTER TABLE chill_main_notification DROP updatedAt'); + $this->addSql('ALTER TABLE chill_main_notification DROP updatedBy_id'); + } + + public function getDescription(): string + { + return 'Notification: add updated tracking information'; + } + + public function up(Schema $schema): void + { + $this->addSql('ALTER TABLE chill_main_notification ADD updatedAt TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL'); + $this->addSql('UPDATE chill_main_notification SET updatedAt="date"'); + $this->addSql('ALTER TABLE chill_main_notification ADD updatedBy_id INT DEFAULT NULL'); + $this->addSql('COMMENT ON COLUMN chill_main_notification.updatedAt IS \'(DC2Type:datetime_immutable)\''); + $this->addSql('ALTER TABLE chill_main_notification ADD CONSTRAINT FK_5BDC806765FF1AEC FOREIGN KEY (updatedBy_id) REFERENCES users (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); + $this->addSql('CREATE INDEX IDX_5BDC806765FF1AEC ON chill_main_notification (updatedBy_id)'); + } +}