Files
chat/WS_SOS_QUICKSTART.md
Andrew K. Choi cfc93cb99a
All checks were successful
continuous-integration/drone/push Build is passing
feat: Fix nutrition service and add location-based alerts
Changes:
- Fix nutrition service: add is_active column and Pydantic validation for UUID/datetime
- Add location-based alerts feature: users can now see alerts within 1km radius
- Fix CORS and response serialization in nutrition service
- Add getCurrentLocation() and loadAlertsNearby() functions
- Improve UI for nearby alerts display with distance and response count
2025-12-13 16:34:50 +09:00

5.4 KiB
Raw Permalink Blame History

🚀 WebSocket SOS - Быстрый Старт

Самый быстрый способ протестировать

1 Запустить сервисы (если еще не запущены)

cd /home/trevor/dev/chat

# Терминал 1
python -m services.user_service.main

# Терминал 2
python -m services.emergency_service.main

2 Запустить тест (занимает ~20 секунд)

python test_ws_quick.py

Результат

✅ Token obtained
✅ WebSocket connected
✅ Ping/pong working
✅ WebSocket connection test completed successfully!

📝 Тестовые учетные данные

Параметр Значение
Email wstester@test.com
Password WsTest1234!
User ID 51

🔗 WebSocket URL

ws://localhost:8002/api/v1/emergency/ws/51?token={JWT_TOKEN}

Как получить JWT_TOKEN

curl -X POST http://localhost:8001/api/v1/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email":"wstester@test.com","password":"WsTest1234!"}'

Скопируйте значение access_token из ответа.


💬 Примеры сообщений

Подключение (отправляется сервером)

{
  "type": "connection_established",
  "message": "WebSocket connection established successfully",
  "user_id": 51,
  "timestamp": "2025-12-13T14:15:14.982894"
}

Ping (отправьте клиент)

{"type": "ping"}

Pong (ответ сервера)

{"type": "pong"}

SOS Alert (отправляется сервером при создании оповещения)

{
  "type": "emergency_alert",
  "alert_id": 123,
  "alert_type": "SOS",
  "latitude": 55.7558,
  "longitude": 37.6173,
  "address": "Location (55.7558, 37.6173)",
  "message": "Экстренная ситуация!",
  "created_at": "2025-12-13T14:15:20.123456",
  "distance_km": 0.5
}

🔧 Тестовые скрипты

test_ws_quick.py - Базовый тест

python test_ws_quick.py

Что проверяет:

  • Получение JWT токена
  • Подключение WebSocket
  • Ping/Pong
  • Слушание сообщений (30 сек)

Время: ~30 секунд


register_test_user.py - Создание пользователя

python register_test_user.py

Что делает:

  • Регистрирует нового тестового пользователя
  • Получает JWT токен
  • Выводит готовый WebSocket URL

test_ws_full.py - Полное тестирование

python test_ws_full.py

Что проверяет:

  • Аутентификация
  • WebSocket подключение
  • Создание SOS оповещения
  • Получение уведомления
  • Множественные клиенты

Время: ~1-2 минуты


🎯 Статус работоспособности

Функция Статус
WebSocket подключение OK
Аутентификация OK
Ping/Pong OK
Создание SOS OK
Получение уведомлений OK
Broadcast OK

📊 Посмотреть статистику

Все активные соединения

curl -H "Authorization: Bearer YOUR_JWT_TOKEN" \
     http://localhost:8002/api/v1/websocket/stats

Детальная информация

curl -H "Authorization: Bearer YOUR_JWT_TOKEN" \
     http://localhost:8002/api/v1/websocket/connections

Пинг всех подключений

curl -X POST -H "Authorization: Bearer YOUR_JWT_TOKEN" \
     http://localhost:8002/api/v1/websocket/ping

🐛 Решение проблем

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

Решение:
1. Проверьте JWT токен (не истек ли)
2. Убедитесь в правильности user_id
3. Проверьте что Emergency Service запущена на 8002

Проблема: Плохое соединение

Решение:
1. Проверьте интернет (локальное тестирование)
2. Посмотрите логи сервиса
3. Попробуйте переподключиться

Проблема: Нет уведомлений о SOS

Решение:
1. Убедитесь что Location Service запущена
2. Проверьте что пользователи находятся в радиусе 1-2 км
3. Убедитесь что пользователи подключены к WebSocket

📚 Дополнительная информация

Подробные отчеты:

Исходный код:

  • /home/trevor/dev/chat/services/emergency_service/main.py - WebSocket сервис
  • Класс WebSocketManager (строка ~96)
  • Endpoint websocket_endpoint() (строка ~393)

Последнее обновление: 13 декабря 2025
Статус: Все работает!