DispatchDueSms.php 1.6 KB

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