Major fixes and new features
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2025-09-25 15:51:48 +09:00
parent dd7349bb4c
commit ddce9f5125
5586 changed files with 1470941 additions and 0 deletions

684
api_test_requests.md Normal file
View File

@@ -0,0 +1,684 @@
# Запросы для тестирования API приложения для безопасности женщин
В этом файле собраны примеры всех API-запросов для тестирования серверной части микросервисного приложения.
## Содержание
- [Общие запросы](#общие-запросы)
- [Сервис пользователей (User Service)](#сервис-пользователей-user-service)
- [Сервис экстренной помощи (Emergency Service)](#сервис-экстренной-помощи-emergency-service)
- [Сервис геолокации (Location Service)](#сервис-геолокации-location-service)
- [Сервис календаря (Calendar Service)](#сервис-календаря-calendar-service)
- [Сервис уведомлений (Notification Service)](#сервис-уведомлений-notification-service)
- [API Gateway](#api-gateway)
## Общие запросы
### Проверка доступности всех сервисов
```bash
# Проверка API Gateway
curl -s http://localhost:8000/health | jq
# Проверка User Service
curl -s http://localhost:8001/health | jq
# Проверка Emergency Service
curl -s http://localhost:8002/health | jq
# Проверка Location Service
curl -s http://localhost:8003/health | jq
# Проверка Calendar Service
curl -s http://localhost:8004/health | jq
# Проверка Notification Service
curl -s http://localhost:8005/health | jq
# Альтернативные endpoint health
curl -s http://localhost:8000/api/v1/health | jq
curl -s http://localhost:8001/api/v1/health | jq
curl -s http://localhost:8002/api/v1/health | jq
curl -s http://localhost:8003/api/v1/health | jq
curl -s http://localhost:8004/api/v1/health | jq
curl -s http://localhost:8005/api/v1/health | jq
```
## Сервис пользователей (User Service)
### Регистрация нового пользователя
```bash
curl -X POST http://localhost:8001/api/v1/users/register \
-H "Content-Type: application/json" \
-d '{
"username": "usertest1",
"email": "user1@example.com",
"password": "SecurePass123!",
"full_name": "Тест Пользователь",
"phone_number": "+79001234567"
}' | jq
```
### Авторизация пользователя
```bash
curl -X POST http://localhost:8001/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{
"username": "usertest1",
"password": "SecurePass123!"
}' | jq
# Сохраните полученный токен в переменную для дальнейшего использования
# TOKEN=$(curl -s -X POST http://localhost:8001/api/v1/auth/login -H "Content-Type: application/json" -d '{"username": "usertest1", "password": "SecurePass123!"}' | jq -r '.access_token')
```
### Получение информации о текущем пользователе
```bash
curl -X GET http://localhost:8001/api/v1/users/me \
-H "Authorization: Bearer $TOKEN" | jq
```
### Обновление профиля пользователя
```bash
curl -X PATCH http://localhost:8001/api/v1/users/me \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"full_name": "Новое Имя Пользователя",
"phone_number": "+79009876543"
}' | jq
```
### Добавление контактов для экстренной связи
```bash
curl -X POST http://localhost:8001/api/v1/users/me/emergency-contacts \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"name": "Контакт для экстренной связи",
"phone_number": "+79001112233",
"relationship": "Друг"
}' | jq
```
### Получение списка контактов для экстренной связи
```bash
curl -X GET http://localhost:8001/api/v1/users/me/emergency-contacts \
-H "Authorization: Bearer $TOKEN" | jq
```
### Удаление контакта для экстренной связи
```bash
# Замените {contact_id} на реальный ID контакта
curl -X DELETE http://localhost:8001/api/v1/users/me/emergency-contacts/{contact_id} \
-H "Authorization: Bearer $TOKEN"
```
### Изменение пароля
```bash
curl -X POST http://localhost:8001/api/v1/users/me/change-password \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"current_password": "SecurePass123!",
"new_password": "NewSecurePass456!"
}' | jq
```
## Сервис экстренной помощи (Emergency Service)
### Отправка сигнала SOS
```bash
curl -X POST http://localhost:8002/api/v1/emergency/alerts \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"latitude": 55.7558,
"longitude": 37.6173,
"alert_type": "SOS",
"message": "Нужна срочная помощь!"
}' | jq
# Сохраните ID созданного оповещения для дальнейших действий
# ALERT_ID=$(curl -s -X POST http://localhost:8002/api/v1/emergency/alerts -H "Content-Type: application/json" -H "Authorization: Bearer $TOKEN" -d '{"latitude": 55.7558, "longitude": 37.6173, "alert_type": "SOS", "message": "Нужна срочная помощь!"}' | jq -r '.id')
```
### Получение активных оповещений пользователя
```bash
curl -X GET http://localhost:8002/api/v1/emergency/alerts/my \
-H "Authorization: Bearer $TOKEN" | jq
```
### Отмена сигнала SOS
```bash
# Замените {alert_id} на ID полученного ранее оповещения
curl -X PATCH http://localhost:8002/api/v1/emergency/alerts/{alert_id}/cancel \
-H "Authorization: Bearer $TOKEN" | jq
```
### Получение списка ближайших оповещений (для волонтеров/служб)
```bash
curl -X GET "http://localhost:8002/api/v1/emergency/alerts/nearby?latitude=55.7558&longitude=37.6173&radius=1.0" \
-H "Authorization: Bearer $TOKEN" | jq
```
### Отправка отчета о происшествии
```bash
curl -X POST http://localhost:8002/api/v1/emergency/reports \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"latitude": 55.7558,
"longitude": 37.6173,
"report_type": "UNSAFE_AREA",
"description": "Тёмная улица без освещения",
"severity_level": "MEDIUM"
}' | jq
```
### Получение списка отчетов о происшествиях в определенном радиусе
```bash
curl -X GET "http://localhost:8002/api/v1/emergency/reports/nearby?latitude=55.7558&longitude=37.6173&radius=5.0" \
-H "Authorization: Bearer $TOKEN" | jq
```
## Сервис геолокации (Location Service)
### Обновление местоположения пользователя
```bash
curl -X POST http://localhost:8003/api/v1/locations/update \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"latitude": 55.7558,
"longitude": 37.6173,
"accuracy": 10.0
}' | jq
```
### Получение последнего известного местоположения пользователя
```bash
curl -X GET http://localhost:8003/api/v1/locations/last \
-H "Authorization: Bearer $TOKEN" | jq
```
### Получение истории перемещений пользователя
```bash
curl -X GET "http://localhost:8003/api/v1/locations/history?start_date=2025-09-20T00:00:00Z&end_date=2025-09-25T23:59:59Z" \
-H "Authorization: Bearer $TOKEN" | jq
```
### Получение списка безопасных мест поблизости
```bash
curl -X GET "http://localhost:8003/api/v1/locations/safe-places?latitude=55.7558&longitude=37.6173&radius=1.0" \
-H "Authorization: Bearer $TOKEN" | jq
```
### Добавление безопасного места
```bash
curl -X POST http://localhost:8003/api/v1/locations/safe-places \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"name": "Полицейский участок",
"latitude": 55.7559,
"longitude": 37.6174,
"place_type": "POLICE",
"description": "Центральный полицейский участок"
}' | jq
```
### Поиск пользователей в определенном радиусе (для экстренных ситуаций)
```bash
curl -X GET "http://localhost:8003/api/v1/locations/users/nearby?latitude=55.7558&longitude=37.6173&radius=0.5" \
-H "Authorization: Bearer $TOKEN" | jq
```
## Сервис календаря (Calendar Service)
### Создание записи в календаре
```bash
curl -X POST http://localhost:8004/api/v1/calendar/entries \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"entry_date": "2025-10-01",
"cycle_day": 1,
"symptoms": ["HEADACHE", "FATIGUE"],
"mood": "NORMAL",
"notes": "Начало цикла"
}' | jq
```
### Получение записей календаря за период
```bash
curl -X GET "http://localhost:8004/api/v1/calendar/entries?start_date=2025-09-01&end_date=2025-10-31" \
-H "Authorization: Bearer $TOKEN" | jq
```
### Обновление записи в календаре
```bash
# Замените {entry_id} на реальный ID записи
curl -X PATCH http://localhost:8004/api/v1/calendar/entries/{entry_id} \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"symptoms": ["HEADACHE", "FATIGUE", "BLOATING"],
"mood": "IRRITABLE",
"notes": "Обновленная запись"
}' | jq
```
### Получение статистики и прогнозов
```bash
curl -X GET http://localhost:8004/api/v1/calendar/statistics \
-H "Authorization: Bearer $TOKEN" | jq
```
### Получение прогноза следующего цикла
```bash
curl -X GET http://localhost:8004/api/v1/calendar/predictions/next-cycle \
-H "Authorization: Bearer $TOKEN" | jq
```
### Настройка параметров календаря
```bash
curl -X POST http://localhost:8004/api/v1/calendar/settings \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"average_cycle_length": 28,
"average_period_length": 5,
"notification_enabled": true,
"notification_days_before": 2
}' | jq
```
### Получение настроек календаря
```bash
curl -X GET http://localhost:8004/api/v1/calendar/settings \
-H "Authorization: Bearer $TOKEN" | jq
```
## Сервис уведомлений (Notification Service)
### Регистрация устройства для Push-уведомлений
```bash
curl -X POST http://localhost:8005/api/v1/notifications/devices \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"device_token": "fcm-token-example-123456",
"device_type": "ANDROID",
"app_version": "1.0.0"
}' | jq
```
### Получение списка зарегистрированных устройств
```bash
curl -X GET http://localhost:8005/api/v1/notifications/devices \
-H "Authorization: Bearer $TOKEN" | jq
```
### Удаление регистрации устройства
```bash
# Замените {device_id} на реальный ID устройства
curl -X DELETE http://localhost:8005/api/v1/notifications/devices/{device_id} \
-H "Authorization: Bearer $TOKEN"
```
### Настройка предпочтений уведомлений
```bash
curl -X POST http://localhost:8005/api/v1/notifications/preferences \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"emergency_alerts": true,
"nearby_incidents": true,
"calendar_reminders": true,
"system_notifications": true
}' | jq
```
### Получение настроек уведомлений
```bash
curl -X GET http://localhost:8005/api/v1/notifications/preferences \
-H "Authorization: Bearer $TOKEN" | jq
```
### Отправка тестового уведомления (только для тестирования)
```bash
curl -X POST http://localhost:8005/api/v1/notifications/test \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"title": "Тестовое уведомление",
"body": "Это тестовое push-уведомление",
"data": {
"type": "TEST",
"action": "OPEN_APP"
}
}' | jq
```
### Получение истории уведомлений
```bash
curl -X GET http://localhost:8005/api/v1/notifications/history \
-H "Authorization: Bearer $TOKEN" | jq
```
## API Gateway
### Проверка статуса всех сервисов через Gateway
```bash
curl -X GET http://localhost:8000/api/v1/status \
-H "Authorization: Bearer $TOKEN" | jq
```
### Регистрация через Gateway
```bash
curl -X POST http://localhost:8000/api/v1/auth/register \
-H "Content-Type: application/json" \
-d '{
"username": "gatewayuser",
"email": "gateway@example.com",
"password": "GatewayPass123!",
"full_name": "Gateway Test User",
"phone_number": "+79991234567"
}' | jq
```
### Авторизация через Gateway
```bash
curl -X POST http://localhost:8000/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{
"username": "gatewayuser",
"password": "GatewayPass123!"
}' | jq
# Сохраните полученный токен в переменную для дальнейшего использования
# GW_TOKEN=$(curl -s -X POST http://localhost:8000/api/v1/auth/login -H "Content-Type: application/json" -d '{"username": "gatewayuser", "password": "GatewayPass123!"}' | jq -r '.access_token')
```
### Создание экстренного оповещения через Gateway
```bash
curl -X POST http://localhost:8000/api/v1/emergency/alerts \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $GW_TOKEN" \
-d '{
"latitude": 55.7558,
"longitude": 37.6173,
"alert_type": "SOS",
"message": "Тестовое экстренное оповещение через Gateway"
}' | jq
```
### Комплексный запрос данных пользователя через Gateway
```bash
curl -X GET http://localhost:8000/api/v1/users/dashboard \
-H "Authorization: Bearer $GW_TOKEN" | jq
```
## Bash скрипт для полного тестирования API
Создайте файл `full_api_test.sh` со следующим содержимым:
```bash
#!/bin/bash
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
echo -e "${YELLOW}=======================================${NC}"
echo -e "${YELLOW}🔍 Полное тестирование API приложения ${NC}"
echo -e "${YELLOW}=======================================${NC}"
# 1. Проверка доступности сервисов
echo -e "\n${GREEN}1. Проверка доступности сервисов${NC}"
services=(
"http://localhost:8000"
"http://localhost:8001"
"http://localhost:8002"
"http://localhost:8003"
"http://localhost:8004"
"http://localhost:8005"
)
service_names=(
"API Gateway"
"User Service"
"Emergency Service"
"Location Service"
"Calendar Service"
"Notification Service"
)
for i in ${!services[@]}; do
echo -n "Проверка ${service_names[$i]} (${services[$i]})... "
if curl -s "${services[$i]}/health" | grep -q "status.*healthy" || curl -s "${services[$i]}/api/v1/health" | grep -q "status.*healthy"; then
echo -e "${GREEN}OK${NC}"
else
echo -e "${RED}НЕДОСТУПНО${NC}"
echo "Продолжение тестирования может вызвать ошибки. Хотите продолжить? (y/n)"
read continue_test
if [[ $continue_test != "y" ]]; then
exit 1
fi
fi
done
# 2. Регистрация и авторизация
echo -e "\n${GREEN}2. Регистрация и авторизация${NC}"
echo "Регистрация тестового пользователя..."
REGISTER_RESPONSE=$(curl -s -X POST http://localhost:8001/api/v1/users/register \
-H "Content-Type: application/json" \
-d '{
"username": "apitest",
"email": "apitest@example.com",
"password": "ApiTest123!",
"full_name": "API Test User",
"phone_number": "+79997776655"
}')
echo $REGISTER_RESPONSE | jq
# Авторизация
echo "Авторизация тестового пользователя..."
LOGIN_RESPONSE=$(curl -s -X POST http://localhost:8001/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{
"username": "apitest",
"password": "ApiTest123!"
}')
echo $LOGIN_RESPONSE | jq
TOKEN=$(echo $LOGIN_RESPONSE | jq -r '.access_token')
if [[ $TOKEN == "null" || -z $TOKEN ]]; then
echo -e "${RED}Не удалось получить токен авторизации. Тестирование будет остановлено.${NC}"
exit 1
else
echo -e "${GREEN}Успешно получен токен авторизации${NC}"
fi
# 3. Обновление профиля
echo -e "\n${GREEN}3. Обновление профиля пользователя${NC}"
curl -s -X PATCH http://localhost:8001/api/v1/users/me \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"full_name": "Обновленное Имя",
"phone_number": "+79997776655"
}' | jq
# 4. Добавление контактов экстренной связи
echo -e "\n${GREEN}4. Добавление контакта для экстренной связи${NC}"
CONTACT_RESPONSE=$(curl -s -X POST http://localhost:8001/api/v1/users/me/emergency-contacts \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"name": "Экстренный контакт",
"phone_number": "+79991112233",
"relationship": "Родственник"
}')
echo $CONTACT_RESPONSE | jq
CONTACT_ID=$(echo $CONTACT_RESPONSE | jq -r '.id')
# 5. Получение списка контактов
echo -e "\n${GREEN}5. Получение списка экстренных контактов${NC}"
curl -s -X GET http://localhost:8001/api/v1/users/me/emergency-contacts \
-H "Authorization: Bearer $TOKEN" | jq
# 6. Обновление местоположения пользователя
echo -e "\n${GREEN}6. Обновление местоположения пользователя${NC}"
curl -s -X POST http://localhost:8003/api/v1/locations/update \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"latitude": 55.7558,
"longitude": 37.6173,
"accuracy": 10.0
}' | jq
# 7. Получение последнего местоположения
echo -e "\n${GREEN}7. Получение последнего местоположения${NC}"
curl -s -X GET http://localhost:8003/api/v1/locations/last \
-H "Authorization: Bearer $TOKEN" | jq
# 8. Создание экстренного оповещения
echo -e "\n${GREEN}8. Создание экстренного оповещения${NC}"
ALERT_RESPONSE=$(curl -s -X POST http://localhost:8002/api/v1/emergency/alerts \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"latitude": 55.7558,
"longitude": 37.6173,
"alert_type": "SOS",
"message": "Тестовое экстренное оповещение"
}')
echo $ALERT_RESPONSE | jq
ALERT_ID=$(echo $ALERT_RESPONSE | jq -r '.id')
# 9. Получение активных оповещений
echo -e "\n${GREEN}9. Получение активных оповещений пользователя${NC}"
curl -s -X GET http://localhost:8002/api/v1/emergency/alerts/my \
-H "Authorization: Bearer $TOKEN" | jq
# 10. Отмена экстренного оповещения
if [[ $ALERT_ID != "null" && -n $ALERT_ID ]]; then
echo -e "\n${GREEN}10. Отмена экстренного оповещения${NC}"
curl -s -X PATCH http://localhost:8002/api/v1/emergency/alerts/$ALERT_ID/cancel \
-H "Authorization: Bearer $TOKEN" | jq
fi
# 11. Создание записи в календаре
echo -e "\n${GREEN}11. Создание записи в календаре${NC}"
CALENDAR_RESPONSE=$(curl -s -X POST http://localhost:8004/api/v1/calendar/entries \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"entry_date": "2025-10-01",
"cycle_day": 1,
"symptoms": ["HEADACHE", "FATIGUE"],
"mood": "NORMAL",
"notes": "Тестовая запись в календаре"
}')
echo $CALENDAR_RESPONSE | jq
# 12. Получение записей календаря
echo -e "\n${GREEN}12. Получение записей календаря${NC}"
curl -s -X GET "http://localhost:8004/api/v1/calendar/entries?start_date=2025-09-01&end_date=2025-10-31" \
-H "Authorization: Bearer $TOKEN" | jq
# 13. Регистрация устройства для уведомлений
echo -e "\n${GREEN}13. Регистрация устройства для уведомлений${NC}"
DEVICE_RESPONSE=$(curl -s -X POST http://localhost:8005/api/v1/notifications/devices \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"device_token": "fcm-test-token-123",
"device_type": "ANDROID",
"app_version": "1.0.0"
}')
echo $DEVICE_RESPONSE | jq
# 14. Настройка предпочтений уведомлений
echo -e "\n${GREEN}14. Настройка предпочтений уведомлений${NC}"
curl -s -X POST http://localhost:8005/api/v1/notifications/preferences \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"emergency_alerts": true,
"nearby_incidents": true,
"calendar_reminders": true,
"system_notifications": true
}' | jq
# 15. Получение данных пользователя через Gateway
echo -e "\n${GREEN}15. Получение данных пользователя через Gateway${NC}"
curl -s -X GET http://localhost:8000/api/v1/users/dashboard \
-H "Authorization: Bearer $TOKEN" | jq
echo -e "\n${YELLOW}=======================================${NC}"
echo -e "${GREEN}✅ Тестирование API завершено успешно${NC}"
echo -e "${YELLOW}=======================================${NC}"
```
## Использование Bash скрипта для полного тестирования API
Для запуска скрипта выполните следующие команды:
```bash
chmod +x full_api_test.sh
./full_api_test.sh
```