src/Entity/Channel/Group.php line 23

Open in your IDE?
  1. <?php
  2. namespace App\Entity\Channel;
  3. use App\Entity\Account\User;
  4. use App\Entity\Sync\SyncableInterface;
  5. use App\Repository\Channel\GroupRepository;
  6. use Doctrine\Common\Collections\ArrayCollection;
  7. use Doctrine\Common\Collections\Collection;
  8. use Doctrine\ORM\Mapping as ORM;
  9. use Drosalys\Bundle\ApiBundle\Serializer\Attributes\IdGroups;
  10. use DrosalysWeb\ObjectExtensions\Timestamp\Model\TimestampInterface;
  11. use DrosalysWeb\ObjectExtensions\Timestamp\Model\TimestampTrait;
  12. use Nellapp\Bundle\SDKBundle\Channel\Entity\Group\GroupInterface;
  13. use Nellapp\Bundle\SDKBundle\Channel\Entity\Group\GroupMethodTrait;
  14. use Nellapp\Bundle\SDKBundle\Channel\Entity\Place\PlaceInterface;
  15. use Nellapp\Bundle\SDKBundle\Sync\EntityKeys;
  16. use Symfony\Bridge\Doctrine\IdGenerator\UuidGenerator;
  17. use Symfony\Component\Serializer\Annotation as Serial;
  18. use Symfony\Component\Validator\Constraints as Assert;
  19. #[ORM\Entity(repositoryClassGroupRepository::class), ORM\Table(name'channel_groups')]
  20. class Group implements SyncableInterfaceGroupInterfaceTimestampInterface
  21. {
  22.     use GroupMethodTrait;
  23.     use TimestampTrait;
  24.     #[ORM\IdORM\GeneratedValue(strategy'CUSTOM'), ORM\CustomIdGenerator(class: UuidGenerator::class), ORM\Column(type'string'length36)]
  25.     #[Serial\Groups(['Manager''Sync'])]
  26.     private ?string $id null;
  27.     #[ORM\Column(type'string'length255)]
  28.     #[Serial\Groups(['Manager''Sync''GroupPostManager'])]
  29.     #[
  30.         Assert\NotBlank(message'channel.group.label.NotBlank'groups: ['Default''flow_sessionCreate_step1']),
  31.         Assert\Length(
  32.             min2,
  33.             max255,
  34.             minMessage'channel.group.label.Length.min',
  35.             maxMessage'channel.group.label.Length.max',
  36.             groups: ['Default''flow_sessionCreate_step1']
  37.         )
  38.     ]
  39.     private ?string $label null;
  40.     #[ORM\ManyToOne(targetEntityPlace::class)]
  41.     #[ORM\JoinColumn(nullabletrueonDelete'SET NULL')]
  42.     #[Assert\NotBlank(groups: ['Default''flow_sessionCreate_step1'])]
  43.     #[IdGroups(groups'Sync')]
  44.     private ?Place $place null;
  45.     #[ORM\ManyToMany(targetEntityUser::class, inversedBy'groups'cascade: ['persist']), ORM\JoinTable(name'channel_group_users')]
  46.     #[IdGroups(['Sync'])]
  47.     private ?Collection $users;
  48.     #[ORM\ManyToOne(targetEntityChannel::class), ORM\JoinColumn(nullablefalseonDelete'CASCADE')]
  49.     #[IdGroups(['Sync'])]
  50.     private ?Channel $channel;
  51.     #[ORM\OneToOne(mappedBy'group'targetEntitySession::class, cascade: ['persist''remove'])]
  52.     private ?Session $session null;
  53.     public static function getSyncKey(): string
  54.     {
  55.         return EntityKeys::CHANNEL_GROUP;
  56.     }
  57.     public function getSyncDisplayLabel(): string
  58.     {
  59.         return (string) $this->getLabel();
  60.     }
  61.     public function __construct()
  62.     {
  63.         $this->users = new ArrayCollection();
  64.     }
  65.     /**
  66.      * @return int[]
  67.      */
  68.     public function getUserIds(): array
  69.     {
  70.         return array_map(function (User $user) {
  71.             return $user->getId();
  72.         }, $this->getUsers()->toArray());
  73.     }
  74.     public function getSession(): ?Session
  75.     {
  76.         return $this->session;
  77.     }
  78.     public function setSession(?Session $session): static
  79.     {
  80.         $this->session $session;
  81.         return $this;
  82.     }
  83.     public function getPlace(): ?Place
  84.     {
  85.         return $this->place;
  86.     }
  87.     public function setPlace(?PlaceInterface $place): static
  88.     {
  89.         $this->place $place;
  90.         return $this;
  91.     }
  92. }