src/Entity/Channel/Room.php line 23

Open in your IDE?
  1. <?php
  2. namespace App\Entity\Channel;
  3. use App\Entity\Sync\SyncableInterface;
  4. use App\Repository\Channel\RoomRepository;
  5. use Doctrine\Common\Collections\ArrayCollection;
  6. use Doctrine\Common\Collections\Collection;
  7. use Doctrine\ORM\Mapping as ORM;
  8. use Drosalys\Bundle\ApiBundle\Serializer\Attributes\IdGroups;
  9. use Nellapp\Bundle\SDKBundle\Channel\Entity\Room\RoomInterface;
  10. use Nellapp\Bundle\SDKBundle\Channel\Entity\Room\RoomMethodTrait;
  11. use Nellapp\Bundle\SDKBundle\Sync\EntityKeys;
  12. use Symfony\Bridge\Doctrine\IdGenerator\UuidGenerator;
  13. use Symfony\Component\Serializer\Annotation as Serial;
  14. use Symfony\Component\Validator\Constraints as Assert;
  15. #[
  16.     ORM\Entity(repositoryClass: RoomRepository::class),
  17.     ORM\Index(columns: ['name'], flags: ['fulltext']),
  18.     ORM\Table(name: 'channel_rooms')
  19. ]
  20. class Room implements RoomInterface, SyncableInterface
  21. {
  22.     use RoomMethodTrait;
  23.     #[ORM\Id, ORM\GeneratedValue(strategy: 'CUSTOM'), ORM\CustomIdGenerator(class: UuidGenerator::class), ORM\Column(type: 'string', length: 36)]
  24.     #[Serial\Groups(['Manager', 'Sync'])]
  25.     private ?string $id = null;
  26.     #[ORM\Column(type: 'string', length: 255, nullable: false)]
  27.     #[
  28.         Assert\NotBlank(message: 'room.name.NotBlank'),
  29.         Assert\Length(
  30.             min: 2,
  31.             max: 255,
  32.             minMessage: 'base.length.min',
  33.             maxMessage: 'base.length.max'
  34.         )
  35.     ]
  36.     #[Serial\Groups(['Manager', 'Sync'])]
  37.     private ?string $name = null;
  38.     #[ORM\Column(type: 'integer', nullable: false)]
  39.     #[Assert\NotBlank(message: 'room.capacity.NotBlank')]
  40.     #[Serial\Groups(['Manager', 'Sync'])]
  41.     private ?int $capacity = null;
  42.     #[ORM\ManyToMany(targetEntity: Material::class, mappedBy: 'rooms')]
  43.     #[Serial\Groups(['Manager'])]
  44.     private ?Collection $materials;
  45.     #[ORM\ManyToOne(targetEntity: Place::class, inversedBy: 'rooms')]
  46.     #[ORM\JoinColumn(nullable: false)]
  47.     #[IdGroups(groups: ['Sync'])]
  48.     private ?Place $place = null;
  49.     public function __construct()
  50.     {
  51.         $this->materials = new ArrayCollection();
  52.     }
  53.     public static function getSyncKey(): string
  54.     {
  55.         return EntityKeys::CHANNEL_ROOM;
  56.     }
  57.     public function getSyncDisplayLabel(): string
  58.     {
  59.         return (string) $this->getName();
  60.     }
  61.     public function getMaterials(): Collection
  62.     {
  63.         return $this->materials;
  64.     }
  65.     public function addMaterial(Material $material): self
  66.     {
  67.         if (!$this->materials->contains($material)) {
  68.             $this->materials[] = $material;
  69.             $material->addRoom($this);
  70.         }
  71.         return $this;
  72.     }
  73.     public function removeMaterial(Material $material): self
  74.     {
  75.         if ($this->materials->contains($material)) {
  76.             $this->materials->removeElement($material);
  77.             $material->removeRoom($this);
  78.         }
  79.         return $this;
  80.     }
  81. }