# Настройка Laravel Echo + Socket.io для онлайн уведомлений

## Требования

1. **Redis** - должен быть установлен и запущен
2. **Laravel Echo Server** - должен быть установлен глобально или локально
3. **Node.js зависимости** - установлены через npm

## Установка зависимостей

### Backend (Laravel)

1. Установите `predis` (PHP клиент для Redis, не требует расширения PHP):
```bash
composer require predis/predis
```

2. Убедитесь, что в `.env` файле установлено:
```env
BROADCAST_DRIVER=redis
REDIS_CLIENT=predis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
```

**Примечание:** По умолчанию используется `predis` (чистый PHP клиент), который не требует установки PHP расширения Redis. Если у вас установлено расширение `phpredis`, вы можете использовать его, установив `REDIS_CLIENT=phpredis` в `.env`.

### Frontend (Node.js)

Установите зависимости:
```bash
npm install laravel-echo socket.io-client
```

## Настройка Laravel Echo Server

1. Установите Laravel Echo Server глобально:
```bash
npm install -g laravel-echo-server
```

2. Конфигурационный файл `laravel-echo-server.json` уже создан в корне проекта.

3. Запустите Laravel Echo Server:
```bash
laravel-echo-server start
```

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

## Настройка авторизации

Маршрут `/api/broadcasting/auth` автоматически создается через `BroadcastServiceProvider` и использует middleware `auth:sanctum` для проверки токена.

## Использование

### Backend

Событие `NewOrderCreated` автоматически отправляется при создании нового заказа в `OrderController`.

### Frontend

Компонент `NotificationBell` автоматически подключается к каналу `admin-orders` при монтировании в админ-панели.

## Проверка работы

1. Убедитесь, что Redis запущен:
```bash
redis-cli ping
# Должен вернуть: PONG
```

2. Убедитесь, что Laravel Echo Server запущен и слушает порт 6001

3. Откройте админ-панель и проверьте консоль браузера - должно быть сообщение "Connected to admin-orders channel"

4. Создайте новый заказ - должно появиться уведомление в админ-панели

## Troubleshooting

### Проблема: Не подключается к каналу

- Проверьте, что Laravel Echo Server запущен
- Проверьте, что токен авторизации установлен в `authStore`
- Проверьте консоль браузера на наличие ошибок

### Проблема: Уведомления не приходят

- Проверьте, что `BROADCAST_DRIVER=redis` в `.env`
- Проверьте, что Redis запущен
- Проверьте логи Laravel Echo Server
- Убедитесь, что событие `NewOrderCreated` отправляется (проверьте логи Laravel)

### Проблема: "Class 'Redis' not found"

Эта ошибка возникает, если используется `phpredis` клиент, но PHP расширение Redis не установлено.

**Решение:** Установите `predis` (чистый PHP клиент):
```bash
composer require predis/predis
```

И убедитесь, что в `.env` установлено:
```env
REDIS_CLIENT=predis
```

Или установите PHP расширение Redis (требует root доступ):
```bash
# Ubuntu/Debian
sudo apt-get install php-redis

# CentOS/RHEL
sudo yum install php-redis

# После установки перезапустите PHP-FPM
sudo systemctl restart php-fpm
```

### Проблема: Ошибка авторизации

- Проверьте, что маршрут `/api/broadcasting/auth` доступен
- Проверьте, что токен передается в заголовках
- Проверьте, что пользователь имеет роль `admin` или `manager`

