# Women's Safety App - Backend Services

🚨 **Микросервисная архитектура для приложения безопасности женщин с поддержкой миллионов пользователей** 🚨

> Высокопроизводительная, масштабируемая система для экстренных уведомлений, геолокационных сервисов и управления женским здоровьем.

[![Python](https://img.shields.io/badge/Python-3.11+-blue.svg)](https://python.org)
[![FastAPI](https://img.shields.io/badge/FastAPI-0.104+-green.svg)](https://fastapi.tiangolo.com)
[![PostgreSQL](https://img.shields.io/badge/PostgreSQL-15+-blue.svg)](https://postgresql.org)
[![Docker](https://img.shields.io/badge/Docker-Ready-blue.svg)](https://docker.com)
[![Drone CI](https://img.shields.io/badge/Drone-CI%2FCD-orange.svg)](https://drone.io)
[![Build Status](https://drone.smartsoltech.kr/api/badges/trevor/chat/status.svg)](https://drone.smartsoltech.kr/trevor/chat)

## 🏗️ Архитектура

### 🎯 Ключевые возможности:
- **Мгновенные SOS-сигналы** с геолокационным таргетингом
- **Умный поиск** пользователей в радиусе 1км
- **Женский календарь** с ИИ-аналитикой
- **Push-уведомления** в реальном времени
- **JWT-аутентификация** и защита данных
- **Горизонтальное масштабирование** для миллионов пользователей

### 🚀 Микросервисы:
- **🔐 User Service** (8001): Профили, аутентификация, настройки
- **🚨 Emergency Service** (8002): SOS-сигналы, экстренные уведомления  
- **📍 Location Service** (8003): Геолокация, поиск по радиусу
- **📅 Calendar Service** (8004): Женское здоровье, цикл, аналитика
- **🔔 Notification Service** (8005): Push-уведомления, FCM
- **🌐 API Gateway** (8000): Маршрутизация, rate limiting, балансировка

### 🛠️ Технологический стек:
- **Backend**: Python 3.11+ с FastAPI
- **Database**: PostgreSQL 15+ с партиционированием  
- **Cache**: Redis 7+ для сессий и геоданных
- **Messaging**: Kafka для event streaming
- **Monitoring**: Prometheus + Grafana
- **Deployment**: Docker + Docker Compose

## 🚀 Запуск

### Требования
- Python 3.11+
- Docker & Docker Compose
- PostgreSQL 14+
- Redis 7+

### Установка
```bash
# Клонирование и настройка
git clone <repository>
cd women-safety-backend

# Создание виртуального окружения
python -m venv venv
source venv/bin/activate  # Linux/Mac
# venv\Scripts\activate   # Windows

# Установка зависимостей
pip install -r requirements.txt

# Запуск инфраструктуры
docker-compose up -d postgres redis kafka

# Миграции БД
alembic upgrade head

# Запуск сервисов
python -m uvicorn user_service.main:app --port 8001
python -m uvicorn emergency_service.main:app --port 8002
python -m uvicorn location_service.main:app --port 8003
python -m uvicorn calendar_service.main:app --port 8004
python -m uvicorn notification_service.main:app --port 8005
python -m uvicorn api_gateway.main:app --port 8000
```

## 📱 Основной функционал

### SOS Alert System
- Мгновенная отправка сигналов тревоги
- Геолокационный поиск пользователей в радиусе 1км
- Массовые push-уведомления
- Интеграция с службами экстренного реагирования

### Профили пользователей
- Регистрация и аутентификация
- Личные данные и настройки
- Контакты для экстренной связи

### Женский календарь
- Отслеживание менструального цикла
- Уведомления и напоминания
- Аналитика здоровья

## 🔧 Разработка

### Структура проекта
```
├── services/
│   ├── user-service/
│   ├── emergency-service/
│   ├── location-service/
│   ├── calendar-service/
│   ├── notification-service/
│   └── api-gateway/
├── shared/
│   ├── database/
│   ├── messaging/
│   └── utils/
├── docker-compose.yml
├── requirements.txt
└── README.md
```

### Команды разработки
```bash
# Тесты
python -m pytest

# Линтеры
black .
flake8 .
mypy .

# Миграции
alembic revision --autogenerate -m "description"
alembic upgrade head
```

## 🔒 Безопасность
- JWT аутентификация
- Rate limiting
- HTTPS only
- Шифрование персональных данных
- Валидация входных данных
- CORS настройки

## 📊 Масштабируемость
- Горизонтальное масштабирование сервисов
- Партиционирование БД по географическим регионам
- Кэширование критических данных
- Асинхронная обработка
- Circuit breaker pattern
- Health checks и service discovery

## 🚁 CI/CD - Drone Pipeline

[![Drone Build Status](https://drone.example.com/api/badges/women-safety/backend/status.svg)](https://drone.example.com/women-safety/backend)

Автоматизированный pipeline с полным циклом разработки, тестирования и развертывания:

### 🔄 Этапы Pipeline:

#### 1. **Code Quality** 🧹
```yaml
steps:
  - name: lint
    commands:
      - black --check .
      - flake8 .
      - isort --check-only .
      - mypy services/ --ignore-missing-imports
```

#### 2. **Security Scanning** 🛡️
```yaml
steps:
  - name: security
    commands:
      - safety check --json
      - bandit -r services/ -f json
      - trivy image scan
```

#### 3. **Testing** 🧪
- **Unit Tests**: pytest с coverage отчетами
- **Integration Tests**: Реальные сервисы в Docker
- **Load Testing**: K6 performance тесты
- **Security Tests**: OWASP ZAP сканирование

#### 4. **Docker Build** 🐳
Параллельная сборка всех 6 микросервисов:
- `women-safety/user-service`
- `women-safety/emergency-service`
- `women-safety/location-service`
- `women-safety/calendar-service`
- `women-safety/notification-service`
- `women-safety/api-gateway`

#### 5. **Deployment** 🚀
- **Staging**: Автоматическое развертывание из `develop`
- **Production**: Развертывание из `main` с подтверждением
- **Rollback**: Автоматический откат при ошибках

### 📋 Drone Configuration

**Основной Pipeline** (`.drone.yml`):
```yaml
kind: pipeline
name: women-safety-backend

steps:
  - name: setup
    image: python:3.11-slim
    commands:
      - pip install -r requirements.txt

  - name: test
    depends_on: [setup]
    commands:
      - pytest --cov=services --cov-report=xml

  - name: build-services
    depends_on: [test]
    image: plugins/docker
    settings:
      repo: women-safety/${SERVICE}
      tags: [latest, ${DRONE_COMMIT_SHA:0:7}]

  - name: deploy-production
    depends_on: [integration-test]
    when:
      branch: [main]
      event: [push]
```

**Vulnerability Scanning** (Nightly):
```yaml
kind: pipeline
name: vulnerability-scan
trigger:
  cron: [nightly]

steps:
  - name: trivy-scan
    image: aquasec/trivy:latest
    commands:
      - trivy image women-safety/user-service:latest
```

**Performance Testing** (Weekly):
```yaml
kind: pipeline
name: performance-test
trigger:
  cron: [weekly]

steps:
  - name: load-test
    image: loadimpact/k6:latest
    commands:
      - k6 run tests/performance/load-test.js
```

### 🔧 Настройка Secrets

```bash
# Docker Registry
drone secret add --repository women-safety/backend --name docker_username --data username
drone secret add --repository women-safety/backend --name docker_password --data password

# Production SSH
drone secret add --repository women-safety/backend --name production_host --data server.example.com
drone secret add --repository women-safety/backend --name production_ssh_key --data @~/.ssh/id_rsa

# Notifications
drone secret add --repository women-safety/backend --name slack_webhook --data https://hooks.slack.com/...
```

### 📊 Мониторинг Pipeline

- **Build Status**: Real-time статус в Slack/Teams
- **Performance Metrics**: Автоматические отчеты по производительности  
- **Security Reports**: Еженедельные отчеты по уязвимостям
- **Deployment Logs**: Centralized логирование развертываний

### 🏃‍♂️ Быстрый старт с Drone

```bash
# Установка Drone CLI
curl -L https://github.com/drone/drone-cli/releases/latest/download/drone_linux_amd64.tar.gz | tar zx
sudo install -t /usr/local/bin drone

# Настройка
export DRONE_SERVER=https://drone.example.com
export DRONE_TOKEN=your-token

# Запуск build
drone build promote women-safety/backend 123 production
```

### 📜 Дополнительные скрипты

**Deployment Scripts:**
- `deploy-production.sh` - Полное развертывание в продакшен с проверками
- `test_auth_flow.sh` - Тестирование регистрации и авторизации
- `start_services_no_docker.sh` - Запуск сервисов без Docker

**Performance Testing:**
- `tests/performance/load-test.js` - K6 нагрузочное тестирование
- `tests/performance/stress-test.js` - K6 стресс-тестирование

**Quick Commands:**
```bash
# Полное развертывание
./deploy-production.sh v1.2.3

# Тестирование API
./test_auth_flow.sh

# Проверка системы
./health-check.sh

# Нагрузочное тестирование
k6 run tests/performance/load-test.js
```

## 📁 Структура проекта

```
women-safety-backend/
├── .drone.yml                 # Drone CI/CD Pipeline
├── deploy-production.sh       # Production deployment script
├── docker-compose.prod.yml    # Production configuration
├── docker-compose.test.yml    # Testing configuration
├── DRONE_SETUP.md            # Drone setup instructions
├── services/                 # Microservices
│   ├── user_service/        # User management & auth
│   ├── emergency_service/   # SOS alerts & emergencies
│   ├── location_service/    # Geolocation & tracking
│   ├── calendar_service/    # Women's health calendar
│   ├── notification_service/ # Push notifications
│   └── api_gateway/         # API Gateway & routing
├── shared/                  # Shared utilities
│   ├── config.py           # Configuration management  
│   ├── database.py         # Database connections
│   └── auth.py             # JWT authentication
├── tests/                   # Test suites
│   ├── performance/        # K6 load tests
│   └── integration/        # Integration tests
└── scripts/                # Utility scripts
    ├── start_services_no_docker.sh
    ├── test_auth_flow.sh
    └── health-check.sh     # System health monitoring
```

## 🔗 Quick Links

- 📚 **[Drone Setup Guide](DRONE_SETUP.md)** - Complete CI/CD setup
- 🚀 **[Production Deployment](deploy-production.sh)** - Zero-downtime deployment
- 🧪 **[API Testing](test_auth_flow.sh)** - Authentication flow testing
- 📊 **[Performance Tests](tests/performance/)** - Load & stress testing
- 🐳 **[Docker Configs](docker-compose.prod.yml)** - Production containers