ActionEmailService.php 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <?php
  2. namespace App\Services\Notification\ActionEmail;
  3. use App\Mail\RequirementAction;
  4. use App\Mail\TaskAction;
  5. use App\Models\Action;
  6. use App\Models\Enums\ActionObjectType;
  7. use App\Models\Enums\ObjectAction;
  8. use App\Models\Requirement;
  9. use App\Models\Task;
  10. use App\Models\User;
  11. use App\Repositories\ConfigRepository;
  12. use Illuminate\Contracts\Mail\Mailable;
  13. use Illuminate\Support\Facades\Mail;
  14. class ActionEmailService
  15. {
  16. protected ObjectAction $objectAction;
  17. public function __construct(
  18. protected Action $action
  19. )
  20. {
  21. $this->objectAction = ObjectAction::tryFrom($this->action->action);
  22. }
  23. public function send()
  24. {
  25. if (! ConfigRepository::openEmailNotification()) {
  26. return;
  27. }
  28. ConfigRepository::emailDynamicSetting();
  29. $actionObjectType = ActionObjectType::tryFrom($this->action->object_type);
  30. $actionObjectModel = $actionObjectType->modelBuilder()->find($this->action->object_id);
  31. match ($actionObjectType) {
  32. ActionObjectType::REQUIREMENT => $this->requirement($actionObjectModel),
  33. ActionObjectType::TASK => $this->task($actionObjectModel),
  34. };
  35. }
  36. protected function requirement(Requirement $requirement)
  37. {
  38. $this->dispatch($requirement->mailto, new RequirementAction($requirement, $this->objectAction));
  39. }
  40. protected function task(Task $task)
  41. {
  42. $userIds = array_filter([$task->assign, ...$task->mailto]);
  43. $this->dispatch($userIds, new TaskAction($task, $this->objectAction));
  44. }
  45. protected function dispatch(array $userIds, Mailable $mailable)
  46. {
  47. $users = User::query()->whereIn("id", $userIds)->get();
  48. if ($users->isEmpty()) {
  49. return;
  50. }
  51. foreach ($users as $user) {
  52. Mail::to($user)->send($mailable);
  53. }
  54. }
  55. }