Notifier.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Service;
  4. use App\Entity\Access\Access;
  5. use App\Entity\Core\File;
  6. use App\Entity\Core\Notification;
  7. use App\Enum\Core\NotificationTypeEnum;
  8. use DateTime;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. class Notifier
  11. {
  12. public function __construct(
  13. private EntityManagerInterface $em,
  14. private MercureHub $mercureHub
  15. ) {}
  16. /**
  17. * @param Access $access
  18. * @param string $name
  19. * @param string $type
  20. * @param list<string> $message
  21. * @param string|null $link
  22. * @return Notification
  23. */
  24. protected function createNotification(
  25. Access $access,
  26. string $name,
  27. string $type,
  28. array $message,
  29. string $link = null
  30. ): Notification {
  31. $now = new DateTime();
  32. $notification = new Notification();
  33. $notification->setName($name)
  34. ->setRecipientAccess($access)
  35. ->setRecipientOrganization($access->getOrganization())
  36. ->setType($type)
  37. ->setMessage($message)
  38. ->setLink($link)
  39. ->setCreateDate($now)
  40. ->setUpdateDate($now);
  41. return $notification;
  42. }
  43. /**
  44. * @param Access $access
  45. * @param string $name
  46. * @param string $type
  47. * @param array<string> $message
  48. * @param string|null $link
  49. * @return Notification
  50. */
  51. public function notify(
  52. Access $access,
  53. string $name,
  54. string $type,
  55. array $message,
  56. string $link = null
  57. ): Notification
  58. {
  59. $notification = $this->createNotification($access, $name, $type, $message, $link);
  60. $this->em->persist($notification);
  61. $this->em->flush();
  62. $this->mercureHub->publishCreate($access->getId(), $notification);
  63. return $notification;
  64. }
  65. /**
  66. * @param Access $access
  67. * @param File $file
  68. * @return Notification
  69. */
  70. public function notifyExport(
  71. Access $access,
  72. File $file
  73. ): Notification
  74. {
  75. return $this->notify(
  76. $access,
  77. 'export',
  78. NotificationTypeEnum::FILE()->getValue(),
  79. ['fileName' => $file->getName()],
  80. '/api/files/' . $file->getId() . '/download'
  81. );
  82. }
  83. /**
  84. * @param Access $access
  85. * @param array<string> $message
  86. * @return Notification
  87. */
  88. public function notifyMessage(
  89. Access $access,
  90. array $message
  91. ): Notification
  92. {
  93. return $this->notify(
  94. $access,
  95. 'message',
  96. NotificationTypeEnum::MESSAGE()->getValue(),
  97. $message
  98. );
  99. }
  100. /**
  101. * @param Access $access
  102. * @param list<string> $message
  103. * @return Notification
  104. */
  105. public function notifySystem(
  106. Access $access,
  107. array $message
  108. ): Notification
  109. {
  110. return $this->notify(
  111. $access,
  112. 'message',
  113. NotificationTypeEnum::SYSTEM()->getValue(),
  114. $message
  115. );
  116. }
  117. /**
  118. * @param Access $access
  119. * @param string $name
  120. * @param list<string> $message
  121. * @return Notification
  122. */
  123. public function notifyError(
  124. Access $access,
  125. string $name,
  126. array $message
  127. ): Notification
  128. {
  129. return $this->notify(
  130. $access,
  131. $name,
  132. NotificationTypeEnum::ERROR()->getValue(),
  133. $message
  134. );
  135. }
  136. }