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,126 +1,203 @@
|
||||
{
|
||||
"title": "Inhalts-Verwaltung",
|
||||
"description": "Verwaltet Inhaltsäiten, Mediebibliothéik an Händler-Themen",
|
||||
"pages": {
|
||||
"title": "Inhaltsäiten",
|
||||
"subtitle": "Verwaltet Plattform- an Händler-Inhaltsäiten",
|
||||
"create": "Säit erstellen",
|
||||
"edit": "Säit änneren",
|
||||
"delete": "Säit läschen",
|
||||
"list": "All Säiten",
|
||||
"empty": "Keng Säite fonnt",
|
||||
"empty_search": "Keng Säite passen op Är Sich",
|
||||
"create_first": "Éischt Säit erstellen"
|
||||
},
|
||||
"page": {
|
||||
"title": "Säitentitel",
|
||||
"slug": "Slug",
|
||||
"slug_help": "URL-sécher Kennung (Klengbuschtawen, Zuelen, Bindestricher)",
|
||||
"content": "Inhalt",
|
||||
"content_format": "Inhaltsformat",
|
||||
"format_html": "HTML",
|
||||
"format_markdown": "Markdown",
|
||||
"platform": "Plattform",
|
||||
"vendor_override": "Händler-Iwwerschreiwung",
|
||||
"vendor_override_none": "Keng (Plattform-Standard)",
|
||||
"vendor_override_help_default": "Dëst ass eng plattformwäit Standardsäit",
|
||||
"vendor_override_help_vendor": "Dës Säit iwwerschreift de Standard nëmme fir de gewielte Händler"
|
||||
},
|
||||
"tiers": {
|
||||
"platform": "Plattform-Marketing",
|
||||
"vendor_default": "Händler-Standard",
|
||||
"vendor_override": "Händler-Iwwerschreiwung"
|
||||
},
|
||||
"seo": {
|
||||
"title": "SEO & Metadaten",
|
||||
"meta_description": "Meta-Beschreiwung",
|
||||
"meta_description_help": "Zeechen (150-160 recommandéiert)",
|
||||
"meta_keywords": "Meta-Schlësselwierder",
|
||||
"meta_keywords_placeholder": "schlësselwuert1, schlësselwuert2, schlësselwuert3"
|
||||
},
|
||||
"navigation": {
|
||||
"title": "Navigatioun & Affichage",
|
||||
"display_order": "Uweisungsreiefolleg",
|
||||
"display_order_help": "Méi niddreg = éischt",
|
||||
"show_in_header": "Am Header weisen",
|
||||
"show_in_footer": "Am Footer weisen",
|
||||
"show_in_legal": "Am Rechtsberäich weisen",
|
||||
"show_in_legal_help": "Ënnescht Leist nieft dem Copyright"
|
||||
},
|
||||
"publishing": {
|
||||
"published": "Verëffentlecht",
|
||||
"draft": "Entworf",
|
||||
"publish_help": "Dës Säit ëffentlech siichtbar maachen"
|
||||
},
|
||||
"homepage": {
|
||||
"title": "Haaptsäit-Sektiounen",
|
||||
"subtitle": "Méisproochegen Inhalt",
|
||||
"loading": "Sektiounen ginn gelueden...",
|
||||
"hero": {
|
||||
"title": "Hero-Sektioun",
|
||||
"badge_text": "Badge-Text",
|
||||
"main_title": "Titel",
|
||||
"subtitle": "Ënnertitel",
|
||||
"buttons": "Knäpp",
|
||||
"add_button": "Knapp derbäisetzen"
|
||||
"platform": {
|
||||
"nav": {
|
||||
"pricing": "Präisser",
|
||||
"find_shop": "Fannt Äre Buttek",
|
||||
"start_trial": "Gratis Testen",
|
||||
"admin_login": "Admin Login",
|
||||
"vendor_login": "Händler Login",
|
||||
"toggle_menu": "Menü wiesselen",
|
||||
"toggle_dark_mode": "Däischter Modus wiesselen"
|
||||
},
|
||||
"features": {
|
||||
"title": "Funktiounen-Sektioun",
|
||||
"section_title": "Sektiounstitel",
|
||||
"cards": "Funktiounskaarten",
|
||||
"add_card": "Kaart derbäisetzen",
|
||||
"icon": "Icon-Numm",
|
||||
"feature_title": "Titel",
|
||||
"feature_description": "Beschreiwung"
|
||||
"hero": {
|
||||
"badge": "{trial_days}-Deeg gratis Testversioun - Keng Kreditkaart néideg",
|
||||
"title": "Liichtt OMS fir Letzshop Verkeefer",
|
||||
"subtitle": "Bestellungsverwaltung, Lager an Rechnungsstellung fir de lëtzebuergeschen E-Commerce. Schluss mat Tabellen. Féiert Äert Geschäft.",
|
||||
"cta_trial": "Gratis Testen",
|
||||
"cta_find_shop": "Fannt Äre Letzshop Buttek"
|
||||
},
|
||||
"pricing": {
|
||||
"title": "Präisser-Sektioun",
|
||||
"section_title": "Sektiounstitel",
|
||||
"use_tiers": "Abonnement-Stufen aus der Datebank benotzen",
|
||||
"use_tiers_help": "Wann aktivéiert, ginn d'Präiskaarten dynamesch aus Ärer Abonnement-Stufekonfiguratioun ofgeruff."
|
||||
"title": "Einfach, transparent Präisser",
|
||||
"subtitle": "Wielt de Plang deen zu Ärer Firma passt. All Pläng enthalen eng {trial_days}-Deeg gratis Testversioun.",
|
||||
"monthly": "Monatslech",
|
||||
"annual": "Jäerlech",
|
||||
"save_months": "Spuert 2 Méint!",
|
||||
"most_popular": "AM BELÉIFSTEN",
|
||||
"recommended": "EMPFOHLEN",
|
||||
"contact_sales": "Kontaktéiert eis",
|
||||
"start_trial": "Gratis Testen",
|
||||
"per_month": "/Mount",
|
||||
"per_year": "/Joer",
|
||||
"custom": "Personnaliséiert",
|
||||
"orders_per_month": "{count} Bestellungen/Mount",
|
||||
"unlimited_orders": "Onbegrenzt Bestellungen",
|
||||
"products_limit": "{count} Produkter",
|
||||
"unlimited_products": "Onbegrenzt Produkter",
|
||||
"team_members": "{count} Teammemberen",
|
||||
"unlimited_team": "Onbegrenzt Team",
|
||||
"letzshop_sync": "Letzshop Synchronisatioun",
|
||||
"eu_vat_invoicing": "EU TVA Rechnungen",
|
||||
"analytics_dashboard": "Analyse Dashboard",
|
||||
"api_access": "API Zougang",
|
||||
"multi_channel": "Multi-Channel Integratioun",
|
||||
"products": "Produkter",
|
||||
"team_member": "Teammember",
|
||||
"unlimited": "Onbegrenzt",
|
||||
"order_history": "Méint Bestellungshistorique",
|
||||
"trial_note": "All Pläng enthalen eng {trial_days}-Deeg gratis Testversioun. Keng Kreditkaart néideg.",
|
||||
"back_home": "Zréck op d'Haaptsäit"
|
||||
},
|
||||
"features": {
|
||||
"letzshop_sync": "Letzshop Synchronisatioun",
|
||||
"inventory_basic": "Basis Lagerverwaltung",
|
||||
"inventory_locations": "Lagerstanduerten",
|
||||
"inventory_purchase_orders": "Bestellungen",
|
||||
"invoice_lu": "Lëtzebuerg TVA Rechnungen",
|
||||
"invoice_eu_vat": "EU TVA Rechnungen",
|
||||
"invoice_bulk": "Massrechnungen",
|
||||
"customer_view": "Clientelëscht",
|
||||
"customer_export": "Client Export",
|
||||
"analytics_dashboard": "Analyse Dashboard",
|
||||
"accounting_export": "Comptabilitéits Export",
|
||||
"api_access": "API Zougang",
|
||||
"automation_rules": "Automatiséierungsreegelen",
|
||||
"team_roles": "Team Rollen an Autorisatiounen",
|
||||
"white_label": "White-Label Optioun",
|
||||
"multi_vendor": "Multi-Händler Ënnerstëtzung",
|
||||
"custom_integrations": "Personnaliséiert Integratiounen",
|
||||
"sla_guarantee": "SLA Garantie",
|
||||
"dedicated_support": "Dedizéierte Kontobetreier"
|
||||
},
|
||||
"addons": {
|
||||
"title": "Erweidert Är Plattform",
|
||||
"subtitle": "Füügt Är Mark, professionell Email a verbessert Sécherheet derbäi.",
|
||||
"per_year": "/Joer",
|
||||
"per_month": "/Mount",
|
||||
"custom_domain": "Eegen Domain",
|
||||
"custom_domain_desc": "Benotzt Är eegen Domain (mengdomain.lu)",
|
||||
"premium_ssl": "Premium SSL",
|
||||
"premium_ssl_desc": "EV Zertifikat fir Vertrauensbadgen",
|
||||
"email_package": "Email Package",
|
||||
"email_package_desc": "Professionell Email Adressen"
|
||||
},
|
||||
"find_shop": {
|
||||
"title": "Fannt Äre Letzshop Buttek",
|
||||
"subtitle": "Verkaaft Dir schonn op Letzshop? Gitt Är Buttek URL an fir unzefänken.",
|
||||
"placeholder": "Gitt Är Letzshop URL an (z.B. letzshop.lu/vendors/mäi-buttek)",
|
||||
"button": "Mäi Buttek fannen",
|
||||
"claim_shop": "Dëse Buttek reklaméieren",
|
||||
"already_claimed": "Scho reklaméiert",
|
||||
"no_account": "Kee Letzshop Kont?",
|
||||
"signup_letzshop": "Registréiert Iech éischt bei Letzshop",
|
||||
"then_connect": ", dann kommt zréck fir Äre Buttek ze verbannen.",
|
||||
"search_placeholder": "Letzshop URL oder Butteknumm aginn...",
|
||||
"search_button": "Sichen",
|
||||
"examples": "Beispiller:",
|
||||
"claim_button": "Dëse Buttek reklaméieren a gratis testen",
|
||||
"not_found": "Mir konnten keen Letzshop Buttek mat dëser URL fannen. Iwwerpréift w.e.g. a probéiert nach eng Kéier.",
|
||||
"or_signup": "Oder registréiert Iech ouni Letzshop Verbindung",
|
||||
"need_help": "Braucht Dir Hëllef?",
|
||||
"no_account_yet": "Dir hutt nach keen Letzshop Kont? Keen Problem!",
|
||||
"create_letzshop": "Letzshop Kont erstellen",
|
||||
"signup_without": "Ouni Letzshop registréieren",
|
||||
"looking_up": "Sich Äre Buttek...",
|
||||
"found": "Fonnt:",
|
||||
"claimed_badge": "Scho reklaméiert"
|
||||
},
|
||||
"signup": {
|
||||
"step_plan": "Plang wielen",
|
||||
"step_shop": "Buttek reklaméieren",
|
||||
"step_account": "Kont",
|
||||
"step_payment": "Bezuelung",
|
||||
"choose_plan": "Wielt Äre Plang",
|
||||
"save_percent": "Spuert {percent}%",
|
||||
"trial_info": "Mir sammelen Är Bezuelungsinformatiounen, awer Dir gitt eréischt nom Enn vun der Testperiod belaaschtt.",
|
||||
"connect_shop": "Verbannt Äre Letzshop Buttek",
|
||||
"connect_optional": "Optional: Verlinkt Äre Letzshop Kont fir Bestellungen automatesch ze synchroniséieren.",
|
||||
"connect_continue": "Verbannen a weider",
|
||||
"skip_step": "Dëse Schrëtt iwwersprangen",
|
||||
"create_account": "Erstellt Äre Kont",
|
||||
"first_name": "Virnumm",
|
||||
"last_name": "Numm",
|
||||
"company_name": "Firmennumm",
|
||||
"email": "Email",
|
||||
"password": "Passwuert",
|
||||
"password_hint": "Mindestens 8 Zeechen",
|
||||
"continue": "Weider",
|
||||
"continue_payment": "Weider zur Bezuelung",
|
||||
"back": "Zréck",
|
||||
"add_payment": "Bezuelungsmethod derbäisetzen",
|
||||
"no_charge_note": "Dir gitt eréischt nom Enn vun Ärer {trial_days}-Deeg Testperiod belaaschtt.",
|
||||
"processing": "Veraarbechtung...",
|
||||
"start_trial": "Gratis Testversioun starten",
|
||||
"creating_account": "Erstellt Äre Kont..."
|
||||
},
|
||||
"success": {
|
||||
"title": "Wëllkomm bei Wizamart!",
|
||||
"subtitle": "Äre Kont gouf erstallt an Är {trial_days}-Deeg gratis Testversioun huet ugefaang.",
|
||||
"what_next": "Wat kënnt duerno?",
|
||||
"step_connect": "Letzshop verbannen:",
|
||||
"step_connect_desc": "Füügt Äre API Schlëssel derbäi fir Bestellungen automatesch ze synchroniséieren.",
|
||||
"step_invoicing": "Rechnungsstellung astellen:",
|
||||
"step_invoicing_desc": "Konfiguréiert Är Rechnungsastellungen fir Lëtzebuerger Konformitéit.",
|
||||
"step_products": "Produkter importéieren:",
|
||||
"step_products_desc": "Synchroniséiert Äre Produktkatalog vu Letzshop.",
|
||||
"go_to_dashboard": "Zum Dashboard",
|
||||
"login_dashboard": "Am Dashboard umellen",
|
||||
"need_help": "Braucht Dir Hëllef beim Ufänken?",
|
||||
"contact_support": "Kontaktéiert eist Support Team"
|
||||
},
|
||||
"cta": {
|
||||
"title": "Call-to-Action-Sektioun",
|
||||
"main_title": "Titel",
|
||||
"subtitle": "Ënnertitel",
|
||||
"buttons": "Knäpp",
|
||||
"add_button": "Knapp derbäisetzen"
|
||||
"title": "Prett fir Är Bestellungen ze optiméieren?",
|
||||
"subtitle": "Schléisst Iech Letzshop Händler un déi Wizamart fir hir Bestellungsverwaltung vertrauen. Fänkt haut Är {trial_days}-Deeg gratis Testversioun un.",
|
||||
"button": "Gratis Testen"
|
||||
},
|
||||
"footer": {
|
||||
"tagline": "Liichtt OMS fir Letzshop Verkeefer. Verwaltt Bestellungen, Lager an Rechnungen.",
|
||||
"quick_links": "Séier Linken",
|
||||
"platform": "Plattform",
|
||||
"contact": "Kontakt",
|
||||
"copyright": "© {year} Wizamart. Gemaach fir de lëtzebuergeschen E-Commerce.",
|
||||
"privacy": "Dateschutzrichtlinn",
|
||||
"terms": "Notzungsbedéngungen",
|
||||
"about": "Iwwer eis",
|
||||
"faq": "FAQ",
|
||||
"contact_us": "Kontaktéiert eis"
|
||||
},
|
||||
"modern": {
|
||||
"badge_integration": "Offiziell Integratioun",
|
||||
"badge_connect": "An 2 Minutten verbannen",
|
||||
"hero_title_1": "Gemaach fir de lëtzebuergeschen E-Commerce",
|
||||
"hero_title_2": "De Back-Office dee Letzshop Iech net gëtt",
|
||||
"hero_subtitle": "Synchroniséiert Bestellungen, verwaltt Lager, erstellt Rechnunge mat der korrekter TVA a besëtzt Är Clientsdaten. Alles un engem Plaz.",
|
||||
"cta_trial": "{trial_days}-Deeg gratis testen",
|
||||
"cta_how": "Kuckt wéi et funktionéiert",
|
||||
"hero_note": "Keng Kreditkaart néideg. Setup an 5 Minutten. Ëmmer kënnegen.",
|
||||
"pain_title": "Kënnt Iech dat bekannt vir?",
|
||||
"pain_subtitle": "Dat sinn d'deeglech Frustratioune vu Letzshop Verkeefer",
|
||||
"pain_manual": "Manuell Bestellungsagab",
|
||||
"pain_manual_desc": "Bestellunge vu Letzshop an Tabelle kopéieren. All. Eenzelen. Dag.",
|
||||
"pain_inventory": "Lager Chaos",
|
||||
"pain_inventory_desc": "De Stock an Letzshop stëmmt net mat der Realitéit iwwereneen. Iwwerverkeef passéieren.",
|
||||
"pain_vat": "Falsch TVA Rechnungen",
|
||||
"pain_vat_desc": "EU Cliente brauchen déi korrekt TVA. Äre Comptabel beschwéiert sech.",
|
||||
"pain_customers": "Verluer Clienten",
|
||||
"pain_customers_desc": "Letzshop besëtzt Är Clientsdaten. Dir kënnt se net retargeten oder Loyalitéit opbauen.",
|
||||
"how_title": "Wéi et funktionéiert",
|
||||
"how_subtitle": "Vum Chaos zur Kontroll an 4 Schrëtt",
|
||||
"how_step1": "Letzshop verbannen",
|
||||
"how_step1_desc": "Gitt Är Letzshop API Zougangsdaten an. An 2 Minutte fäerdeg, keng technesch Kenntnisser néideg.",
|
||||
"how_step2": "Bestellunge kommen eran",
|
||||
"how_step2_desc": "Bestellunge ginn automatesch synchroniséiert. Confirméiert an Tracking direkt vu Wizamart derbäisetzen.",
|
||||
"how_step3": "Rechnunge generéieren",
|
||||
"how_step3_desc": "Ee Klick fir konform PDF Rechnunge mat korrekter TVA fir all EU Land ze erstellen.",
|
||||
"how_step4": "Äert Geschäft ausbauen",
|
||||
"how_step4_desc": "Exportéiert Clientë fir Marketing. Verfolgt Lagerstänn. Konzentréiert Iech op de Verkaf, net op Tabellen.",
|
||||
"features_title": "Alles wat e Letzshop Verkeefer brauch",
|
||||
"features_subtitle": "D'operativ Tools déi Letzshop net bitt",
|
||||
"cta_final_title": "Prett fir d'Kontroll iwwer Äert Letzshop Geschäft ze iwwerhuelen?",
|
||||
"cta_final_subtitle": "Schléisst Iech lëtzebuerger Händler un déi opgehalen hunn géint Tabellen ze kämpfen an ugefaang hunn hiert Geschäft auszbauen.",
|
||||
"cta_final_note": "Keng Kreditkaart néideg. Setup an 5 Minutten. Voll Professional Fonctiounen während der Testperiod."
|
||||
}
|
||||
},
|
||||
"media": {
|
||||
"title": "Mediebibliothéik",
|
||||
"upload": "Eroplueden",
|
||||
"upload_file": "Fichier eroplueden",
|
||||
"delete": "Läschen",
|
||||
"empty": "Keng Mediefichieren",
|
||||
"upload_first": "Luet Äre éischte Fichier erop"
|
||||
},
|
||||
"themes": {
|
||||
"title": "Händler-Themen",
|
||||
"subtitle": "Verwaltet Händler-Theme-Personnalisatiounen"
|
||||
},
|
||||
"actions": {
|
||||
"save": "Späicheren",
|
||||
"saving": "Späicheren...",
|
||||
"update": "Säit aktualiséieren",
|
||||
"create": "Säit erstellen",
|
||||
"cancel": "Ofbriechen",
|
||||
"back_to_list": "Zréck op d'Lëscht",
|
||||
"preview": "Virschau",
|
||||
"revert_to_default": "Op Standard zrécksetzen"
|
||||
},
|
||||
"messages": {
|
||||
"created": "Säit erfollegräich erstallt",
|
||||
"updated": "Säit erfollegräich aktualiséiert",
|
||||
"deleted": "Säit erfollegräich geläscht",
|
||||
"reverted": "Op Standardsäit zréckgesat",
|
||||
"error_loading": "Feeler beim Lueden vun der Säit",
|
||||
"error_saving": "Feeler beim Späichere vun der Säit",
|
||||
"confirm_delete": "Sidd Dir sécher, datt Dir dës Säit läsche wëllt?"
|
||||
},
|
||||
"filters": {
|
||||
"all_pages": "All Säiten",
|
||||
"all_platforms": "All Plattformen",
|
||||
"search_placeholder": "Säite sichen..."
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user