Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

142 lines
4.5KB

  1. <?php
  2. namespace App\Http\Controllers\Web\Email;
  3. use App\Codes\Email;
  4. use App\Email\BaseEmailer;
  5. use App\Email\Members\EntryApprove;
  6. use App\Email\Members\EntryPaymentComplete;
  7. use App\Email\Members\TerminateOrderApprove;
  8. use App\Email\Members\UserInfoUpdateOrderApprove;
  9. use App\Email\Members\VehicleInfoUpdateOrderApprove;
  10. use App\Http\Controllers\Web\WebController;
  11. use App\Kintone\Models\SeasonTicketContract;
  12. use App\Kintone\Models\SeasonTicketContractEntry;
  13. use App\Kintone\Models\TerminateApplication;
  14. use App\Kintone\Models\UserInfoUpdateApplication;
  15. use App\Kintone\Models\VehicleInfoUpdateApplication;
  16. use App\Logic\EmailManager;
  17. use Exception;
  18. use Illuminate\Http\JsonResponse;
  19. use Illuminate\Http\Request;
  20. use LogicException;
  21. class EmailSendController extends WebController
  22. {
  23. private BaseEmailer|null $email = null;
  24. private EmailManager|null $emailManager = null;
  25. public function name(): string
  26. {
  27. return "メール送信依頼";
  28. }
  29. public function description(): string
  30. {
  31. return "メール送信依頼を登録する";
  32. }
  33. public function __construct(protected EmailSendParam $param)
  34. {
  35. parent::__construct();
  36. }
  37. protected function run(Request $request): JsonResponse
  38. {
  39. try {
  40. // トークンチェック
  41. $this->checkToken();
  42. // メール作成
  43. $this->getEmail();
  44. // 送信
  45. if ($this->emailManager === null) {
  46. throw new LogicException("EmailManager不正");
  47. }
  48. $this->emailManager->confirm();
  49. } catch (Exception $e) {
  50. logger($e->getMessage());
  51. logger($e->getFile());
  52. logger($e->getLine());
  53. return $this->failed();
  54. }
  55. return $this->success();
  56. }
  57. private function success()
  58. {
  59. return response()->json([
  60. 'result' => 'SUCCESS'
  61. ]);
  62. }
  63. private function failed()
  64. {
  65. return response()->json([
  66. 'result' => 'FAILED'
  67. ]);
  68. }
  69. private function checkToken()
  70. {
  71. $currectToken = config('mail.emailSendOrderToken');
  72. if ($this->param->token !== $currectToken) {
  73. logs()->warning("Email送信依頼トークン不正");
  74. throw new Exception("Email送信依頼トークン不正");
  75. }
  76. }
  77. private function getEmail()
  78. {
  79. $emailId = $this->param->emailId;
  80. if ($emailId === Email::TERMINATE_ORDER_APPROVE) {
  81. $application = TerminateApplication::findByApplicationNo($this->param->applicationNo);
  82. $seasonTicketContract = SeasonTicketContract::find($application->seasonTicketContractRecordNo);
  83. $this->setEmail(new TerminateOrderApprove($seasonTicketContract, $application));
  84. return;
  85. }
  86. if ($emailId === Email::VEHICLE_INFO_UPDATE_ORDER_APPROVE) {
  87. $application = VehicleInfoUpdateApplication::findByApplicationNo($this->param->applicationNo);
  88. $seasonTicketContract = SeasonTicketContract::find($application->seasonTicketContractRecordNo);
  89. $this->setEmail(new VehicleInfoUpdateOrderApprove($seasonTicketContract, $application));
  90. return;
  91. }
  92. if ($emailId === Email::USER_INFO_UPDATE_ORDER_APPROVE) {
  93. $application = UserInfoUpdateApplication::findByApplicationNo($this->param->applicationNo);
  94. $seasonTicketContract = SeasonTicketContract::find($application->seasonTicketContractRecordNo);
  95. $this->setEmail(new UserInfoUpdateOrderApprove($seasonTicketContract, $application));
  96. return;
  97. }
  98. if ($emailId === Email::ENTRY_APPROVE) {
  99. $entry = SeasonTicketContractEntry::find($this->param->seasonTicketContractEntryRecordNo);
  100. $parking = $entry->getParking();
  101. $this->setEmail(new EntryApprove($parking, $entry));
  102. return;
  103. }
  104. if ($emailId === Email::ENTRY_PAYMENT_COMPLETE) {
  105. $entry = SeasonTicketContractEntry::find($this->param->seasonTicketContractEntryRecordNo);
  106. $parking = $entry->getParking();
  107. $this->setEmail(new EntryPaymentComplete($parking, $entry));
  108. return;
  109. }
  110. if ($this->email === null || $this->emailManager === null) {
  111. throw new LogicException("setEmail不正");
  112. }
  113. }
  114. private function setEmail(BaseEmailer $email)
  115. {
  116. $this->email = $email;
  117. $this->emailManager = new EmailManager($email);
  118. }
  119. }