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

217 lines
5.4 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🚀 WebSocket SOS - Быстрый Старт
## ⚡ Самый быстрый способ протестировать
### 1⃣ Запустить сервисы (если еще не запущены)
```bash
cd /home/trevor/dev/chat
# Терминал 1
python -m services.user_service.main
# Терминал 2
python -m services.emergency_service.main
```
### 2⃣ Запустить тест (занимает ~20 секунд)
```bash
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
```bash
curl -X POST http://localhost:8001/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"wstester@test.com","password":"WsTest1234!"}'
```
Скопируйте значение `access_token` из ответа.
---
## 💬 Примеры сообщений
### Подключение (отправляется сервером)
```json
{
"type": "connection_established",
"message": "WebSocket connection established successfully",
"user_id": 51,
"timestamp": "2025-12-13T14:15:14.982894"
}
```
### Ping (отправьте клиент)
```json
{"type": "ping"}
```
### Pong (ответ сервера)
```json
{"type": "pong"}
```
### SOS Alert (отправляется сервером при создании оповещения)
```json
{
"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 - Базовый тест
```bash
python test_ws_quick.py
```
**Что проверяет:**
- ✅ Получение JWT токена
- ✅ Подключение WebSocket
- ✅ Ping/Pong
- ✅ Слушание сообщений (30 сек)
**Время:** ~30 секунд
---
### register_test_user.py - Создание пользователя
```bash
python register_test_user.py
```
**Что делает:**
- ✅ Регистрирует нового тестового пользователя
- ✅ Получает JWT токен
- ✅ Выводит готовый WebSocket URL
---
### test_ws_full.py - Полное тестирование
```bash
python test_ws_full.py
```
**Что проверяет:**
- ✅ Аутентификация
- ✅ WebSocket подключение
- ✅ Создание SOS оповещения
- ✅ Получение уведомления
- ✅ Множественные клиенты
**Время:** ~1-2 минуты
---
## 🎯 Статус работоспособности
| Функция | Статус |
|---------|--------|
| WebSocket подключение | ✅ OK |
| Аутентификация | ✅ OK |
| Ping/Pong | ✅ OK |
| Создание SOS | ✅ OK |
| Получение уведомлений | ✅ OK |
| Broadcast | ✅ OK |
---
## 📊 Посмотреть статистику
### Все активные соединения
```bash
curl -H "Authorization: Bearer YOUR_JWT_TOKEN" \
http://localhost:8002/api/v1/websocket/stats
```
### Детальная информация
```bash
curl -H "Authorization: Bearer YOUR_JWT_TOKEN" \
http://localhost:8002/api/v1/websocket/connections
```
### Пинг всех подключений
```bash
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
```
---
## 📚 Дополнительная информация
### Подробные отчеты:
- [WS_SOS_FINAL_REPORT.md](./docs/WS_SOS_FINAL_REPORT.md) - Полный технический отчет
- [WS_SOS_TEST_REPORT.md](./docs/WS_SOS_TEST_REPORT.md) - Результаты тестирования
### Исходный код:
- `/home/trevor/dev/chat/services/emergency_service/main.py` - WebSocket сервис
- Класс `WebSocketManager` (строка ~96)
- Endpoint `websocket_endpoint()` (строка ~393)
---
**Последнее обновление:** 13 декабря 2025
**Статус:**Все работает!