<?phpnamespace App\Entity\Messenger;use App\Entity\Core\Users;use Doctrine\DBAL\Types\Types;use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;use Symfony\Component\Validator\Constraints as Assert;use Doctrine\ORM\Mapping as ORM;/** * Groups * * @ORM\Table("messenger_groups") * @ORM\Entity(repositoryClass="App\Repository\Messenger\GroupsRepository") * @ORM\HasLifecycleCallbacks() */class Groups{ /** * @var integer * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ protected $id; /** * @var string * * @ORM\Column(name="created_at", type="datetime", nullable=true) */ private $createdAt; /** * @var string * * @ORM\Column(name="updated_at", type="datetime", nullable=true) */ private $updatedAt; /** * @var string * * @ORM\Column(name="title", type="text", nullable=true) */ private $title; /** * Premier utilisateur de la conversation * * @ORM\ManyToOne(targetEntity="App\Entity\Core\Users") * @ORM\JoinColumns({ * @ORM\JoinColumn(name="user_one_id", referencedColumnName="id", nullable=false) * }) */ protected $userOne; /** * Deuxième utilisateur de la conversation * * @ORM\ManyToOne(targetEntity="App\Entity\Core\Users") * @ORM\JoinColumns({ * @ORM\JoinColumn(name="user_two_id", referencedColumnName="id", nullable=false) * }) */ protected $userTwo; /** * Hash unique pour identifier la conversation entre 2 utilisateurs * Format: min(userId1,userId2)_max(userId1,userId2) * * @var string * * @ORM\Column(name="conversation_hash", type="string", length=100, unique=true, nullable=false) */ private $conversationHash; /** * ID du dernier message pour optimisation * * @var integer * * @ORM\Column(name="last_message_id", type="integer", nullable=true) */ private $lastMessageId; /** * Contenu du dernier message (pour affichage rapide) * * @var string * * @ORM\Column(name="last_message_content", type="text", nullable=true) */ private $lastMessageContent; /** * Date du dernier message (pour tri) * * @var string * * @ORM\Column(name="last_message_at", type="datetime", nullable=true) */ private $lastMessageAt; /** * ID de l'expéditeur du dernier message * Permet de savoir côté frontend si le dernier message vient de moi ou de l'autre * * @var integer|null * * @ORM\Column(name="last_message_sender_id", type="integer", nullable=true) */ private $lastMessageSenderId; /** * @ORM\PrePersist */ public function setCreatedAtValue(): void { $this->setCreatedAt(new \DateTime("now")); $this->setUpdatedAt(new \DateTime("now")); $this->setLastMessageAt(new \DateTime("now")); } /** * @ORM\PreUpdate */ public function setUpdatedAtValue(): void { $this->setUpdatedAt(new \DateTime("now")); } public function __toString() { return $this->title ?? 'Conversation #' . $this->id; } /** * Génère le hash de conversation entre 2 utilisateurs */ public static function generateConversationHash(Users $user1, Users $user2): string { $id1 = $user1->getId(); $id2 = $user2->getId(); // Toujours mettre le plus petit ID en premier pour garantir l'unicité $minId = min($id1, $id2); $maxId = max($id1, $id2); return $minId . '_' . $maxId; } /** * Retourne l'autre utilisateur de la conversation */ public function getOtherUser(Users $currentUser): ?Users { if ($this->userOne && $this->userOne->getId() === $currentUser->getId()) { return $this->userTwo; } return $this->userOne; } /** * Vérifie si un utilisateur fait partie de cette conversation */ public function hasUser(Users $user): bool { return ($this->userOne && $this->userOne->getId() === $user->getId()) || ($this->userTwo && $this->userTwo->getId() === $user->getId()); } public function getId(): ?int { return $this->id; } public function getCreatedAt(): ?\DateTimeInterface { return $this->createdAt; } public function setCreatedAt(?\DateTimeInterface $createdAt): static { $this->createdAt = $createdAt; return $this; } public function getUpdatedAt(): ?\DateTimeInterface { return $this->updatedAt; } public function setUpdatedAt(?\DateTimeInterface $updatedAt): static { $this->updatedAt = $updatedAt; return $this; } public function getTitle(): ?string { return $this->title; } public function setTitle(?string $title): static { $this->title = $title; return $this; } public function getConversationHash(): ?string { return $this->conversationHash; } public function setConversationHash(string $conversationHash): static { $this->conversationHash = $conversationHash; return $this; } public function getLastMessageId(): ?int { return $this->lastMessageId; } public function setLastMessageId(?int $lastMessageId): static { $this->lastMessageId = $lastMessageId; return $this; } public function getLastMessageContent(): ?string { return $this->lastMessageContent; } public function setLastMessageContent(?string $lastMessageContent): static { $this->lastMessageContent = $lastMessageContent; return $this; } public function getLastMessageAt(): ?\DateTimeInterface { return $this->lastMessageAt; } public function setLastMessageAt(?\DateTimeInterface $lastMessageAt): static { $this->lastMessageAt = $lastMessageAt; return $this; } public function getUserOne(): ?Users { return $this->userOne; } public function setUserOne(?Users $userOne): static { $this->userOne = $userOne; return $this; } public function getUserTwo(): ?Users { return $this->userTwo; } public function setUserTwo(?Users $userTwo): static { $this->userTwo = $userTwo; return $this; } // ======================================== // NOUVEAU — lastMessageSenderId // ======================================== public function getLastMessageSenderId(): ?int { return $this->lastMessageSenderId; } public function setLastMessageSenderId(?int $lastMessageSenderId): static { $this->lastMessageSenderId = $lastMessageSenderId; return $this; }}