# Troubleshooting Broadcasting (События не доходят)

## Проблема: События не доходят до фронтенда

### 1. Проверьте настройки в `.env`

Убедитесь, что установлены следующие переменные:

```env
BROADCAST_DRIVER=redis
REDIS_CLIENT=predis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
```

**Важно:** Если `BROADCAST_DRIVER=null`, события не будут отправляться!

### 2. Проверьте логи Laravel

После создания заказа проверьте логи:

```bash
tail -f storage/logs/laravel.log
```

Вы должны увидеть:
- `NewOrderCreated event constructed` - событие создано
- `NewOrderCreated broadcasting data` - данные подготовлены для отправки
- `NewOrderCreated event dispatched successfully` - событие отправлено

Если видите ошибки, проверьте их содержимое.

### 3. Проверьте, что Redis запущен

```bash
redis-cli ping
# Должен вернуть: PONG
```

Если Redis не запущен:
```bash
# Ubuntu/Debian
sudo systemctl start redis
sudo systemctl enable redis

# Проверка статуса
sudo systemctl status redis
```

### 4. Проверьте, что Laravel Echo Server запущен

```bash
# Проверка процесса
ps aux | grep laravel-echo-server

# Или проверьте порт
netstat -tulpn | grep 6001
```

Если не запущен:
```bash
laravel-echo-server start
```

Или с PM2:
```bash
pm2 start laravel-echo-server --name "laravel-echo"
pm2 status
```

### 5. Проверьте конфигурацию Laravel Echo Server

Убедитесь, что в `laravel-echo-server.json`:
- `subscribers.redis: true` - включена подписка на Redis
- `subscribers.http: true` - включена HTTP подписка
- `database: "redis"` - используется Redis

### 6. Очистите кэш конфигурации

```bash
php artisan config:clear
php artisan cache:clear
php artisan route:clear
```

### 7. Проверьте права доступа к каналу

Убедитесь, что пользователь имеет роль `admin` или `manager`:

```php
// В routes/channels.php
Broadcast::channel('admin-orders', function ($user) {
    return $user->hasAnyRole(['admin', 'manager']);
});
```

### 8. Проверьте подключение к WebSocket на фронтенде

Откройте консоль браузера и проверьте:
- `Connected to admin-orders channel` - подключение к каналу
- `✅ Subscribed to event: .order.created` - подписка на событие
- `📨 Event received: .order.created` - получение события

### 9. Тестовая команда для проверки broadcasting

Создайте тестовый маршрут:

```php
// routes/api.php (временно для теста)
Route::get('/test-broadcast', function () {
    $order = \App\Models\Order::latest()->first();
    if ($order) {
        event(new \App\Events\NewOrderCreated($order));
        return response()->json(['success' => true, 'message' => 'Event dispatched']);
    }
    return response()->json(['success' => false, 'message' => 'No orders found']);
})->middleware('auth:sanctum');
```

Затем вызовите:
```bash
curl -H "Authorization: Bearer YOUR_TOKEN" https://kartulirest.de/api/test-broadcast
```

### 10. Проверьте очередь (если используется)

Если `QUEUE_CONNECTION=database` или `redis`, убедитесь, что воркер очереди запущен:

```bash
php artisan queue:work
```

Или с supervisor:
```bash
sudo supervisorctl status
```

### 11. Проверьте сетевые настройки

Убедитесь, что:
- Порт 6001 открыт в firewall
- Apache/Nginx правильно проксирует WebSocket соединения
- SSL сертификат валиден (для HTTPS)

### 12. Отладка через Redis CLI

Подключитесь к Redis и проверьте каналы:

```bash
redis-cli
> PSUBSCRIBE *
```

Затем создайте заказ - вы должны увидеть сообщения в Redis.

## Частые ошибки

### Ошибка: "Broadcasting driver [null] is not supported"

**Решение:** Установите `BROADCAST_DRIVER=redis` в `.env`

### Ошибка: "Class 'Redis' not found"

**Решение:** Установите `REDIS_CLIENT=predis` в `.env` или установите PHP расширение Redis

### Ошибка: "Connection refused" при подключении к Redis

**Решение:** Убедитесь, что Redis запущен и доступен на указанном хосте/порту

### События создаются, но не доходят до фронтенда

**Возможные причины:**
1. Laravel Echo Server не запущен
2. Неправильная конфигурация WebSocket прокси
3. Проблемы с авторизацией канала
4. События отправляются в очередь, но воркер не запущен

## Логирование для отладки

В коде добавлено логирование:
- `NewOrderCreated event constructed` - событие создано
- `NewOrderCreated broadcasting data` - данные подготовлены
- `Attempting to broadcast NewOrderCreated event` - попытка отправки
- `NewOrderCreated event dispatched successfully` - успешная отправка

Проверьте эти логи в `storage/logs/laravel.log` для диагностики проблемы.
