Add new frontend - fix 14
This commit is contained in:
531
.env.sample
531
.env.sample
@@ -1,531 +0,0 @@
|
|||||||
# ================================================================
|
|
||||||
# BAKERY FORECASTING PLATFORM - ENVIRONMENT CONFIGURATION
|
|
||||||
# Single source of truth - no duplication with docker-compose.yml
|
|
||||||
# ================================================================
|
|
||||||
|
|
||||||
# ================================================================
|
|
||||||
# ENVIRONMENT & BUILD SETTINGS
|
|
||||||
# ================================================================
|
|
||||||
|
|
||||||
# Environment: development, staging, production, testing
|
|
||||||
ENVIRONMENT=development
|
|
||||||
DEBUG=true
|
|
||||||
LOG_LEVEL=INFO
|
|
||||||
|
|
||||||
# Build configuration
|
|
||||||
BUILD_DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
|
||||||
VCS_REF=$(git rev-parse --short HEAD 2>/dev/null || echo "unknown")
|
|
||||||
IMAGE_TAG=latest
|
|
||||||
DOMAIN=localhost
|
|
||||||
|
|
||||||
# ================================================================
|
|
||||||
# SERVICE PORTS (used by Docker Compose)
|
|
||||||
# ================================================================
|
|
||||||
|
|
||||||
# Core services
|
|
||||||
GATEWAY_PORT=8000
|
|
||||||
AUTH_SERVICE_PORT=8001
|
|
||||||
TRAINING_SERVICE_PORT=8002
|
|
||||||
FORECASTING_SERVICE_PORT=8003
|
|
||||||
DATA_SERVICE_PORT=8004
|
|
||||||
TENANT_SERVICE_PORT=8005
|
|
||||||
NOTIFICATION_SERVICE_PORT=8006
|
|
||||||
|
|
||||||
# Frontend
|
|
||||||
DASHBOARD_PORT=3000
|
|
||||||
MARKETING_PORT=3001
|
|
||||||
|
|
||||||
# Infrastructure
|
|
||||||
REDIS_PORT=6379
|
|
||||||
RABBITMQ_PORT=5672
|
|
||||||
RABBITMQ_MANAGEMENT_PORT=15672
|
|
||||||
|
|
||||||
# Monitoring
|
|
||||||
PROMETHEUS_PORT=9090
|
|
||||||
GRAFANA_PORT=3002
|
|
||||||
|
|
||||||
# Development tools
|
|
||||||
PGADMIN_PORT=5050
|
|
||||||
REDIS_COMMANDER_PORT=8081
|
|
||||||
|
|
||||||
# ================================================================
|
|
||||||
# CORE SERVICE SETTINGS (used by applications)
|
|
||||||
# ================================================================
|
|
||||||
|
|
||||||
# Application metadata
|
|
||||||
SERVICE_VERSION=1.0.0
|
|
||||||
TIMEZONE=Europe/Madrid
|
|
||||||
LOCALE=es_ES.UTF-8
|
|
||||||
CURRENCY=EUR
|
|
||||||
|
|
||||||
# ================================================================
|
|
||||||
# DATABASE CONFIGURATION
|
|
||||||
# ================================================================
|
|
||||||
|
|
||||||
# PostgreSQL common settings
|
|
||||||
POSTGRES_INITDB_ARGS=--encoding=UTF-8 --lc-collate=es_ES.UTF-8 --lc-ctype=es_ES.UTF-8
|
|
||||||
|
|
||||||
# Auth Database
|
|
||||||
AUTH_DB_NAME=auth_db
|
|
||||||
AUTH_DB_USER=auth_user
|
|
||||||
AUTH_DB_PASSWORD=auth_pass123
|
|
||||||
AUTH_DATABASE_URL=postgresql+asyncpg://auth_user:auth_pass123@auth-db:5432/auth_db
|
|
||||||
|
|
||||||
# Training Database
|
|
||||||
TRAINING_DB_NAME=training_db
|
|
||||||
TRAINING_DB_USER=training_user
|
|
||||||
TRAINING_DB_PASSWORD=training_pass123
|
|
||||||
TRAINING_DATABASE_URL=postgresql+asyncpg://training_user:training_pass123@training-db:5432/training_db
|
|
||||||
|
|
||||||
# Forecasting Database
|
|
||||||
FORECASTING_DB_NAME=forecasting_db
|
|
||||||
FORECASTING_DB_USER=forecasting_user
|
|
||||||
FORECASTING_DB_PASSWORD=forecasting_pass123
|
|
||||||
FORECASTING_DATABASE_URL=postgresql+asyncpg://forecasting_user:forecasting_pass123@forecasting-db:5432/forecasting_db
|
|
||||||
|
|
||||||
# Data Database
|
|
||||||
DATA_DB_NAME=data_db
|
|
||||||
DATA_DB_USER=data_user
|
|
||||||
DATA_DB_PASSWORD=data_pass123
|
|
||||||
DATA_DATABASE_URL=postgresql+asyncpg://data_user:data_pass123@data-db:5432/data_db
|
|
||||||
|
|
||||||
# Tenant Database
|
|
||||||
TENANT_DB_NAME=tenant_db
|
|
||||||
TENANT_DB_USER=tenant_user
|
|
||||||
TENANT_DB_PASSWORD=tenant_pass123
|
|
||||||
TENANT_DATABASE_URL=postgresql+asyncpg://tenant_user:tenant_pass123@tenant-db:5432/tenant_db
|
|
||||||
|
|
||||||
# Notification Database
|
|
||||||
NOTIFICATION_DB_NAME=notification_db
|
|
||||||
NOTIFICATION_DB_USER=notification_user
|
|
||||||
NOTIFICATION_DB_PASSWORD=notification_pass123
|
|
||||||
NOTIFICATION_DATABASE_URL=postgresql+asyncpg://notification_user:notification_pass123@notification-db:5432/notification_db
|
|
||||||
|
|
||||||
# ================================================================
|
|
||||||
# REDIS CONFIGURATION
|
|
||||||
# ================================================================
|
|
||||||
|
|
||||||
REDIS_PASSWORD=redis_pass123
|
|
||||||
REDIS_MAX_MEMORY=512mb
|
|
||||||
REDIS_URL=redis://:redis_pass123@redis:6379
|
|
||||||
REDIS_MAX_CONNECTIONS=50
|
|
||||||
|
|
||||||
# Redis Database Assignments (used by standardized config)
|
|
||||||
# 0 - Auth Service
|
|
||||||
# 1 - Training Service
|
|
||||||
# 2 - Forecasting Service
|
|
||||||
# 3 - Data Service
|
|
||||||
# 4 - Tenant Service
|
|
||||||
# 5 - Notification Service
|
|
||||||
# 6 - Gateway Service
|
|
||||||
|
|
||||||
# ================================================================
|
|
||||||
# RABBITMQ CONFIGURATION
|
|
||||||
# ================================================================
|
|
||||||
|
|
||||||
RABBITMQ_USER=bakery
|
|
||||||
RABBITMQ_PASSWORD=forecast123
|
|
||||||
RABBITMQ_VHOST=/
|
|
||||||
RABBITMQ_ERLANG_COOKIE=bakery-secret-cookie-change-in-production
|
|
||||||
RABBITMQ_URL=amqp://bakery:forecast123@rabbitmq:5672/
|
|
||||||
RABBITMQ_EXCHANGE=bakery_events
|
|
||||||
RABBITMQ_QUEUE_PREFIX=bakery
|
|
||||||
|
|
||||||
# ================================================================
|
|
||||||
# AUTHENTICATION & SECURITY
|
|
||||||
# ================================================================
|
|
||||||
|
|
||||||
# JWT Configuration (CHANGE IN PRODUCTION!)
|
|
||||||
JWT_SECRET_KEY=your-super-secret-jwt-key-change-in-production-min-32-characters-long
|
|
||||||
JWT_ALGORITHM=HS256
|
|
||||||
JWT_ACCESS_TOKEN_EXPIRE_MINUTES=30
|
|
||||||
JWT_REFRESH_TOKEN_EXPIRE_DAYS=7
|
|
||||||
|
|
||||||
# Service-to-Service Authentication
|
|
||||||
SERVICE_API_KEY=service-api-key-change-in-production
|
|
||||||
ENABLE_SERVICE_AUTH=false
|
|
||||||
|
|
||||||
# Password Requirements
|
|
||||||
PASSWORD_MIN_LENGTH=8
|
|
||||||
PASSWORD_REQUIRE_UPPERCASE=true
|
|
||||||
PASSWORD_REQUIRE_LOWERCASE=true
|
|
||||||
PASSWORD_REQUIRE_NUMBERS=true
|
|
||||||
PASSWORD_REQUIRE_SYMBOLS=false
|
|
||||||
|
|
||||||
# Security Settings
|
|
||||||
BCRYPT_ROUNDS=12
|
|
||||||
MAX_LOGIN_ATTEMPTS=5
|
|
||||||
LOCKOUT_DURATION_MINUTES=30
|
|
||||||
|
|
||||||
# ================================================================
|
|
||||||
# CORS & API CONFIGURATION
|
|
||||||
# ================================================================
|
|
||||||
|
|
||||||
CORS_ORIGINS=http://localhost:3000,http://localhost:3001,http://127.0.0.1:3000,https://panaderia.vercel.app
|
|
||||||
CORS_ALLOW_CREDENTIALS=true
|
|
||||||
|
|
||||||
# Rate Limiting
|
|
||||||
RATE_LIMIT_ENABLED=true
|
|
||||||
RATE_LIMIT_REQUESTS=100
|
|
||||||
RATE_LIMIT_WINDOW=60
|
|
||||||
RATE_LIMIT_BURST=10
|
|
||||||
|
|
||||||
# API Documentation
|
|
||||||
API_DOCS_ENABLED=true
|
|
||||||
|
|
||||||
# ================================================================
|
|
||||||
# SERVICE DISCOVERY URLS (used by standardized config)
|
|
||||||
# ================================================================
|
|
||||||
|
|
||||||
GATEWAY_URL=http://gateway:8000
|
|
||||||
AUTH_SERVICE_URL=http://auth-service:8000
|
|
||||||
TENANT_SERVICE_URL=http://tenant-service:8000
|
|
||||||
TRAINING_SERVICE_URL=http://training-service:8000
|
|
||||||
FORECASTING_SERVICE_URL=http://forecasting-service:8000
|
|
||||||
DATA_SERVICE_URL=http://data-service:8000
|
|
||||||
NOTIFICATION_SERVICE_URL=http://notification-service:8000
|
|
||||||
|
|
||||||
# HTTP Client Settings
|
|
||||||
HTTP_TIMEOUT=30
|
|
||||||
HTTP_RETRIES=3
|
|
||||||
HTTP_RETRY_DELAY=1.0
|
|
||||||
|
|
||||||
# ================================================================
|
|
||||||
# EXTERNAL APIS
|
|
||||||
# ================================================================
|
|
||||||
|
|
||||||
# Spanish Weather Service (AEMET)
|
|
||||||
AEMET_API_KEY=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1YWxmYXJvQGdtYWlsLmNvbSIsImp0aSI6ImRjZWVmNTEwLTdmYzEtNGMxNy1hODZkLWQ4NzdlZDc5ZDllNyIsImlzcyI6IkFFTUVUIiwiaWF0IjoxNzUyODMwMDg3LCJ1c2VySWQiOiJkY2VlZjUxMC03ZmMxLTRjMTctYTg2ZC1kODc3ZWQ3OWQ5ZTciLCJyb2xlIjoiIn0.C047gaiEhWhH4ItDgkHSwg8HzKTzw87TOPRTRf8j-2w
|
|
||||||
AEMET_BASE_URL=https://opendata.aemet.es/opendata
|
|
||||||
AEMET_TIMEOUT=30
|
|
||||||
AEMET_RETRY_ATTEMPTS=3
|
|
||||||
|
|
||||||
# Madrid Open Data Platform
|
|
||||||
MADRID_OPENDATA_API_KEY=your-madrid-opendata-key-here
|
|
||||||
MADRID_OPENDATA_BASE_URL=https://datos.madrid.es
|
|
||||||
MADRID_OPENDATA_TIMEOUT=30
|
|
||||||
|
|
||||||
# ================================================================
|
|
||||||
# EMAIL CONFIGURATION
|
|
||||||
# ================================================================
|
|
||||||
|
|
||||||
SMTP_HOST=smtp.gmail.com
|
|
||||||
SMTP_PORT=587
|
|
||||||
SMTP_USER=your-email@gmail.com
|
|
||||||
SMTP_PASSWORD=your-app-specific-password
|
|
||||||
SMTP_TLS=true
|
|
||||||
SMTP_SSL=false
|
|
||||||
DEFAULT_FROM_EMAIL=noreply@bakeryforecast.es
|
|
||||||
DEFAULT_FROM_NAME=Bakery Forecast
|
|
||||||
|
|
||||||
# ================================================================
|
|
||||||
# WHATSAPP/TWILIO CONFIGURATION
|
|
||||||
# ================================================================
|
|
||||||
|
|
||||||
WHATSAPP_API_KEY=your-whatsapp-api-key-here
|
|
||||||
WHATSAPP_BASE_URL=https://api.twilio.com
|
|
||||||
WHATSAPP_FROM_NUMBER=whatsapp:+14155238886
|
|
||||||
|
|
||||||
# ================================================================
|
|
||||||
# ML & AI CONFIGURATION
|
|
||||||
# ================================================================
|
|
||||||
|
|
||||||
# Model Storage
|
|
||||||
MODEL_STORAGE_PATH=/app/models
|
|
||||||
MODEL_STORAGE_BACKEND=local
|
|
||||||
MODEL_BACKUP_ENABLED=true
|
|
||||||
MODEL_VERSIONING_ENABLED=true
|
|
||||||
|
|
||||||
# Training Configuration
|
|
||||||
MAX_TRAINING_TIME_MINUTES=30
|
|
||||||
MAX_CONCURRENT_TRAINING_JOBS=3
|
|
||||||
MIN_TRAINING_DATA_DAYS=30
|
|
||||||
TRAINING_BATCH_SIZE=1000
|
|
||||||
|
|
||||||
# Resource Limits (used by Docker Compose)
|
|
||||||
TRAINING_MEMORY_LIMIT=2G
|
|
||||||
TRAINING_CPU_LIMIT=1.5
|
|
||||||
|
|
||||||
# Prophet Configuration
|
|
||||||
PROPHET_SEASONALITY_MODE=additive
|
|
||||||
PROPHET_CHANGEPOINT_PRIOR_SCALE=0.05
|
|
||||||
PROPHET_SEASONALITY_PRIOR_SCALE=10.0
|
|
||||||
PROPHET_HOLIDAYS_PRIOR_SCALE=10.0
|
|
||||||
|
|
||||||
# Prediction Caching
|
|
||||||
PREDICTION_CACHE_TTL_HOURS=6
|
|
||||||
WEATHER_CACHE_TTL_HOURS=1
|
|
||||||
TRAFFIC_CACHE_TTL_HOURS=1
|
|
||||||
|
|
||||||
# ================================================================
|
|
||||||
# BUSINESS CONFIGURATION
|
|
||||||
# ================================================================
|
|
||||||
|
|
||||||
# Forecasting Limits
|
|
||||||
MAX_FORECAST_DAYS=30
|
|
||||||
MIN_HISTORICAL_DAYS=60
|
|
||||||
PREDICTION_CONFIDENCE_THRESHOLD=0.8
|
|
||||||
|
|
||||||
# Spanish Business Context
|
|
||||||
BUSINESS_HOUR_START=7
|
|
||||||
BUSINESS_HOUR_END=20
|
|
||||||
|
|
||||||
# Spanish Holidays & Seasonal Adjustments
|
|
||||||
ENABLE_SPANISH_HOLIDAYS=true
|
|
||||||
ENABLE_MADRID_HOLIDAYS=true
|
|
||||||
SCHOOL_CALENDAR_ENABLED=true
|
|
||||||
|
|
||||||
# Weather Impact Modeling
|
|
||||||
WEATHER_IMPACT_ENABLED=true
|
|
||||||
TEMPERATURE_THRESHOLD_COLD=10.0
|
|
||||||
TEMPERATURE_THRESHOLD_HOT=30.0
|
|
||||||
RAIN_IMPACT_FACTOR=0.7
|
|
||||||
|
|
||||||
# Business Adjustments
|
|
||||||
WEEKEND_ADJUSTMENT_FACTOR=0.8
|
|
||||||
HOLIDAY_ADJUSTMENT_FACTOR=0.5
|
|
||||||
|
|
||||||
# ================================================================
|
|
||||||
# TENANT & SUBSCRIPTION CONFIGURATION
|
|
||||||
# ================================================================
|
|
||||||
|
|
||||||
# Default Settings
|
|
||||||
DEFAULT_PLAN=basic
|
|
||||||
TRIAL_PERIOD_DAYS=14
|
|
||||||
|
|
||||||
# Plan Limits
|
|
||||||
BASIC_PLAN_LOCATIONS=1
|
|
||||||
BASIC_PLAN_PREDICTIONS_PER_DAY=100
|
|
||||||
BASIC_PLAN_DATA_RETENTION_DAYS=90
|
|
||||||
|
|
||||||
PREMIUM_PLAN_LOCATIONS=5
|
|
||||||
PREMIUM_PLAN_PREDICTIONS_PER_DAY=1000
|
|
||||||
PREMIUM_PLAN_DATA_RETENTION_DAYS=365
|
|
||||||
|
|
||||||
ENTERPRISE_PLAN_LOCATIONS=50
|
|
||||||
ENTERPRISE_PLAN_PREDICTIONS_PER_DAY=10000
|
|
||||||
ENTERPRISE_PLAN_DATA_RETENTION_DAYS=1095
|
|
||||||
|
|
||||||
# Billing (disabled by default)
|
|
||||||
BILLING_ENABLED=false
|
|
||||||
BILLING_CURRENCY=EUR
|
|
||||||
BILLING_CYCLE_DAYS=30
|
|
||||||
SPANISH_TAX_RATE=0.21
|
|
||||||
|
|
||||||
# Resource Limits
|
|
||||||
MAX_API_CALLS_PER_MINUTE=100
|
|
||||||
MAX_STORAGE_MB=1024
|
|
||||||
MAX_CONCURRENT_REQUESTS=10
|
|
||||||
|
|
||||||
# ================================================================
|
|
||||||
# MONITORING & OBSERVABILITY
|
|
||||||
# ================================================================
|
|
||||||
|
|
||||||
# Logging Configuration
|
|
||||||
LOG_FORMAT=json
|
|
||||||
LOG_FILE_ENABLED=false
|
|
||||||
LOG_FILE_PATH=/app/logs
|
|
||||||
LOG_ROTATION_SIZE=100MB
|
|
||||||
LOG_RETENTION_DAYS=30
|
|
||||||
|
|
||||||
# Metrics & Monitoring
|
|
||||||
PROMETHEUS_ENABLED=true
|
|
||||||
PROMETHEUS_RETENTION=200h
|
|
||||||
|
|
||||||
# Health Checks
|
|
||||||
HEALTH_CHECK_TIMEOUT=30
|
|
||||||
HEALTH_CHECK_INTERVAL=30
|
|
||||||
|
|
||||||
# Grafana Configuration
|
|
||||||
GRAFANA_ADMIN_USER=admin
|
|
||||||
GRAFANA_ADMIN_PASSWORD=admin123
|
|
||||||
GRAFANA_SECRET_KEY=grafana-secret-key-change-in-production
|
|
||||||
GRAFANA_ROOT_URL=http://localhost:3002/
|
|
||||||
|
|
||||||
# ================================================================
|
|
||||||
# DATA RETENTION & CLEANUP
|
|
||||||
# ================================================================
|
|
||||||
|
|
||||||
DATA_RETENTION_DAYS=365
|
|
||||||
METRIC_RETENTION_DAYS=90
|
|
||||||
TEMP_FILE_CLEANUP_HOURS=24
|
|
||||||
|
|
||||||
# Service-specific Data Retention
|
|
||||||
AUTH_DATA_RETENTION_DAYS=365
|
|
||||||
RAW_DATA_RETENTION_DAYS=90
|
|
||||||
PROCESSED_DATA_RETENTION_DAYS=365
|
|
||||||
|
|
||||||
# ================================================================
|
|
||||||
# DEVELOPMENT & TESTING
|
|
||||||
# ================================================================
|
|
||||||
|
|
||||||
# Development Features
|
|
||||||
AUTO_RELOAD=false
|
|
||||||
PROFILING_ENABLED=false
|
|
||||||
MOCK_EXTERNAL_APIS=false
|
|
||||||
|
|
||||||
# Testing Configuration
|
|
||||||
TESTING=false
|
|
||||||
TEST_DATABASE_URL=postgresql+asyncpg://test_user:test_pass@test-db:5432/test_db
|
|
||||||
|
|
||||||
# Data Collection Intervals
|
|
||||||
WEATHER_COLLECTION_INTERVAL_HOURS=1
|
|
||||||
TRAFFIC_COLLECTION_INTERVAL_HOURS=1
|
|
||||||
EVENTS_COLLECTION_INTERVAL_HOURS=6
|
|
||||||
|
|
||||||
# Data Quality
|
|
||||||
DATA_VALIDATION_ENABLED=true
|
|
||||||
OUTLIER_DETECTION_ENABLED=true
|
|
||||||
DATA_COMPLETENESS_THRESHOLD=0.8
|
|
||||||
|
|
||||||
# Geolocation (Madrid, Spain)
|
|
||||||
DEFAULT_LATITUDE=40.4168
|
|
||||||
DEFAULT_LONGITUDE=-3.7038
|
|
||||||
LOCATION_RADIUS_KM=50.0
|
|
||||||
|
|
||||||
# ================================================================
|
|
||||||
# NOTIFICATION CONFIGURATION
|
|
||||||
# ================================================================
|
|
||||||
|
|
||||||
# Notification Types
|
|
||||||
ENABLE_EMAIL_NOTIFICATIONS=true
|
|
||||||
ENABLE_WHATSAPP_NOTIFICATIONS=true
|
|
||||||
ENABLE_PUSH_NOTIFICATIONS=false
|
|
||||||
|
|
||||||
# Notification Queuing
|
|
||||||
MAX_RETRY_ATTEMPTS=3
|
|
||||||
RETRY_DELAY_SECONDS=60
|
|
||||||
NOTIFICATION_BATCH_SIZE=100
|
|
||||||
|
|
||||||
# Rate Limiting
|
|
||||||
EMAIL_RATE_LIMIT_PER_HOUR=1000
|
|
||||||
WHATSAPP_RATE_LIMIT_PER_HOUR=100
|
|
||||||
|
|
||||||
# Localization
|
|
||||||
DEFAULT_LANGUAGE=es
|
|
||||||
DATE_FORMAT=%d/%m/%Y
|
|
||||||
TIME_FORMAT=%H:%M
|
|
||||||
|
|
||||||
# Templates
|
|
||||||
EMAIL_TEMPLATES_PATH=/app/templates/email
|
|
||||||
WHATSAPP_TEMPLATES_PATH=/app/templates/whatsapp
|
|
||||||
|
|
||||||
# Delivery & Analytics
|
|
||||||
IMMEDIATE_DELIVERY=true
|
|
||||||
SCHEDULED_DELIVERY_ENABLED=true
|
|
||||||
DELIVERY_TRACKING_ENABLED=true
|
|
||||||
OPEN_TRACKING_ENABLED=true
|
|
||||||
CLICK_TRACKING_ENABLED=true
|
|
||||||
|
|
||||||
# ================================================================
|
|
||||||
# FRONTEND CONFIGURATION
|
|
||||||
# ================================================================
|
|
||||||
|
|
||||||
# Frontend URLs (used by Docker Compose build args)
|
|
||||||
FRONTEND_API_URL=http://localhost:8000/api/v1
|
|
||||||
FRONTEND_WS_URL=ws://localhost:8000/ws
|
|
||||||
|
|
||||||
# ================================================================
|
|
||||||
# DEVELOPMENT TOOLS CONFIGURATION
|
|
||||||
# ================================================================
|
|
||||||
|
|
||||||
# pgAdmin
|
|
||||||
PGADMIN_EMAIL=admin@bakery.local
|
|
||||||
PGADMIN_PASSWORD=admin123
|
|
||||||
|
|
||||||
# Redis Commander
|
|
||||||
REDIS_COMMANDER_USER=admin
|
|
||||||
REDIS_COMMANDER_PASSWORD=admin123
|
|
||||||
|
|
||||||
# ================================================================
|
|
||||||
# COMPLIANCE & GDPR
|
|
||||||
# ================================================================
|
|
||||||
|
|
||||||
# GDPR Compliance
|
|
||||||
GDPR_COMPLIANCE_ENABLED=true
|
|
||||||
CONSENT_REQUIRED=true
|
|
||||||
DATA_EXPORT_ENABLED=true
|
|
||||||
DATA_DELETION_ENABLED=true
|
|
||||||
PRIVACY_POLICY_URL=/privacy
|
|
||||||
|
|
||||||
# Email Verification
|
|
||||||
EMAIL_VERIFICATION_REQUIRED=true
|
|
||||||
EMAIL_VERIFICATION_EXPIRE_HOURS=24
|
|
||||||
|
|
||||||
# Account Security
|
|
||||||
ACCOUNT_LOCKOUT_ENABLED=true
|
|
||||||
PASSWORD_HISTORY_COUNT=5
|
|
||||||
SESSION_TIMEOUT_MINUTES=60
|
|
||||||
CONCURRENT_SESSIONS_LIMIT=3
|
|
||||||
|
|
||||||
# ================================================================
|
|
||||||
# PERFORMANCE & OPTIMIZATION
|
|
||||||
# ================================================================
|
|
||||||
|
|
||||||
# Caching
|
|
||||||
REALTIME_FORECASTING_ENABLED=true
|
|
||||||
FORECAST_UPDATE_INTERVAL_HOURS=6
|
|
||||||
|
|
||||||
# Batch Processing
|
|
||||||
BATCH_PROCESSING_ENABLED=true
|
|
||||||
BATCH_SIZE=1000
|
|
||||||
PARALLEL_PROCESSING_WORKERS=4
|
|
||||||
FORECAST_BATCH_SIZE=100
|
|
||||||
|
|
||||||
# Circuit Breaker (Gateway)
|
|
||||||
CIRCUIT_BREAKER_ENABLED=true
|
|
||||||
CIRCUIT_BREAKER_FAILURE_THRESHOLD=5
|
|
||||||
CIRCUIT_BREAKER_RECOVERY_TIMEOUT=60
|
|
||||||
|
|
||||||
# Load Balancing (Gateway)
|
|
||||||
ENABLE_LOAD_BALANCING=true
|
|
||||||
LOAD_BALANCER_ALGORITHM=round_robin
|
|
||||||
|
|
||||||
# Request Limits
|
|
||||||
MAX_REQUEST_SIZE=10485760
|
|
||||||
REQUEST_TIMEOUT=30
|
|
||||||
|
|
||||||
# ================================================================
|
|
||||||
# BUSINESS INTELLIGENCE & ALERTS
|
|
||||||
# ================================================================
|
|
||||||
|
|
||||||
# Alert Thresholds
|
|
||||||
HIGH_DEMAND_THRESHOLD=1.5
|
|
||||||
LOW_DEMAND_THRESHOLD=0.5
|
|
||||||
STOCKOUT_RISK_THRESHOLD=0.9
|
|
||||||
|
|
||||||
# Model Validation
|
|
||||||
CROSS_VALIDATION_ENABLED=true
|
|
||||||
VALIDATION_SPLIT_RATIO=0.2
|
|
||||||
MIN_MODEL_ACCURACY=0.7
|
|
||||||
|
|
||||||
# Data Processing
|
|
||||||
DATA_PREPROCESSING_ENABLED=true
|
|
||||||
SEASONAL_DECOMPOSITION_ENABLED=true
|
|
||||||
|
|
||||||
# Distributed Training (Future scaling)
|
|
||||||
DISTRIBUTED_TRAINING_ENABLED=false
|
|
||||||
TRAINING_WORKER_COUNT=1
|
|
||||||
|
|
||||||
# Support & Contact
|
|
||||||
SUPPORT_EMAIL=soporte@bakeryforecast.es
|
|
||||||
INVOICE_LANGUAGE=es
|
|
||||||
|
|
||||||
# ================================================================
|
|
||||||
# NOTES FOR CONFIGURATION MANAGEMENT
|
|
||||||
# ================================================================
|
|
||||||
|
|
||||||
# This .env file is the SINGLE SOURCE OF TRUTH for all configuration.
|
|
||||||
# Docker Compose uses these variables via ${VARIABLE_NAME} substitution.
|
|
||||||
# Application services load these via env_file: .env in docker-compose.yml
|
|
||||||
# No duplication between .env and docker-compose.yml environment sections.
|
|
||||||
|
|
||||||
# To override for different environments:
|
|
||||||
# 1. Copy this file: cp .env .env.production
|
|
||||||
# 2. Modify values in .env.production
|
|
||||||
# 3. Use: docker-compose --env-file .env.production up -d
|
|
||||||
|
|
||||||
# For sensitive values in production:
|
|
||||||
# 1. Use Docker secrets or external secret management
|
|
||||||
# 2. Override via environment variables: REDIS_PASSWORD=secret docker-compose up
|
|
||||||
# 3. Use .env.local (gitignored) for local overrides
|
|
||||||
@@ -27,8 +27,6 @@ volumes:
|
|||||||
grafana_data:
|
grafana_data:
|
||||||
model_storage:
|
model_storage:
|
||||||
log_storage:
|
log_storage:
|
||||||
nominatim_db_data:
|
|
||||||
nominatim_data:
|
|
||||||
|
|
||||||
|
|
||||||
# ================================================================
|
# ================================================================
|
||||||
@@ -592,9 +590,9 @@ services:
|
|||||||
context: ./frontend
|
context: ./frontend
|
||||||
dockerfile: Dockerfile.${ENVIRONMENT}
|
dockerfile: Dockerfile.${ENVIRONMENT}
|
||||||
args:
|
args:
|
||||||
- REACT_APP_API_URL=${FRONTEND_API_URL}
|
- NEXT_PUBLIC_API_URL=${FRONTEND_API_URL}
|
||||||
- REACT_APP_WS_URL=${FRONTEND_WS_URL}
|
- NEXT_PUBLIC_WS_URL=${FRONTEND_WS_URL}
|
||||||
- REACT_APP_ENVIRONMENT=${ENVIRONMENT}
|
- NEXT_PUBLIC_ENVIRONMENT=${ENVIRONMENT}
|
||||||
image: bakery/dashboard:${IMAGE_TAG}
|
image: bakery/dashboard:${IMAGE_TAG}
|
||||||
container_name: bakery-dashboard
|
container_name: bakery-dashboard
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
|||||||
5
frontend/next-env.d.ts
vendored
5
frontend/next-env.d.ts
vendored
@@ -1,5 +0,0 @@
|
|||||||
/// <reference types="next" />
|
|
||||||
/// <reference types="next/image-types/global" />
|
|
||||||
|
|
||||||
// NOTE: This file should not be edited
|
|
||||||
// see https://nextjs.org/docs/basic-features/typescript for more information.
|
|
||||||
@@ -320,5 +320,5 @@ class ApiClient {
|
|||||||
|
|
||||||
// FIXED: Create default instance with correct base URL (removed /api suffix)
|
// FIXED: Create default instance with correct base URL (removed /api suffix)
|
||||||
export const apiClient = new ApiClient({
|
export const apiClient = new ApiClient({
|
||||||
baseURL: process.env.REACT_APP_API_URL || 'http://localhost:8000/api/v1'
|
baseURL: process.env.NEXT_PUBLIC_API_URL || 'http://localhost:8000/api/v1'
|
||||||
});
|
});
|
||||||
@@ -216,13 +216,13 @@ class WebSocketManager extends EventEmitter {
|
|||||||
private getWebSocketBaseUrl(): string {
|
private getWebSocketBaseUrl(): string {
|
||||||
if (typeof window !== 'undefined') { // Check if window is defined
|
if (typeof window !== 'undefined') { // Check if window is defined
|
||||||
const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';
|
const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';
|
||||||
const host = process.env.REACT_APP_WS_URL || window.location.host;
|
const host = process.env.NEXT_PUBLIC_WS_URL || window.location.host;
|
||||||
return `${protocol}//${host}/ws`;
|
return `${protocol}//${host}/ws`;
|
||||||
} else {
|
} else {
|
||||||
// Provide a fallback for server-side or non-browser environments
|
// Provide a fallback for server-side or non-browser environments
|
||||||
// You might want to get this from environment variables or a config file
|
// You might want to get this from environment variables or a config file
|
||||||
// depending on your setup.
|
// depending on your setup.
|
||||||
return process.env.REACT_APP_WS_URL || 'ws://localhost:3000/ws';
|
return process.env.NEXT_PUBLIC_WS_URL || 'ws://localhost:3000/ws';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user