Files
bakery-ia/microservices_project_structure.md
Urtzi Alfaro cb80a93c4b Few fixes
2025-07-17 14:34:24 +02:00

15 KiB

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