Reverb infra + Kanban live refresh
- laravel/reverb instalat + reverb:install (config/reverb.php, channels.php)
- routes/channels.php: tenant.{slug} private channel cu auth check
user.company_id == tenant.id
- App\Events\WorkOrderUpdated implements ShouldBroadcast pe
PrivateChannel('tenant.{slug}'); broadcastAs 'work-order.updated'
- WorkOrder::booted dispatch event la fiecare update (skip if broadcast=log)
- Filament panel BODY_END inject:
- Pusher JS de la CDN (compatibil Reverb)
- Echo client conectat la Reverb (config dinamic din env)
- Subscribe pe tenant private channel; la 'work-order.updated' →
Livewire.all().forEach($refresh)
- Kanban view: wire:poll.5s (live refresh fallback) +
x-on:autocrm:wo-updated.window=$refresh (instant când WS e activ)
Pentru moment BROADCAST_CONNECTION=log în Coolify (Reverb nu e deployat).
Când deployezi Reverb container separat:
Coolify → New App → Same repo → CMD override:
php artisan reverb:start --host=0.0.0.0 --port=8080
→ FQDN: ws.service.mir.md:8080
→ Set BROADCAST_CONNECTION=reverb pe AutoCRM app
→ Real-time instant fără cod nou.
This commit is contained in:
@@ -109,7 +109,7 @@ class WorkOrder extends Model
|
||||
return sprintf('WO-%s-%04d', $year, $count + 1);
|
||||
}
|
||||
|
||||
/** Auto-send 'ready' email when status transitions to 'ready'. */
|
||||
/** Auto-send 'ready' email + broadcast WS event on status change. */
|
||||
protected static function booted(): void
|
||||
{
|
||||
static::updated(function (self $wo) {
|
||||
@@ -120,6 +120,18 @@ class WorkOrder extends Model
|
||||
) {
|
||||
app(\App\Services\NotificationDispatcher::class)->workOrderReady($wo);
|
||||
}
|
||||
|
||||
// Broadcast real-time update on any field change (skip if broadcasting=log).
|
||||
if (config('broadcasting.default') !== 'log') {
|
||||
try {
|
||||
$company = \App\Models\Central\Company::withoutGlobalScopes()->find($wo->company_id);
|
||||
if ($company) {
|
||||
\App\Events\WorkOrderUpdated::dispatch($wo, $company->slug);
|
||||
}
|
||||
} catch (\Throwable $e) {
|
||||
\Illuminate\Support\Facades\Log::debug('WO broadcast skipped: ' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user