<?php
namespace App\Entity\Chat;
use App\Entity\Account\User;
use App\Enum\ConversationUserRole;
use App\Repository\Chat\ConversationUserRepository;
use Doctrine\ORM\Mapping as ORM;
use Drosalys\Bundle\ApiBundle\Serializer\Attributes\IdGroups;
use Symfony\Component\Serializer\Annotation as Serial;
#[ORM\Entity(repositoryClass: ConversationUserRepository::class)]
#[ORM\Table(name: 'chat_conversation_users')]
#[ORM\HasLifecycleCallbacks]
#[ORM\UniqueConstraint(name: 'single_conversation_user', columns: ['conversation_id', 'user_id'])]
class ConversationUser
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column(type: 'integer')]
#[Serial\Groups(groups: ['Conversation', 'Identifier'])]
private ?int $id = null;
#[ORM\ManyToOne(targetEntity: Message::class)]
#[ORM\JoinColumn(nullable: true, onDelete: 'SET NULL')]
#[Serial\Groups(groups: ['Conversation', 'Message'])]
private ?Message $lastSeenMessage = null;
#[ORM\ManyToOne(targetEntity: Conversation::class, inversedBy: 'conversationUsers')]
#[ORM\JoinColumn(nullable: false, onDelete: 'CASCADE')]
#[IdGroups(groups: ['Conversation'])]
private ?Conversation $conversation = null;
#[ORM\Column(type: 'integer')]
#[Serial\Groups(groups: ['Conversation'])]
private ?int $role = ConversationUserRole::USER;
#[ORM\ManyToOne(targetEntity: User::class, cascade: ['persist'], inversedBy: 'conversationUsers')]
#[ORM\JoinColumn(nullable: false, onDelete: 'CASCADE')]
#[Serial\Groups(groups: ['Conversation'])]
#[IdGroups(groups: ['PostCanal'])]
#[Serial\Context(
context: ['entity_id_groups' => true]
)]
private ?User $user = null;
public function getId(): ?int
{
return $this->id;
}
public function getLastSeenMessage(): ?Message
{
return $this->lastSeenMessage;
}
public function setLastSeenMessage(?Message $lastSeenMessage): self
{
$this->lastSeenMessage = $lastSeenMessage;
return $this;
}
public function getConversation(): ?Conversation
{
return $this->conversation;
}
public function setConversation(?Conversation $conversation): self
{
$this->conversation = $conversation;
return $this;
}
public function getRole(): ?int
{
return $this->role;
}
public function setRole(int $role): self
{
$this->role = $role;
return $this;
}
public function getUser(): ?User
{
return $this->user;
}
public function setUser(?User $user): self
{
$this->user = $user;
return $this;
}
}