Few fixes

This commit is contained in:
Urtzi Alfaro
2025-07-17 14:34:24 +02:00
parent 5bb3e93da4
commit cb80a93c4b
36 changed files with 1512 additions and 141 deletions

View File

@@ -0,0 +1,399 @@
# 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