feat: production deployment - full update with providers, admin, glossaries, pricing, tests

Major changes across backend, frontend, infrastructure:
- Provider system with model selection (Google, DeepL, OpenAI, Ollama, Google Cloud)
- Admin panel: user management, pricing, settings
- Glossary system with CSV import/export
- Subscription and tier quota management
- Security hardening (rate limiting, API key auth, path traversal fixes)
- Docker compose for dev, prod, and IONOS deployment
- Alembic migrations for new tables
- Frontend: dashboard, pricing page, landing page, i18n (en/fr)
- Test suite and verification scripts

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Sepehr Ramezani
2026-04-25 15:01:47 +02:00
parent 2ba4fedfc8
commit 26bd096a06
1178 changed files with 136435 additions and 3047 deletions

View File

@@ -35,7 +35,7 @@ class ProvidersConfig:
Loads settings from environment variables with sensible defaults.
"""
# Google Translate (no API key required via deep_translator)
# Google Translate (no API key required via deep_translator — accès web non officiel)
GOOGLE_ENABLED: bool = (
os.getenv("GOOGLE_TRANSLATE_ENABLED", "true").lower() == "true"
)
@@ -47,6 +47,19 @@ class ProvidersConfig:
os.getenv("GOOGLE_TRANSLATE_RETRY_DELAY", "1.0")
)
# Google Cloud Translation API v2 (clé API officielle, facturable)
# Obtenir la clé : https://console.cloud.google.com → APIs & Services → Credentials
# Activer : Cloud Translation API (Basic v2) + Facturation sur le projet
GOOGLE_CLOUD_ENABLED: bool = (
os.getenv("GOOGLE_CLOUD_ENABLED", "false").lower() == "true"
)
GOOGLE_CLOUD_API_KEY: str = os.getenv("GOOGLE_CLOUD_API_KEY", "")
GOOGLE_CLOUD_TIMEOUT: int = int(os.getenv("GOOGLE_CLOUD_TIMEOUT", "30"))
GOOGLE_CLOUD_MAX_RETRIES: int = int(os.getenv("GOOGLE_CLOUD_MAX_RETRIES", "3"))
GOOGLE_CLOUD_RETRY_DELAY: float = float(
os.getenv("GOOGLE_CLOUD_RETRY_DELAY", "1.0")
)
# DeepL
DEEPL_ENABLED: bool = os.getenv("DEEPL_ENABLED", "false").lower() == "true"
DEEPL_API_KEY: str = os.getenv("DEEPL_API_KEY", "")
@@ -143,6 +156,12 @@ class ProvidersConfig:
"google": ProviderSettings(
enabled=cls.GOOGLE_ENABLED, api_key=None, base_url=None, model=None
),
"google_cloud": ProviderSettings(
enabled=cls.GOOGLE_CLOUD_ENABLED,
api_key=cls.GOOGLE_CLOUD_API_KEY if cls.GOOGLE_CLOUD_API_KEY else None,
base_url=None,
model=None,
),
"deepl": ProviderSettings(
enabled=cls.DEEPL_ENABLED,
api_key=cls.DEEPL_API_KEY if cls.DEEPL_API_KEY else None,
@@ -187,7 +206,7 @@ class ProvidersConfig:
return False
# Providers requiring API keys
providers_requiring_key = {"deepl", "openai", "openrouter"}
providers_requiring_key = {"deepl", "openai", "openrouter", "google_cloud"}
if provider_name.lower() in providers_requiring_key:
return bool(settings.api_key)