feat: Fix nutrition service and add location-based alerts
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
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
This commit is contained in:
216
WS_SOS_QUICKSTART.md
Normal file
216
WS_SOS_QUICKSTART.md
Normal file
@@ -0,0 +1,216 @@
|
||||
# 🚀 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
|
||||
**Статус:** ✅ Все работает!
|
||||
Reference in New Issue
Block a user