400 lines
15 KiB
Markdown
400 lines
15 KiB
Markdown
|
|
# Complete Microservices Project Structure
|
||
|
|
|
||
|
|
## 📁 Project Root Structure
|
||
|
|
|
||
|
|
```
|
||
|
|
bakery-forecasting-platform/
|
||
|
|
├── README.md
|
||
|
|
├── docker-compose.yml # Development environment
|
||
|
|
├── docker-compose.prod.yml # Production environment
|
||
|
|
├── .env.example # Environment variables template
|
||
|
|
├── .gitignore # Git ignore file
|
||
|
|
├── docs/ # Documentation
|
||
|
|
│ ├── architecture/ # Architecture diagrams
|
||
|
|
│ ├── api/ # API documentation
|
||
|
|
│ └── deployment/ # Deployment guides
|
||
|
|
├── scripts/ # Utility scripts
|
||
|
|
│ ├── setup.sh # Development setup
|
||
|
|
│ ├── test.sh # Run all tests
|
||
|
|
│ └── deploy.sh # Deployment script
|
||
|
|
├── gateway/ # API Gateway Service
|
||
|
|
│ ├── Dockerfile
|
||
|
|
│ ├── requirements.txt
|
||
|
|
│ ├── app/
|
||
|
|
│ │ ├── __init__.py
|
||
|
|
│ │ ├── main.py
|
||
|
|
│ │ ├── core/
|
||
|
|
│ │ │ ├── __init__.py
|
||
|
|
│ │ │ ├── config.py
|
||
|
|
│ │ │ ├── auth.py
|
||
|
|
│ │ │ └── service_discovery.py
|
||
|
|
│ │ ├── middleware/
|
||
|
|
│ │ │ ├── __init__.py
|
||
|
|
│ │ │ ├── cors.py
|
||
|
|
│ │ │ ├── auth.py
|
||
|
|
│ │ │ └── logging.py
|
||
|
|
│ │ └── routes/
|
||
|
|
│ │ ├── __init__.py
|
||
|
|
│ │ ├── auth.py
|
||
|
|
│ │ ├── training.py
|
||
|
|
│ │ ├── forecasting.py
|
||
|
|
│ │ └── data.py
|
||
|
|
│ └── tests/
|
||
|
|
│ ├── __init__.py
|
||
|
|
│ ├── test_gateway.py
|
||
|
|
│ └── test_routes.py
|
||
|
|
├── services/ # Individual Microservices
|
||
|
|
│ ├── auth/ # Authentication Service
|
||
|
|
│ │ ├── Dockerfile
|
||
|
|
│ │ ├── requirements.txt
|
||
|
|
│ │ ├── app/
|
||
|
|
│ │ │ ├── __init__.py
|
||
|
|
│ │ │ ├── main.py
|
||
|
|
│ │ │ ├── core/
|
||
|
|
│ │ │ │ ├── __init__.py
|
||
|
|
│ │ │ │ ├── config.py
|
||
|
|
│ │ │ │ ├── database.py
|
||
|
|
│ │ │ │ ├── security.py
|
||
|
|
│ │ │ │ └── auth.py
|
||
|
|
│ │ │ ├── models/
|
||
|
|
│ │ │ │ ├── __init__.py
|
||
|
|
│ │ │ │ ├── users.py
|
||
|
|
│ │ │ │ └── tokens.py
|
||
|
|
│ │ │ ├── schemas/
|
||
|
|
│ │ │ │ ├── __init__.py
|
||
|
|
│ │ │ │ ├── users.py
|
||
|
|
│ │ │ │ └── auth.py
|
||
|
|
│ │ │ ├── services/
|
||
|
|
│ │ │ │ ├── __init__.py
|
||
|
|
│ │ │ │ ├── auth_service.py
|
||
|
|
│ │ │ │ └── user_service.py
|
||
|
|
│ │ │ └── api/
|
||
|
|
│ │ │ ├── __init__.py
|
||
|
|
│ │ │ ├── auth.py
|
||
|
|
│ │ │ └── users.py
|
||
|
|
│ │ ├── migrations/
|
||
|
|
│ │ │ └── versions/
|
||
|
|
│ │ └── tests/
|
||
|
|
│ │ ├── __init__.py
|
||
|
|
│ │ ├── conftest.py
|
||
|
|
│ │ ├── test_auth.py
|
||
|
|
│ │ └── test_users.py
|
||
|
|
│ ├── training/ # ML Training Service
|
||
|
|
│ │ ├── Dockerfile
|
||
|
|
│ │ ├── requirements.txt
|
||
|
|
│ │ ├── app/
|
||
|
|
│ │ │ ├── __init__.py
|
||
|
|
│ │ │ ├── main.py
|
||
|
|
│ │ │ ├── core/
|
||
|
|
│ │ │ │ ├── __init__.py
|
||
|
|
│ │ │ │ ├── config.py
|
||
|
|
│ │ │ │ ├── database.py
|
||
|
|
│ │ │ │ └── auth.py
|
||
|
|
│ │ │ ├── models/
|
||
|
|
│ │ │ │ ├── __init__.py
|
||
|
|
│ │ │ │ ├── training.py
|
||
|
|
│ │ │ │ └── models.py
|
||
|
|
│ │ │ ├── schemas/
|
||
|
|
│ │ │ │ ├── __init__.py
|
||
|
|
│ │ │ │ ├── training.py
|
||
|
|
│ │ │ │ └── models.py
|
||
|
|
│ │ │ ├── services/
|
||
|
|
│ │ │ │ ├── __init__.py
|
||
|
|
│ │ │ │ ├── training_service.py
|
||
|
|
│ │ │ │ ├── model_service.py
|
||
|
|
│ │ │ │ └── messaging.py
|
||
|
|
│ │ │ ├── ml/
|
||
|
|
│ │ │ │ ├── __init__.py
|
||
|
|
│ │ │ │ ├── trainer.py
|
||
|
|
│ │ │ │ ├── prophet_manager.py
|
||
|
|
│ │ │ │ └── data_processor.py
|
||
|
|
│ │ │ └── api/
|
||
|
|
│ │ │ ├── __init__.py
|
||
|
|
│ │ │ ├── training.py
|
||
|
|
│ │ │ └── models.py
|
||
|
|
│ │ ├── migrations/
|
||
|
|
│ │ │ └── versions/
|
||
|
|
│ │ └── tests/
|
||
|
|
│ │ ├── __init__.py
|
||
|
|
│ │ ├── conftest.py
|
||
|
|
│ │ ├── test_training.py
|
||
|
|
│ │ └── test_ml.py
|
||
|
|
│ ├── forecasting/ # Forecasting Service
|
||
|
|
│ │ ├── Dockerfile
|
||
|
|
│ │ ├── requirements.txt
|
||
|
|
│ │ ├── app/
|
||
|
|
│ │ │ ├── __init__.py
|
||
|
|
│ │ │ ├── main.py
|
||
|
|
│ │ │ ├── core/
|
||
|
|
│ │ │ │ ├── __init__.py
|
||
|
|
│ │ │ │ ├── config.py
|
||
|
|
│ │ │ │ ├── database.py
|
||
|
|
│ │ │ │ └── auth.py
|
||
|
|
│ │ │ ├── models/
|
||
|
|
│ │ │ │ ├── __init__.py
|
||
|
|
│ │ │ │ ├── forecasts.py
|
||
|
|
│ │ │ │ └── predictions.py
|
||
|
|
│ │ │ ├── schemas/
|
||
|
|
│ │ │ │ ├── __init__.py
|
||
|
|
│ │ │ │ └── forecasts.py
|
||
|
|
│ │ │ ├── services/
|
||
|
|
│ │ │ │ ├── __init__.py
|
||
|
|
│ │ │ │ ├── forecasting_service.py
|
||
|
|
│ │ │ │ ├── prediction_service.py
|
||
|
|
│ │ │ │ └── messaging.py
|
||
|
|
│ │ │ ├── ml/
|
||
|
|
│ │ │ │ ├── __init__.py
|
||
|
|
│ │ │ │ ├── predictor.py
|
||
|
|
│ │ │ │ └── model_loader.py
|
||
|
|
│ │ │ └── api/
|
||
|
|
│ │ │ ├── __init__.py
|
||
|
|
│ │ │ ├── forecasts.py
|
||
|
|
│ │ │ └── predictions.py
|
||
|
|
│ │ ├── migrations/
|
||
|
|
│ │ │ └── versions/
|
||
|
|
│ │ └── tests/
|
||
|
|
│ │ ├── __init__.py
|
||
|
|
│ │ ├── conftest.py
|
||
|
|
│ │ ├── test_forecasting.py
|
||
|
|
│ │ └── test_predictions.py
|
||
|
|
│ ├── data/ # Data Service (External APIs)
|
||
|
|
│ │ ├── Dockerfile
|
||
|
|
│ │ ├── requirements.txt
|
||
|
|
│ │ ├── app/
|
||
|
|
│ │ │ ├── __init__.py
|
||
|
|
│ │ │ ├── main.py
|
||
|
|
│ │ │ ├── core/
|
||
|
|
│ │ │ │ ├── __init__.py
|
||
|
|
│ │ │ │ ├── config.py
|
||
|
|
│ │ │ │ ├── database.py
|
||
|
|
│ │ │ │ └── auth.py
|
||
|
|
│ │ │ ├── models/
|
||
|
|
│ │ │ │ ├── __init__.py
|
||
|
|
│ │ │ │ ├── sales.py
|
||
|
|
│ │ │ │ ├── weather.py
|
||
|
|
│ │ │ │ └── traffic.py
|
||
|
|
│ │ │ ├── schemas/
|
||
|
|
│ │ │ │ ├── __init__.py
|
||
|
|
│ │ │ │ ├── sales.py
|
||
|
|
│ │ │ │ └── external.py
|
||
|
|
│ │ │ ├── services/
|
||
|
|
│ │ │ │ ├── __init__.py
|
||
|
|
│ │ │ │ ├── sales_service.py
|
||
|
|
│ │ │ │ ├── weather_service.py
|
||
|
|
│ │ │ │ ├── traffic_service.py
|
||
|
|
│ │ │ │ └── data_import_service.py
|
||
|
|
│ │ │ ├── external/
|
||
|
|
│ │ │ │ ├── __init__.py
|
||
|
|
│ │ │ │ ├── aemet.py
|
||
|
|
│ │ │ │ ├── madrid_opendata.py
|
||
|
|
│ │ │ │ └── base_client.py
|
||
|
|
│ │ │ └── api/
|
||
|
|
│ │ │ ├── __init__.py
|
||
|
|
│ │ │ ├── sales.py
|
||
|
|
│ │ │ ├── weather.py
|
||
|
|
│ │ │ └── traffic.py
|
||
|
|
│ │ ├── migrations/
|
||
|
|
│ │ │ └── versions/
|
||
|
|
│ │ └── tests/
|
||
|
|
│ │ ├── __init__.py
|
||
|
|
│ │ ├── conftest.py
|
||
|
|
│ │ ├── test_data.py
|
||
|
|
│ │ └── test_external.py
|
||
|
|
│ ├── notification/ # Notification Service
|
||
|
|
│ │ ├── Dockerfile
|
||
|
|
│ │ ├── requirements.txt
|
||
|
|
│ │ ├── app/
|
||
|
|
│ │ │ ├── __init__.py
|
||
|
|
│ │ │ ├── main.py
|
||
|
|
│ │ │ ├── core/
|
||
|
|
│ │ │ │ ├── __init__.py
|
||
|
|
│ │ │ │ ├── config.py
|
||
|
|
│ │ │ │ ├── database.py
|
||
|
|
│ │ │ │ └── auth.py
|
||
|
|
│ │ │ ├── models/
|
||
|
|
│ │ │ │ ├── __init__.py
|
||
|
|
│ │ │ │ ├── notifications.py
|
||
|
|
│ │ │ │ └── templates.py
|
||
|
|
│ │ │ ├── schemas/
|
||
|
|
│ │ │ │ ├── __init__.py
|
||
|
|
│ │ │ │ └── notifications.py
|
||
|
|
│ │ │ ├── services/
|
||
|
|
│ │ │ │ ├── __init__.py
|
||
|
|
│ │ │ │ ├── notification_service.py
|
||
|
|
│ │ │ │ ├── email_service.py
|
||
|
|
│ │ │ │ ├── whatsapp_service.py
|
||
|
|
│ │ │ │ └── messaging.py
|
||
|
|
│ │ │ └── api/
|
||
|
|
│ │ │ ├── __init__.py
|
||
|
|
│ │ │ └── notifications.py
|
||
|
|
│ │ ├── migrations/
|
||
|
|
│ │ │ └── versions/
|
||
|
|
│ │ └── tests/
|
||
|
|
│ │ ├── __init__.py
|
||
|
|
│ │ ├── conftest.py
|
||
|
|
│ │ └── test_notifications.py
|
||
|
|
│ └── tenant/ # Tenant Management Service
|
||
|
|
│ ├── Dockerfile
|
||
|
|
│ ├── requirements.txt
|
||
|
|
│ ├── app/
|
||
|
|
│ │ ├── __init__.py
|
||
|
|
│ │ ├── main.py
|
||
|
|
│ │ ├── core/
|
||
|
|
│ │ │ ├── __init__.py
|
||
|
|
│ │ │ ├── config.py
|
||
|
|
│ │ │ ├── database.py
|
||
|
|
│ │ │ └── auth.py
|
||
|
|
│ │ ├── models/
|
||
|
|
│ │ │ ├── __init__.py
|
||
|
|
│ │ │ ├── tenants.py
|
||
|
|
│ │ │ └── subscriptions.py
|
||
|
|
│ │ ├── schemas/
|
||
|
|
│ │ │ ├── __init__.py
|
||
|
|
│ │ │ └── tenants.py
|
||
|
|
│ │ ├── services/
|
||
|
|
│ │ │ ├── __init__.py
|
||
|
|
│ │ │ ├── tenant_service.py
|
||
|
|
│ │ │ ├── subscription_service.py
|
||
|
|
│ │ │ └── messaging.py
|
||
|
|
│ │ └── api/
|
||
|
|
│ │ ├── __init__.py
|
||
|
|
│ │ └── tenants.py
|
||
|
|
│ ├── migrations/
|
||
|
|
│ │ └── versions/
|
||
|
|
│ └── tests/
|
||
|
|
│ ├── __init__.py
|
||
|
|
│ ├── conftest.py
|
||
|
|
│ └── test_tenants.py
|
||
|
|
├── shared/ # Shared Libraries
|
||
|
|
│ ├── __init__.py
|
||
|
|
│ ├── auth/
|
||
|
|
│ │ ├── __init__.py
|
||
|
|
│ │ ├── jwt_handler.py
|
||
|
|
│ │ └── decorators.py
|
||
|
|
│ ├── database/
|
||
|
|
│ │ ├── __init__.py
|
||
|
|
│ │ ├── base.py
|
||
|
|
│ │ └── utils.py
|
||
|
|
│ ├── messaging/
|
||
|
|
│ │ ├── __init__.py
|
||
|
|
│ │ ├── rabbitmq.py
|
||
|
|
│ │ └── events.py
|
||
|
|
│ ├── monitoring/
|
||
|
|
│ │ ├── __init__.py
|
||
|
|
│ │ ├── logging.py
|
||
|
|
│ │ └── metrics.py
|
||
|
|
│ └── utils/
|
||
|
|
│ ├── __init__.py
|
||
|
|
│ ├── datetime_utils.py
|
||
|
|
│ └── validation.py
|
||
|
|
├── frontend/ # Frontend Applications
|
||
|
|
│ ├── dashboard/ # React Dashboard
|
||
|
|
│ │ ├── package.json
|
||
|
|
│ │ ├── package-lock.json
|
||
|
|
│ │ ├── Dockerfile
|
||
|
|
│ │ ├── public/
|
||
|
|
│ │ ├── src/
|
||
|
|
│ │ │ ├── components/
|
||
|
|
│ │ │ ├── pages/
|
||
|
|
│ │ │ ├── services/
|
||
|
|
│ │ │ ├── hooks/
|
||
|
|
│ │ │ └── utils/
|
||
|
|
│ │ └── tests/
|
||
|
|
│ └── marketing/ # Next.js Marketing Site
|
||
|
|
│ ├── package.json
|
||
|
|
│ ├── package-lock.json
|
||
|
|
│ ├── Dockerfile
|
||
|
|
│ ├── public/
|
||
|
|
│ ├── src/
|
||
|
|
│ │ ├── components/
|
||
|
|
│ │ ├── pages/
|
||
|
|
│ │ ├── styles/
|
||
|
|
│ │ └── utils/
|
||
|
|
│ └── tests/
|
||
|
|
├── infrastructure/ # Infrastructure as Code
|
||
|
|
│ ├── docker/
|
||
|
|
│ │ ├── postgres/
|
||
|
|
│ │ ├── redis/
|
||
|
|
│ │ └── rabbitmq/
|
||
|
|
│ ├── kubernetes/
|
||
|
|
│ │ ├── base/
|
||
|
|
│ │ ├── dev/
|
||
|
|
│ │ ├── staging/
|
||
|
|
│ │ └── production/
|
||
|
|
│ ├── terraform/
|
||
|
|
│ │ ├── modules/
|
||
|
|
│ │ ├── environments/
|
||
|
|
│ │ └── global/
|
||
|
|
│ └── monitoring/
|
||
|
|
│ ├── prometheus/
|
||
|
|
│ ├── grafana/
|
||
|
|
│ └── elk/
|
||
|
|
├── deployment/ # Deployment Configurations
|
||
|
|
│ ├── docker-compose.dev.yml
|
||
|
|
│ ├── docker-compose.staging.yml
|
||
|
|
│ ├── docker-compose.prod.yml
|
||
|
|
│ ├── nginx/
|
||
|
|
│ │ ├── nginx.conf
|
||
|
|
│ │ └── ssl/
|
||
|
|
│ └── ssl/
|
||
|
|
└── tests/ # Integration Tests
|
||
|
|
├── __init__.py
|
||
|
|
├── integration/
|
||
|
|
│ ├── __init__.py
|
||
|
|
│ ├── test_auth_flow.py
|
||
|
|
│ ├── test_training_flow.py
|
||
|
|
│ └── test_forecasting_flow.py
|
||
|
|
├── e2e/
|
||
|
|
│ ├── __init__.py
|
||
|
|
│ └── test_complete_flow.py
|
||
|
|
└── performance/
|
||
|
|
├── __init__.py
|
||
|
|
└── test_load.py
|
||
|
|
```
|
||
|
|
|
||
|
|
## 🔧 Key Changes from Monolithic Structure
|
||
|
|
|
||
|
|
### 1. **Service Separation**
|
||
|
|
- Each service has its own database
|
||
|
|
- Independent deployment and scaling
|
||
|
|
- Service-specific dependencies
|
||
|
|
|
||
|
|
### 2. **API Gateway**
|
||
|
|
- Single entry point for all clients
|
||
|
|
- Request routing to appropriate services
|
||
|
|
- Cross-cutting concerns (auth, logging, rate limiting)
|
||
|
|
|
||
|
|
### 3. **Shared Libraries**
|
||
|
|
- Common functionality across services
|
||
|
|
- Consistent authentication and database patterns
|
||
|
|
- Reusable utilities
|
||
|
|
|
||
|
|
### 4. **Infrastructure as Code**
|
||
|
|
- Kubernetes manifests for orchestration
|
||
|
|
- Terraform for cloud infrastructure
|
||
|
|
- Docker configurations for all services
|
||
|
|
|
||
|
|
### 5. **Independent Testing**
|
||
|
|
- Each service has its own test suite
|
||
|
|
- Integration tests for service communication
|
||
|
|
- End-to-end tests for complete workflows
|
||
|
|
|
||
|
|
## 📋 Migration Steps
|
||
|
|
|
||
|
|
1. **Create New Project Structure**: Set up all directories and base files
|
||
|
|
2. **Implement Shared Libraries**: Common functionality first
|
||
|
|
3. **Build Services One by One**: Start with auth, then data, then training
|
||
|
|
4. **Set Up API Gateway**: Route requests to services
|
||
|
|
5. **Configure Infrastructure**: Docker, Kubernetes, monitoring
|
||
|
|
6. **Migrate Frontend**: Update API calls to use gateway
|
||
|
|
7. **Set Up CI/CD**: Automated testing and deployment
|
||
|
|
|
||
|
|
## 🚀 Benefits of This Structure
|
||
|
|
|
||
|
|
- **Independent Development**: Teams can work on different services
|
||
|
|
- **Independent Deployment**: Deploy services without affecting others
|
||
|
|
- **Technology Flexibility**: Each service can use different technologies
|
||
|
|
- **Scalability**: Scale services independently based on load
|
||
|
|
- **Fault Isolation**: Service failures don't cascade
|
||
|
|
- **Easier Testing**: Unit tests per service, integration tests across services
|