refactor: complete module-driven architecture migration
This commit completes the migration to a fully module-driven architecture: ## Models Migration - Moved all domain models from models/database/ to their respective modules: - tenancy: User, Admin, Vendor, Company, Platform, VendorDomain, etc. - cms: MediaFile, VendorTheme - messaging: Email, VendorEmailSettings, VendorEmailTemplate - core: AdminMenuConfig - models/database/ now only contains Base and TimestampMixin (infrastructure) ## Schemas Migration - Moved all domain schemas from models/schema/ to their respective modules: - tenancy: company, vendor, admin, team, vendor_domain - cms: media, image, vendor_theme - messaging: email - models/schema/ now only contains base.py and auth.py (infrastructure) ## Routes Migration - Moved admin routes from app/api/v1/admin/ to modules: - menu_config.py -> core module - modules.py -> tenancy module - module_config.py -> tenancy module - app/api/v1/admin/ now only aggregates auto-discovered module routes ## Menu System - Implemented module-driven menu system with MenuDiscoveryService - Extended FrontendType enum: PLATFORM, ADMIN, VENDOR, STOREFRONT - Added MenuItemDefinition and MenuSectionDefinition dataclasses - Each module now defines its own menu items in definition.py - MenuService integrates with MenuDiscoveryService for template rendering ## Documentation - Updated docs/architecture/models-structure.md - Updated docs/architecture/menu-management.md - Updated architecture validation rules for new exceptions ## Architecture Validation - Updated MOD-019 rule to allow base.py in models/schema/ - Created core module exceptions.py and schemas/ directory - All validation errors resolved (only warnings remain) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,49 +1,64 @@
|
||||
{
|
||||
"title": "Catalogue produits",
|
||||
"description": "Gestion du catalogue produits pour les vendeurs",
|
||||
"products": {
|
||||
"title": "Produits",
|
||||
"subtitle": "Gérez votre catalogue de produits",
|
||||
"create": "Créer un produit",
|
||||
"edit": "Modifier le produit",
|
||||
"delete": "Supprimer le produit",
|
||||
"empty": "Aucun produit trouvé",
|
||||
"empty_search": "Aucun produit ne correspond à votre recherche"
|
||||
},
|
||||
"product": {
|
||||
"name": "Nom du produit",
|
||||
"description": "Description",
|
||||
"sku": "Référence",
|
||||
"product": "Produit",
|
||||
"add_product": "Ajouter un produit",
|
||||
"edit_product": "Modifier le produit",
|
||||
"delete_product": "Supprimer le produit",
|
||||
"product_name": "Nom du produit",
|
||||
"product_code": "Code produit",
|
||||
"sku": "SKU",
|
||||
"price": "Prix",
|
||||
"sale_price": "Prix de vente",
|
||||
"cost": "Coût",
|
||||
"stock": "Stock",
|
||||
"status": "Statut",
|
||||
"active": "Actif",
|
||||
"inactive": "Inactif"
|
||||
},
|
||||
"media": {
|
||||
"title": "Médias du produit",
|
||||
"upload": "Télécharger une image",
|
||||
"delete": "Supprimer l'image",
|
||||
"primary": "Définir comme image principale",
|
||||
"error": "Échec du téléchargement"
|
||||
},
|
||||
"validation": {
|
||||
"name_required": "Le nom du produit est requis",
|
||||
"price_required": "Le prix est requis",
|
||||
"invalid_sku": "Format de référence invalide",
|
||||
"duplicate_sku": "La référence existe déjà"
|
||||
"in_stock": "En stock",
|
||||
"out_of_stock": "Rupture de stock",
|
||||
"low_stock": "Stock faible",
|
||||
"availability": "Disponibilité",
|
||||
"available": "Disponible",
|
||||
"unavailable": "Indisponible",
|
||||
"brand": "Marque",
|
||||
"category": "Catégorie",
|
||||
"categories": "Catégories",
|
||||
"image": "Image",
|
||||
"images": "Images",
|
||||
"main_image": "Image principale",
|
||||
"gallery": "Galerie",
|
||||
"weight": "Poids",
|
||||
"dimensions": "Dimensions",
|
||||
"color": "Couleur",
|
||||
"size": "Taille",
|
||||
"material": "Matériau",
|
||||
"condition": "État",
|
||||
"new": "Neuf",
|
||||
"used": "Occasion",
|
||||
"refurbished": "Reconditionné",
|
||||
"no_products": "Aucun produit trouvé",
|
||||
"search_products": "Rechercher des produits...",
|
||||
"filter_by_category": "Filtrer par catégorie",
|
||||
"filter_by_status": "Filtrer par statut",
|
||||
"sort_by": "Trier par",
|
||||
"sort_newest": "Plus récent",
|
||||
"sort_oldest": "Plus ancien",
|
||||
"sort_price_low": "Prix : croissant",
|
||||
"sort_price_high": "Prix : décroissant",
|
||||
"sort_name_az": "Nom : A-Z",
|
||||
"sort_name_za": "Nom : Z-A"
|
||||
},
|
||||
"messages": {
|
||||
"created": "Produit créé avec succès",
|
||||
"updated": "Produit mis à jour avec succès",
|
||||
"deleted": "Produit supprimé avec succès",
|
||||
"not_found": "Produit non trouvé",
|
||||
"cannot_delete": "Impossible de supprimer le produit",
|
||||
"error_loading": "Erreur lors du chargement des produits"
|
||||
},
|
||||
"filters": {
|
||||
"all_products": "Tous les produits",
|
||||
"active_only": "Actifs uniquement",
|
||||
"search_placeholder": "Rechercher des produits..."
|
||||
"product_deleted_successfully": "Product deleted successfully",
|
||||
"please_fill_in_all_required_fields": "Please fill in all required fields",
|
||||
"product_updated_successfully": "Product updated successfully",
|
||||
"failed_to_load_media_library": "Failed to load media library",
|
||||
"no_vendor_associated_with_this_product": "No vendor associated with this product",
|
||||
"please_select_an_image_file": "Please select an image file",
|
||||
"image_must_be_less_than_10mb": "Image must be less than 10MB",
|
||||
"image_uploaded_successfully": "Image uploaded successfully",
|
||||
"product_removed_from_vendor_catalog": "Product removed from vendor catalog.",
|
||||
"please_select_a_vendor": "Please select a vendor",
|
||||
"please_enter_a_product_title_english": "Please enter a product title (English)",
|
||||
"product_created_successfully": "Product created successfully",
|
||||
"please_select_a_vendor_first": "Please select a vendor first"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user