Files
chat/api_test_requests.md
Andrew K. Choi ddce9f5125
All checks were successful
continuous-integration/drone/push Build is passing
Major fixes and new features
2025-09-25 15:51:48 +09:00

684 lines
23 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

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.

# Запросы для тестирования 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
```