DispatchDueEmails.php 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. <?php
  2. namespace App\Console\Commands;
  3. use Illuminate\Console\Command;
  4. use App\Models\EmailMessage;
  5. use App\Jobs\SendEmailMessage;
  6. use DateTimeZone;
  7. use Illuminate\Foundation\Auth\User;
  8. class DispatchDueEmails extends Command
  9. {
  10. protected $signature = 'emails:dispatch-due';
  11. protected $description = 'Invia le email programmate giunte a scadenza';
  12. public function handle()
  13. {
  14. $users = User::whereNotNull('tenant_host')
  15. ->whereNotNull('tenant_database')
  16. ->whereNotNull('tenant_username')
  17. ->whereNotNull('tenant_password')
  18. ->get([
  19. 'id',
  20. 'tenant_host',
  21. 'tenant_database',
  22. 'tenant_username',
  23. 'tenant_password',
  24. ]);
  25. if ($users->isEmpty()) {
  26. $this->warn('Nessun utente con info di database trovata.');
  27. return Command::SUCCESS;
  28. }
  29. $tenants = $users->unique(function ($u) {
  30. return $u->tenant_host . '|' . $u->tenant_database . '|' . $u->tenant_username;
  31. });
  32. foreach ($tenants as $userTenant) {
  33. $this->info("Processo tenant db={$userTenant->tenant_database} (user id={$userTenant->id})");
  34. app(\App\Http\Middleware\TenantMiddleware::class)->setupTenantConnection($userTenant);
  35. EmailMessage::where('status', 'scheduled')
  36. ->where('schedule_at', '<=', now())
  37. ->chunkById(100, function ($chunk) {
  38. foreach ($chunk as $msg) {
  39. dispatch(new SendEmailMessage($msg->id));
  40. }
  41. });
  42. }
  43. return Command::SUCCESS;
  44. }
  45. }