recordEvent(new SuperAdminCree( superAdminId: $superAdmin->id, email: $superAdmin->email, occurredOn: $createdAt, )); return $superAdmin; } public function enregistrerConnexion(DateTimeImmutable $at): void { if ($this->status !== SuperAdminStatus::ACTIF) { throw SuperAdminNonActifException::pourConnexion($this->id); } $this->lastLoginAt = $at; } public function desactiver(DateTimeImmutable $at): void { if ($this->status !== SuperAdminStatus::ACTIF) { throw SuperAdminNonActifException::pourDesactivation($this->id); } $this->status = SuperAdminStatus::INACTIF; $this->recordEvent(new SuperAdminDesactive( superAdminId: $this->id, occurredOn: $at, )); } public function reactiver(DateTimeImmutable $at): void { if ($this->status === SuperAdminStatus::ACTIF) { throw SuperAdminDejaActifException::pourReactivation($this->id); } $this->status = SuperAdminStatus::ACTIF; } public function peutSeConnecter(): bool { return $this->status === SuperAdminStatus::ACTIF; } /** * @internal For Infrastructure use only */ public static function reconstitute( SuperAdminId $id, string $email, string $hashedPassword, string $firstName, string $lastName, SuperAdminStatus $status, DateTimeImmutable $createdAt, ?DateTimeImmutable $lastLoginAt = null, ): self { $superAdmin = new self( id: $id, email: $email, hashedPassword: $hashedPassword, firstName: $firstName, lastName: $lastName, status: $status, createdAt: $createdAt, ); $superAdmin->lastLoginAt = $lastLoginAt; return $superAdmin; } }