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:
@@ -63,8 +63,8 @@ PLANS = {
|
||||
},
|
||||
PlanType.STARTER: {
|
||||
"name": "Starter",
|
||||
"price_monthly": 7.99,
|
||||
"price_yearly": 76.70, # -20 %
|
||||
"price_monthly": 9.00,
|
||||
"price_yearly": 86.40, # -20 %
|
||||
"docs_per_month": 50,
|
||||
"max_pages_per_doc": 50,
|
||||
"max_file_size_mb": 10,
|
||||
@@ -89,13 +89,13 @@ PLANS = {
|
||||
},
|
||||
PlanType.PRO: {
|
||||
"name": "Pro",
|
||||
"price_monthly": 19.99,
|
||||
"price_yearly": 191.90, # -20 %
|
||||
"price_monthly": 19.00,
|
||||
"price_yearly": 182.40, # -20 %
|
||||
"docs_per_month": 200,
|
||||
"max_pages_per_doc": 200,
|
||||
"max_file_size_mb": 25,
|
||||
"max_chars_per_month": 2_000_000,
|
||||
"providers": ["google", "deepl", "openrouter"],
|
||||
"providers": ["google", "google_cloud", "deepl", "openrouter"],
|
||||
"ai_model_essential": "deepseek/deepseek-v3.2",
|
||||
"features": [
|
||||
"200 documents / mois",
|
||||
@@ -119,13 +119,13 @@ PLANS = {
|
||||
},
|
||||
PlanType.BUSINESS: {
|
||||
"name": "Business",
|
||||
"price_monthly": 49.99,
|
||||
"price_yearly": 479.90, # -20 %
|
||||
"price_monthly": 49.00,
|
||||
"price_yearly": 470.40, # -20 %
|
||||
"docs_per_month": 1000,
|
||||
"max_pages_per_doc": 500,
|
||||
"max_file_size_mb": 50,
|
||||
"max_chars_per_month": 10_000_000,
|
||||
"providers": ["google", "deepl", "openrouter", "openrouter_premium", "openai", "zai"],
|
||||
"providers": ["google", "google_cloud", "deepl", "openrouter", "openrouter_premium", "openai", "zai"],
|
||||
"ai_model_essential": "deepseek/deepseek-v3.2",
|
||||
"ai_model_premium": "anthropic/claude-3.5-haiku",
|
||||
"features": [
|
||||
@@ -161,7 +161,7 @@ PLANS = {
|
||||
"max_pages_per_doc": -1,
|
||||
"max_file_size_mb": -1,
|
||||
"max_chars_per_month": -1,
|
||||
"providers": ["google", "deepl", "openrouter", "openrouter_premium", "openai", "zai", "custom"],
|
||||
"providers": ["google", "google_cloud", "deepl", "openrouter", "openrouter_premium", "openai", "zai", "custom"],
|
||||
"features": [
|
||||
"Documents illimités",
|
||||
"Tous les modèles IA (GPT-5, Claude Opus 4.6...)",
|
||||
@@ -209,6 +209,7 @@ class User(BaseModel):
|
||||
stripe_customer_id: Optional[str] = None
|
||||
stripe_subscription_id: Optional[str] = None
|
||||
subscription_ends_at: Optional[datetime] = None
|
||||
cancel_at_period_end: bool = False
|
||||
|
||||
# Usage tracking
|
||||
docs_translated_this_month: int = 0
|
||||
@@ -265,6 +266,8 @@ class UserResponse(BaseModel):
|
||||
plan: PlanType
|
||||
tier: PlanType
|
||||
subscription_status: SubscriptionStatus
|
||||
subscription_ends_at: Optional[datetime] = None
|
||||
cancel_at_period_end: bool = False
|
||||
docs_translated_this_month: int
|
||||
pages_translated_this_month: int
|
||||
api_calls_this_month: int
|
||||
|
||||
Reference in New Issue
Block a user