src/Containers/CrmSection/ClientContainer/Entities/ClientMessagesEntity.php line 86

Open in your IDE?
  1. <?php
  2. namespace App\Containers\CrmSection\ClientContainer\Entities;
  3. use ApiPlatform\Metadata\ApiResource;
  4. use ApiPlatform\Metadata\Delete;
  5. use ApiPlatform\Metadata\Get;
  6. use ApiPlatform\Metadata\GetCollection;
  7. use ApiPlatform\Metadata\Patch;
  8. use ApiPlatform\Metadata\Put;
  9. use ApiPlatform\Metadata\Post;
  10. use ApiPlatform\Metadata\ApiFilter;
  11. use ApiPlatform\Doctrine\Orm\Filter\SearchFilter;
  12. use ApiPlatform\Doctrine\Orm\Filter\NumericFilter;
  13. use ApiPlatform\Doctrine\Orm\Filter\RangeFilter;
  14. use ApiPlatform\Doctrine\Orm\Filter\DateFilter;
  15. use ApiPlatform\Doctrine\Orm\Filter\BooleanFilter;
  16. use ApiPlatform\Doctrine\Orm\Filter\OrderFilter;
  17. use Doctrine\ORM\Mapping as ORM;
  18. use Doctrine\DBAL\Types\Types;
  19. use Symfony\Component\Serializer\Annotation\Groups;
  20. use Symfony\Component\Serializer\Annotation\MaxDepth;
  21. use Symfony\Component\Serializer\Annotation\Context;
  22. use Symfony\Component\Serializer\Normalizer\DateTimeNormalizer;
  23. use Gedmo\Mapping\Annotation as Gedmo;
  24. use App\Containers\CrmSection\ClientContainer\Entities\ClientEntity;
  25. use App\Containers\CrmSection\ClientContainer\Data\Repositories\ClientMessagesRepository;
  26. use App\Containers\CrmSection\ContractContainer\Entities\ContractEntity;
  27. use App\Containers\SettingSection\ListContainer\Entities\MessageTypeEntity;
  28. use App\Containers\SettingSection\ListContainer\Entities\MessageEventEntity;
  29. /** 
  30.  * Сообщения
  31. */
  32. #[ApiResource(
  33.     routePrefix'/crm',
  34.     normalizationContext: ['groups' => 'read''enable_max_depth' => true],
  35.     operations: [
  36.         new Get(
  37.             uriTemplate'/client/messages/{id}'requirements: ['id' => '\d+'],
  38.             security"is_granted('ROLE_ADMIN') or is_granted('ROLE_USER_CLIENT') or is_granted('ROLE_READONLY')"
  39.         ),
  40.         // new Patch(
  41.         //     uriTemplate: '/client/messages/{id}', requirements: ['id' => '\d+'],
  42.         //     security: "is_granted('ROLE_ADMIN')"
  43.         // ),
  44.         // new Put(
  45.         //     uriTemplate: '/client/messages/{id}', requirements: ['id' => '\d+'],
  46.         //     security: "is_granted('ROLE_ADMIN') or is_granted('ROLE_USER_CLIENT')"
  47.         // ),
  48.         new Delete(
  49.             uriTemplate'/client/messages/{id}'requirements: ['id' => '\d+'],
  50.             security"is_granted('ROLE_ADMIN')"
  51.         ),
  52.         // new Post(
  53.         //     uriTemplate: '/client/messages',
  54.         //     security: "is_granted('ROLE_ADMIN') or is_granted('ROLE_USER_CLIENT')"
  55.         // ),
  56.         new GetCollection(
  57.             uriTemplate'/client/messages',
  58.             security"is_granted('ROLE_ADMIN') or is_granted('ROLE_USER_CLIENT') or is_granted('ROLE_READONLY')"
  59.         ),
  60.     ],
  61.     shortName'CRM_Clients'
  62. )]
  63. #[ApiFilter(SearchFilter::class, properties: [
  64.     'id' => 'exact'
  65.     'contract' => 'exact',
  66.     'client' => 'exact',
  67.     'client.id' => 'exact'
  68.     'client.name' => 'partial'
  69.     'messageType' => 'exact',
  70.     'messageType.id' => 'exact'
  71.     'messageType.name' => 'partial'
  72.     'messageEvent' => 'exact',
  73.     'messageEvent.id' => 'exact'
  74.     'messageEvent.name' => 'partial'
  75. ])]
  76. #[ApiFilter(NumericFilter::class, properties: ['id'])]
  77. #[ApiFilter(RangeFilter::class, properties: ['id'])]
  78. #[ApiFilter(BooleanFilter::class, properties: ['isRead'])]
  79. #[ApiFilter(DateFilter::class, properties: ['dateCreate''dateRead''createdAt''updatedAt'])]
  80. #[ApiFilter(OrderFilter::class)]
  81. #[ORM\Entity(repositoryClassClientMessagesRepository::class)]
  82. #[ORM\Table(name'`crm_clients_messages`')]
  83. class ClientMessagesEntity
  84. {
  85.     #[ORM\Id]
  86.     #[ORM\GeneratedValue]
  87.     #[ORM\Column(typeTypes::INTEGER)]
  88.     #[Groups(['read'])]
  89.     private ?int $id null;
  90.     // Клиент
  91.     #[ORM\ManyToOne(targetEntityClientEntity::class)]
  92.     #[ORM\JoinColumn(name'client_id'referencedColumnName'id'nullablefalse)]
  93.     #[Groups(['read'])]
  94.     #[MaxDepth(2)]
  95.     private ClientEntity $client;
  96.     // Тип сообщения
  97.     #[ORM\ManyToOne(targetEntityMessageTypeEntity::class)]
  98.     #[ORM\JoinColumn(name'message_type_id'referencedColumnName'id'nullablefalse)]
  99.     #[Groups(['read'])]
  100.     #[MaxDepth(1)]
  101.     private MessageTypeEntity $messageType;
  102.     // Событие сообщения
  103.     #[ORM\ManyToOne(targetEntityMessageEventEntity::class)]
  104.     #[ORM\JoinColumn(name'message_event_id'referencedColumnName'id'nullabletrue)]
  105.     #[Groups(['read'])]
  106.     #[MaxDepth(1)]
  107.     private ?MessageEventEntity $messageEvent null;
  108.     // Договор
  109.     #[ORM\ManyToOne(targetEntityContractEntity::class)]
  110.     #[ORM\JoinColumn(name'contract_id'referencedColumnName'id'nullabletrue)]
  111.     #[Groups(['read'])]
  112.     #[MaxDepth(2)]
  113.     private ?ContractEntity $contract null;
  114.     // Заголовок сообщения
  115.     #[ORM\Column(typeTypes::STRINGlength255nullablefalse)]
  116.     #[Groups(['read'])]
  117.     private string $title;
  118.     // Текст сообщения
  119.     #[ORM\Column(typeTypes::TEXTnullablefalse)]
  120.     #[Groups(['read'])]
  121.     private string $text;
  122.     // Дата создания
  123.     #[Gedmo\Timestampable(on'create')]
  124.     #[ORM\Column(typeTypes::DATETIME_IMMUTABLE)]
  125.     #[Context(
  126.         normalizationContext: [DateTimeNormalizer::FORMAT_KEY => 'Y-m-d H:i:s'],
  127.         denormalizationContext: [DateTimeNormalizer::FORMAT_KEY => 'Y-m-d H:i:s']
  128.     )]
  129.     #[Groups(['read'])]
  130.     private \DateTimeInterface $dateCreate;
  131.     // Прочитано
  132.     #[ORM\Column(typeTypes::BOOLEANoptions: ['default' => false])]
  133.     #[Groups(['read'])]
  134.     private bool $isRead false;
  135.     // Дата чтения
  136.     #[ORM\Column(typeTypes::DATETIME_IMMUTABLEnullabletrue)]
  137.     #[Context(
  138.         normalizationContext: [DateTimeNormalizer::FORMAT_KEY => 'Y-m-d H:i:s'],
  139.         denormalizationContext: [DateTimeNormalizer::FORMAT_KEY => 'Y-m-d H:i:s']
  140.     )]
  141.     #[Groups(['read'])]
  142.     private ?\DateTimeInterface $dateRead null;
  143.     #[Gedmo\Timestampable(on'create')]
  144.     #[ORM\Column(typeTypes::DATETIME_IMMUTABLE)]
  145.     protected $createdAt;
  146.     #[Gedmo\Timestampable(on'update')]
  147.     #[ORM\Column(typeTypes::DATETIME_IMMUTABLE)]
  148.     protected $updatedAt;
  149.     public function getId()
  150.     {
  151.         return $this->id;
  152.     }
  153.     public function getClient()
  154.     {
  155.         return $this->client;
  156.     }
  157.     public function setClient($client)
  158.     {
  159.         $this->client $client;
  160.         return $this;
  161.     }
  162.     public function getMessageType()
  163.     {
  164.         return $this->messageType;
  165.     }
  166.     public function setMessageType($type)
  167.     {
  168.         $this->messageType $type;
  169.         return $this;
  170.     }
  171.     public function getMessageEvent()
  172.     {
  173.         return $this->messageEvent;
  174.     }
  175.     public function setMessageEvent($type)
  176.     {
  177.         $this->messageEvent $type;
  178.         return $this;
  179.     }
  180.     public function getContract()
  181.     {
  182.         return $this->contract;
  183.     }
  184.     public function setContract($contract)
  185.     {
  186.         $this->contract $contract;
  187.         return $this;
  188.     }
  189.     public function getTitle()
  190.     {
  191.         return $this->title;
  192.     }
  193.     public function setTitle($title)
  194.     {
  195.         $this->title $title;
  196.         return $this;
  197.     }
  198.     public function getText()
  199.     {
  200.         return $this->text;
  201.     }
  202.     public function setText($text)
  203.     {
  204.         $this->text $text;
  205.         return $this;
  206.     }
  207.     public function setDateCreate(\DateTimeImmutable|null $date)
  208.     {
  209.         $this->dateCreate $date;
  210.         return $this;
  211.     }
  212.     public function getDateCreate()
  213.     {
  214.         return $this->dateCreate;
  215.     }
  216.     public function getIsRead()
  217.     {
  218.         return $this->isRead;
  219.     }
  220.     public function setIsRead($value)
  221.     {
  222.         $this->isRead $value;
  223.         return $this;
  224.     }
  225.     public function setDateRead(\DateTimeImmutable|null $date)
  226.     {
  227.         $this->dateRead $date;
  228.         return $this;
  229.     }
  230.     public function getDateRead()
  231.     {
  232.         return $this->dateRead;
  233.     }
  234. }