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 +1,22 @@
|
||||
{}
|
||||
{
|
||||
"inventory": {
|
||||
"title": "Inventar",
|
||||
"stock_level": "Lagerbestand",
|
||||
"quantity": "Menge",
|
||||
"reorder_point": "Nachbestellpunkt",
|
||||
"adjust_stock": "Bestand anpassen",
|
||||
"stock_in": "Wareneingang",
|
||||
"stock_out": "Warenausgang",
|
||||
"transfer": "Transfer",
|
||||
"history": "Verlauf",
|
||||
"low_stock_alert": "Warnung bei geringem Bestand",
|
||||
"out_of_stock_alert": "Warnung bei Ausverkauf"
|
||||
},
|
||||
"messages": {
|
||||
"stock_adjusted_successfully": "Stock adjusted successfully",
|
||||
"quantity_set_successfully": "Quantity set successfully",
|
||||
"inventory_entry_deleted": "Inventory entry deleted.",
|
||||
"please_select_a_vendor_and_file": "Please select a vendor and file",
|
||||
"import_completed_with_errors": "Import completed with errors"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1 +1,31 @@
|
||||
{}
|
||||
{
|
||||
"inventory": {
|
||||
"title": "Inventory",
|
||||
"stock_level": "Stock Level",
|
||||
"quantity": "Quantity",
|
||||
"reorder_point": "Reorder Point",
|
||||
"adjust_stock": "Adjust Stock",
|
||||
"stock_in": "Stock In",
|
||||
"stock_out": "Stock Out",
|
||||
"transfer": "Transfer",
|
||||
"history": "History",
|
||||
"low_stock_alert": "Low Stock Alert",
|
||||
"out_of_stock_alert": "Out of Stock Alert"
|
||||
},
|
||||
"messages": {
|
||||
"stock_adjusted_successfully": "Stock adjusted successfully",
|
||||
"quantity_set_successfully": "Quantity set successfully",
|
||||
"inventory_entry_deleted": "Inventory entry deleted.",
|
||||
"please_select_a_vendor_and_file": "Please select a vendor and file",
|
||||
"import_completed_with_errors": "Import completed with errors",
|
||||
"failed_to_adjust_stock": "Failed to adjust stock.",
|
||||
"failed_to_set_quantity": "Failed to set quantity.",
|
||||
"failed_to_delete_entry": "Failed to delete entry.",
|
||||
"import_success": "Imported {quantity} units ({created} new, {updated} updated)",
|
||||
"import_completed": "Import completed: {created} created, {updated} updated, {errors} errors",
|
||||
"import_failed": "Import failed",
|
||||
"bulk_adjust_success": "{count} item(s) adjusted by {amount}",
|
||||
"failed_to_adjust_inventory": "Failed to adjust inventory",
|
||||
"exported_items": "Exported {count} item(s)"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1 +1,22 @@
|
||||
{}
|
||||
{
|
||||
"inventory": {
|
||||
"title": "Inventaire",
|
||||
"stock_level": "Niveau de stock",
|
||||
"quantity": "Quantité",
|
||||
"reorder_point": "Seuil de réapprovisionnement",
|
||||
"adjust_stock": "Ajuster le stock",
|
||||
"stock_in": "Entrée de stock",
|
||||
"stock_out": "Sortie de stock",
|
||||
"transfer": "Transfert",
|
||||
"history": "Historique",
|
||||
"low_stock_alert": "Alerte stock faible",
|
||||
"out_of_stock_alert": "Alerte rupture de stock"
|
||||
},
|
||||
"messages": {
|
||||
"stock_adjusted_successfully": "Stock adjusted successfully",
|
||||
"quantity_set_successfully": "Quantity set successfully",
|
||||
"inventory_entry_deleted": "Inventory entry deleted.",
|
||||
"please_select_a_vendor_and_file": "Please select a vendor and file",
|
||||
"import_completed_with_errors": "Import completed with errors"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1 +1,22 @@
|
||||
{}
|
||||
{
|
||||
"inventory": {
|
||||
"title": "Inventar",
|
||||
"stock_level": "Lagerniveau",
|
||||
"quantity": "Quantitéit",
|
||||
"reorder_point": "Nobestellungspunkt",
|
||||
"adjust_stock": "Lager upaassen",
|
||||
"stock_in": "Lager eran",
|
||||
"stock_out": "Lager eraus",
|
||||
"transfer": "Transfer",
|
||||
"history": "Geschicht",
|
||||
"low_stock_alert": "Niddreg Lager Alarm",
|
||||
"out_of_stock_alert": "Net op Lager Alarm"
|
||||
},
|
||||
"messages": {
|
||||
"stock_adjusted_successfully": "Stock adjusted successfully",
|
||||
"quantity_set_successfully": "Quantity set successfully",
|
||||
"inventory_entry_deleted": "Inventory entry deleted.",
|
||||
"please_select_a_vendor_and_file": "Please select a vendor and file",
|
||||
"import_completed_with_errors": "Import completed with errors"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user