463 lines
23 KiB
Markdown
463 lines
23 KiB
Markdown
# Umsetzungskonzept RBAC Access (separat, schrittweise)
|
|
|
|
## Ziel
|
|
Das RBAC-Konzept aus `concept_rbac_access_pending.md` technisch umsetzen, inkl.:
|
|
- Feature-Containerisierung (plug&play)
|
|
- Bootstrap auf System-RBAC reduzieren
|
|
- Feature-Services in Container integrieren
|
|
- aicore in aichat integrieren
|
|
- dynamisches Laden von Routes und Services
|
|
- striktes Import-Regelwerk ohne Abhaengigkeiten zwischen Feature-Containern
|
|
|
|
## Import-Regelwerk (Zielzustand)
|
|
- **Kein Import zwischen Feature-Containern.**
|
|
- **Feature-Container duerfen zentrale Module importieren (`modules/interfaces`, `modules/datamodels`, `modules/services`, `modules/aicore`, `modules/shared`, `modules/connectors`, `modules/security`, `modules/auth`).**
|
|
- **Umgekehrt darf zentraler Code keine Feature-Container importieren.**
|
|
|
|
## Wichtige konzeptionelle und architektonische Hinweise
|
|
- Jeder Feature-Container ist vollstaendig eigenstaendig (Code, Datamodelle, Interfaces, Routes, Services), darf aber zentrale Module nutzen.
|
|
- Zentrale Pfade bleiben Plattform-Schnittstellen und duerfen von Features genutzt werden; umgekehrt keine Feature-Imports aus zentralem Code.
|
|
- System-RBAC und Feature-RBAC sind strikt getrennt: Bootstrap initialisiert nur System-RBAC, Feature-RBAC entsteht durch Feature-Container.
|
|
- Der RBAC-Katalog fuer UI/RESOURCE liegt in `gateway/modules/security/rbacCatalog/` und ist persistent; Feature-Container muessen nur registrieren, nicht speichern.
|
|
- UI/RESOURCE-Objekte werden rein im Backend definiert und persistiert, keine UI-Abhaengigkeit.
|
|
- Datenobjekte werden dynamisch abgeleitet, sind aber nicht auf Features beschraenkt (System- und Feature-Tabellen sind sichtbar).
|
|
- Strikte Importregel erzeugt harte Grenzen: Shared-Module muessen in den Feature-Container verschoben oder repliziert werden.
|
|
- Zentraler Workflow (geplant unter `gateway/modules/workflows/automation/`) darf aus Features nicht direkt importiert werden; Zugriff nur ueber feature-interne Adapter/Entry-Points oder durch Verlagerung der benoetigten Teile in die Feature-Container.
|
|
|
|
## Schrittfolge mit Dateiaenderungen und Referenz-Checkliste
|
|
|
|
### Schritt 1: Bootstrap auf System-RBAC reduzieren
|
|
**Datei:** `gateway/modules/interfaces/interfaceBootstrap.py`
|
|
- Entfernen in `initBootstrap()`:
|
|
- `initFeatures(db)`
|
|
- `_initFeatureTemplateRoleAccessRules(db)`
|
|
- Entfernen:
|
|
- `_initFeatureTemplateRoles(db)` (Funktion + Call-Sites)
|
|
- `_initFeatureTemplateRoleAccessRules(db)` (Funktion + Call-Sites)
|
|
- **Beibehalten:** `initRoles(db)`, `initRbacRules(db)`
|
|
- **Checkliste Referenzen:**
|
|
- Keine Feature-Initialisierung in Bootstrap
|
|
- Keine Feature-Template-Rollen
|
|
- Keine Feature-Template-AccessRules
|
|
|
|
### Schritt 2: Feature-Container-Struktur anlegen
|
|
**Neue Ordner:**
|
|
- `gateway/modules/features/trustee/`
|
|
- `gateway/modules/features/chatbot/` (existiert)
|
|
- `gateway/modules/features/aichat/` (neu)
|
|
- `gateway/modules/features/neutralizer/` (rename)
|
|
- `gateway/modules/features/realestate/` (neu)
|
|
- `gateway/modules/features/automation/` (neu)
|
|
|
|
**Pflichtdateien je Feature:**
|
|
- `datamodelFeatureXxx.py`
|
|
- `interfaceFeatureXxx.py`
|
|
- `routeFeatureXxx.py`
|
|
- `mainXxx.py` (RBAC UI/RESOURCE Registry)
|
|
|
|
**Struktur-Vorgaben (Soll):**
|
|
- Jeder Container enthaelt alle benoetigten Submodule, inkl. Services und Helfer.
|
|
- Zentrale Module duerfen genutzt werden; keine Feature-zu-Feature-Imports.
|
|
- Service-Subfolder bleiben erhalten, liegen aber direkt im Container (`serviceXxx/`).
|
|
|
|
**Calling-Referenzen (allgemein):**
|
|
- `gateway/app.py` registriert alle Feature-Router dynamisch.
|
|
- Feature-Container registrieren ihre RBAC-Objekte im Katalog (z.B. via `mainXxx.py` als Entry-Point).
|
|
- Systemcode greift nicht auf Feature-Implementierung zu, sondern nur auf deren registrierte Router/Services.
|
|
|
|
### Schritt 3: Trustee verschieben
|
|
**Move:**
|
|
- `gateway/modules/routes/routeFeatureTrustee.py`
|
|
-> `gateway/modules/features/trustee/routeFeatureTrustee.py`
|
|
- `gateway/modules/interfaces/interfaceDbTrustee.py`
|
|
-> `gateway/modules/features/trustee/interfaceFeatureTrustee.py`
|
|
- `gateway/modules/datamodels/datamodelTrustee.py`
|
|
-> `gateway/modules/features/trustee/datamodelFeatureTrustee.py`
|
|
**Add:**
|
|
- `gateway/modules/features/trustee/mainTrustee.py` (RBAC Katalog)
|
|
|
|
**Referenzen anpassen (Checkliste):**
|
|
- Alle Imports auf `routeFeatureTrustee.py` neu
|
|
- Alle Imports auf `interfaceDbTrustee.py` neu
|
|
- Alle Imports auf `datamodelTrustee.py` neu
|
|
- `app.py` Router-Registrierung auf neuen Pfad
|
|
**Calling-Referenzen (Suche):**
|
|
- `rg -n "routeFeatureTrustee|interfaceDbTrustee|datamodelTrustee" gateway/`
|
|
|
|
### Schritt 4: Chatbot verschieben
|
|
**Move:**
|
|
- `gateway/modules/routes/routeFeatureChatbot.py`
|
|
-> `gateway/modules/features/chatbot/routeFeatureChatbot.py`
|
|
- `gateway/modules/interfaces/interfaceDbChatbot.py`
|
|
-> `gateway/modules/features/chatbot/interfaceFeatureChatbot.py`
|
|
- `gateway/modules/datamodels/datamodelChatbot.py`
|
|
-> `gateway/modules/features/chatbot/datamodelFeatureChatbot.py`
|
|
**Keep:**
|
|
- `gateway/modules/features/chatbot/mainChatbot.py` + Helpers
|
|
**Add:**
|
|
- `gateway/modules/features/chatbot/mainChatbotCatalog.py` (oder in mainChatbot)
|
|
|
|
**Referenzen anpassen:**
|
|
- Imports fuer `interfaceDbChatbot`/`datamodelChatbot`/`routeFeatureChatbot`
|
|
- `app.py` Router-Registrierung
|
|
**Calling-Referenzen (Suche):**
|
|
- `rg -n "routeFeatureChatbot|interfaceDbChatbot|datamodelChatbot" gateway/`
|
|
|
|
### Schritt 5: AIChat (chatworkflow) verschieben
|
|
**Move:**
|
|
- `gateway/modules/routes/routeFeatureChatDynamic.py`
|
|
-> `gateway/modules/features/aichat/routeFeatureAiChat.py`
|
|
- `gateway/modules/interfaces/interfaceDbChat.py`
|
|
-> `gateway/modules/features/aichat/interfaceFeatureAiChat.py`
|
|
- `gateway/modules/datamodels/datamodelChat.py`
|
|
-> `gateway/modules/features/aichat/datamodelFeatureAiChat.py`
|
|
**Add:**
|
|
- `gateway/modules/features/aichat/mainAiChat.py` (RBAC Katalog)
|
|
**Keep:**
|
|
- `gateway/modules/features/workflow/mainWorkflow.py` (falls reine Workflow-Logik)
|
|
|
|
**Referenzen anpassen:**
|
|
- Alle Imports auf `routeFeatureChatDynamic.py`
|
|
- Alle Imports auf `interfaceDbChat.py`
|
|
- Alle Imports auf `datamodelChat.py`
|
|
- `app.py` Router-Registrierung
|
|
**Calling-Referenzen (Suche):**
|
|
- `rg -n "routeFeatureChatDynamic|interfaceDbChat|datamodelChat" gateway/`
|
|
|
|
### Schritt 6: Neutralizer verschieben und Ordner umbenennen
|
|
**Rename:**
|
|
- `gateway/modules/features/neutralizePlayground/`
|
|
-> `gateway/modules/features/neutralizer/`
|
|
**Move:**
|
|
- `gateway/modules/routes/routeFeatureNeutralization.py`
|
|
-> `gateway/modules/features/neutralizer/routeFeatureNeutralizer.py`
|
|
- `gateway/modules/datamodels/datamodelNeutralizer.py`
|
|
-> `gateway/modules/features/neutralizer/datamodelFeatureNeutralizer.py`
|
|
**Add:**
|
|
- `gateway/modules/features/neutralizer/mainNeutralizer.py` (RBAC Katalog)
|
|
|
|
**Referenzen anpassen:**
|
|
- Alle Imports auf `neutralizePlayground`
|
|
- Alle Imports auf `routeFeatureNeutralization.py`
|
|
- `app.py` Router-Registrierung
|
|
**Calling-Referenzen (Suche):**
|
|
- `rg -n "neutralizePlayground|routeFeatureNeutralization|datamodelNeutralizer" gateway/`
|
|
|
|
### Schritt 7: RealEstate verschieben
|
|
**Move:**
|
|
- `gateway/modules/routes/routeFeatureRealEstate.py`
|
|
-> `gateway/modules/features/realestate/routeFeatureRealEstate.py`
|
|
- `gateway/modules/interfaces/interfaceDbRealestate.py`
|
|
-> `gateway/modules/features/realestate/interfaceFeatureRealEstate.py`
|
|
- `gateway/modules/datamodels/datamodelRealEstate.py`
|
|
-> `gateway/modules/features/realestate/datamodelFeatureRealEstate.py`
|
|
**Keep:**
|
|
- `gateway/modules/features/realEstate/mainRealEstate.py`
|
|
**Add:**
|
|
- `gateway/modules/features/realestate/mainRealEstateCatalog.py` (oder in mainRealEstate)
|
|
|
|
**Referenzen anpassen:**
|
|
- Imports auf `interfaceDbRealestate`, `datamodelRealEstate`, `routeFeatureRealEstate`
|
|
- `app.py` Router-Registrierung
|
|
**Calling-Referenzen (Suche):**
|
|
- `rg -n "routeFeatureRealEstate|interfaceDbRealestate|datamodelRealEstate" gateway/`
|
|
|
|
### Schritt 8: Automation Feature-Container
|
|
**Move:**
|
|
- `gateway/modules/routes/routeDataAutomation.py`
|
|
-> `gateway/modules/features/automation/routeFeatureAutomation.py`
|
|
**Add:**
|
|
- `gateway/modules/features/automation/interfaceFeatureAutomation.py`
|
|
- `gateway/modules/features/automation/datamodelFeatureAutomation.py`
|
|
- enthaelt `AutomationDefinition`
|
|
- `gateway/modules/features/automation/mainAutomation.py` (RBAC Katalog)
|
|
|
|
**Referenzen anpassen:**
|
|
- Alle Imports von `routeDataAutomation.py`
|
|
- Alle `AutomationDefinition`-Imports auf neuen Pfad
|
|
- `app.py` Router-Registrierung
|
|
**Calling-Referenzen (Suche):**
|
|
- `rg -n "routeDataAutomation|AutomationDefinition" gateway/`
|
|
|
|
### Schritt 9: Services in Feature-Container
|
|
**aichat:**
|
|
- Move:
|
|
- `gateway/modules/aicore/` -> `gateway/modules/features/aichat/aicore/`
|
|
- `gateway/modules/services/serviceAi/` -> `gateway/modules/features/aichat/serviceAi/`
|
|
- `gateway/modules/services/serviceExtraction/` -> `gateway/modules/features/aichat/serviceExtraction/`
|
|
- `gateway/modules/services/serviceGeneration/` -> `gateway/modules/features/aichat/serviceGeneration/`
|
|
- `gateway/modules/services/serviceWeb/` -> `gateway/modules/features/aichat/serviceWeb/`
|
|
**neutralizer:**
|
|
- Move:
|
|
- `gateway/modules/services/serviceNeutralization/` -> `gateway/modules/features/neutralizer/serviceNeutralization/`
|
|
**Shared Services:**
|
|
- bleiben in `gateway/modules/services`
|
|
|
|
**Referenzen anpassen:**
|
|
- Alle Imports der o.g. Services auf neue Pfade
|
|
- AI-Services duerfen keine Imports ausserhalb des aichat-Containers haben
|
|
- In Feature-Folders kein Subfolder `services`; Services liegen direkt als `serviceXxx/`
|
|
**Calling-Referenzen (Suche):**
|
|
- `rg -n "modules\\.services\\.service(Ai|Extraction|Generation|Web)|modules\\.aicore" gateway/`
|
|
- `rg -n "serviceNeutralization" gateway/`
|
|
|
|
**Code-Struktur (Soll):**
|
|
- Feature-Services importieren nur Feature-Datamodelle innerhalb des Containers.
|
|
- `aicore` wird komplett unter `features/aichat/` verschoben und ist nur dort nutzbar.
|
|
|
|
### Schritt 10: Plug&Play Router Loading
|
|
**Datei:** `gateway/app.py`
|
|
- Ersetze statische Imports aus `modules/routes` durch dynamische Feature-Discovery.
|
|
- Nur existierende Feature-Folder werden registriert.
|
|
|
|
**Referenzen anpassen:**
|
|
- Alle Router-Registrierungen neu
|
|
- Keine Route-Imports aus `modules/routes`
|
|
|
|
**Konzept Router-Discovery (Soll):**
|
|
- Scanne `gateway/modules/features/*/` nach `routeFeature*.py`.
|
|
- Pro Datei wird ein `router`-Objekt erwartet und registriert.
|
|
- Fehlende Router in einem Feature duerfen den Start nicht abbrechen (log + skip).
|
|
- Feature-Status markieren: `active`, `degraded` (z.B. Router ok, Service-Load fehlschlaegt).
|
|
|
|
### Schritt 11: Plug&Play Service Loading
|
|
**Zentraler Loader (shared):**
|
|
- Ein Service-Registry-Modul laedt pro Feature-Container definierte Services.
|
|
- Nur existierende Feature-Folder werden registriert.
|
|
|
|
**Referenzen anpassen:**
|
|
- Alle Service-Center-Aufrufe auf neuen Loader
|
|
- Kein direkter Import aus `modules/services/serviceAi` etc.
|
|
|
|
**Konzept Service-Discovery (Soll):**
|
|
- Pro Feature-Container werden vorhandene `service*`-Ordner als Services erkannt.
|
|
- Der Loader scannt `gateway/modules/features/<feature>/service*/` und registriert diese Services zentral.
|
|
- Services werden nur geladen, wenn der Feature-Container vorhanden ist.
|
|
- Registrierungs-Contract analog `modules/services/__init__.py`:
|
|
- In jedem `service*`-Ordner existiert `mainService*.py` mit Service-Klasse.
|
|
- Loader instanziert Service und exponiert ihn via `PublicService(...)`.
|
|
|
|
### Schritt 12: featuresLifecycle anpassen
|
|
**Datei:** `gateway/modules/features/featuresLifecycle.py`
|
|
- Import der Workflow-Logik aus neuem zentralen Pfad (`gateway/modules/workflows/automation/`)
|
|
- Keine Imports von Feature-Containern
|
|
|
|
**Bemerkung:**
|
|
- Kein Feature-Discovery notwendig: Modul ist zentraler Scheduler fuer Workflow/Automation.
|
|
- Update der Imports: `modules.features.workflow` -> `modules.workflows.automation` (nach Auslagerung).
|
|
- Workflow-API ist zentral und stabil: Features duerfen nur explizite Entry-Points nutzen (z.B. `syncAutomationEvents`), keine direkten Imports in interne Workflow-Module.
|
|
|
|
### Schritt 13: Globale Referenzen bereinigen
|
|
**Checkliste:**
|
|
- Keine Imports von `modules/routes/routeFeature*.py` mehr
|
|
- `interfaceDb*.py` und `datamodel*.py` bleiben fuer System-Module bestehen
|
|
- `modules/services/service*` bleiben fuer System-Services bestehen
|
|
- `modules/aicore` wird verschoben (Feature `aichat`), keine zentralen Imports mehr
|
|
|
|
**Calling-Referenzen (Suche):**
|
|
- `rg -n "modules\\.routes\\.routeFeature" gateway/`
|
|
|
|
### Schritt 14: Tests
|
|
- Gateway starten, Router-Registrierung pruefen
|
|
- Feature-Folder umbenennen mit z.b. prefix: Route/Service nicht mehr vorhanden
|
|
- RBAC Katalog liefert Feature-Objekte
|
|
- Bootstrap erzeugt nur System-RBAC
|
|
- RBAC Regeln bleiben erhalten, wenn Feature-Ordner entfernt/umbenannt ist (Persistenztest).
|
|
- Service-Discovery registriert Services korrekt und markiert `degraded` bei Teilfehlern.
|
|
|
|
## Referenz-Checkliste (gesamt)
|
|
- `gateway/app.py` Router
|
|
- `gateway/modules/features/featuresLifecycle.py`
|
|
- alle `routeFeature*.py`
|
|
- alle `interfaceDb*.py`
|
|
- alle `datamodel*.py`
|
|
- alle `main*.py` in Feature-Containern
|
|
- Service-Center/Service-Loader
|
|
- Tests/Fixtures
|
|
- RBAC-Katalog Modul in `gateway/modules/security/rbacCatalog/`
|
|
- `gateway/modules/interfaces/interfaceBootstrap.py`
|
|
|
|
## Import-Analyse (Istzustand, zu verschiebende Module)
|
|
|
|
### Routes (aktueller Stand)
|
|
- `routeFeatureRealEstate.py`:
|
|
- imports: `modules.auth`, `modules.datamodels.*`, `modules.interfaces.interfaceDbRealestate`, `modules.features.realEstate.mainRealEstate`, `modules.connectors`, `modules.shared`
|
|
- `routeFeatureTrustee.py`:
|
|
- imports: `modules.auth`, `modules.interfaces.interfaceDbTrustee`, `modules.interfaces.interfaceDbApp`, `modules.interfaces.interfaceFeatures`, `modules.datamodels.*`
|
|
- `routeFeatureChatDynamic.py`:
|
|
- imports: `modules.auth`, `modules.interfaces.interfaceDbChat`, `modules.datamodels.datamodelChat`, `modules.features.workflow`
|
|
- `routeFeatureChatbot.py`:
|
|
- imports: `modules.auth`, `modules.interfaces.interfaceDbChat`, `modules.interfaces.interfaceRbac`, `modules.datamodels.*`, `modules.features.chatbot`, `modules.features.workflow`, `modules.shared`
|
|
- `routeFeatureNeutralization.py`:
|
|
- imports: `modules.auth`, `modules.datamodels.datamodelNeutralizer`, `modules.features.neutralizePlayground`
|
|
- `routeDataAutomation.py`:
|
|
- imports: `modules.interfaces.interfaceDbChat`, `modules.auth`, `modules.datamodels.datamodelChat`, `modules.features.workflow`, `modules.shared`
|
|
|
|
### Interfaces (aktueller Stand)
|
|
- `interfaceDbTrustee.py`:
|
|
- imports: `modules.connectors`, `modules.shared`, `modules.interfaces.interfaceRbac`, `modules.security`, `modules.datamodels.*`
|
|
- `interfaceDbRealestate.py`:
|
|
- imports: `modules.datamodels.*`, `modules.connectors`, `modules.shared`, `modules.security`, `modules.interfaces.interfaceRbac`
|
|
- `interfaceDbChat.py` / `interfaceDbChatbot.py`:
|
|
- imports: `modules.security`, `modules.datamodels.*`, `modules.connectors`, `modules.shared`, `modules.interfaces.interfaceRbac`, `modules.interfaces.interfaceDbManagement`
|
|
|
|
### Feature-Logik (aktueller Stand)
|
|
- `modules/features/chatbot/mainChatbot.py`:
|
|
- imports: `modules.datamodels.*`, `modules.shared`, `modules.services`, `modules.workflows`, `modules.connectors`
|
|
- `modules/features/workflow/mainWorkflow.py`:
|
|
- imports: `modules.datamodels.*`, `modules.shared`, `modules.services`, `modules.workflows`
|
|
- `modules/features/realEstate/mainRealEstate.py`:
|
|
- imports: `modules.datamodels.*`, `modules.services`, `modules.interfaces.interfaceDbRealestate`, `modules.connectors`, externe libs
|
|
- `modules/features/neutralizePlayground/mainNeutralizePlayground.py`:
|
|
- imports: `modules.datamodels.*`, `modules.services`
|
|
|
|
### Services / aicore (aktueller Stand)
|
|
- `modules/services/serviceAi/mainServiceAi.py`:
|
|
- imports: `modules.datamodels.*`, `modules.services.serviceExtraction`, `modules.interfaces.interfaceAiObjects`, `modules.shared`
|
|
- `modules/services/serviceNeutralization/mainServiceNeutralization.py`:
|
|
- imports: `modules.datamodels.datamodelNeutralizer`, eigene subProcess-* Module
|
|
- `modules/aicore/*`:
|
|
- imports: `modules.datamodels.*`, `modules.security`, `modules.connectors`
|
|
|
|
### Services Submodule-Analyse (Detail)
|
|
|
|
**serviceAi/**
|
|
- `mainServiceAi.py`
|
|
- imports: `modules.datamodels.datamodelChat`, `modules.datamodels.datamodelAi`,
|
|
`modules.datamodels.datamodelExtraction`, `modules.datamodels.datamodelWorkflow`,
|
|
`modules.datamodels.datamodelDocument`, `modules.interfaces.interfaceAiObjects`,
|
|
`modules.services.serviceExtraction`, `modules.shared`
|
|
- `subStructureGeneration.py`
|
|
- imports: `modules.datamodels.datamodelExtraction`, `modules.datamodels.datamodelAi`,
|
|
`modules.workflows.processing.shared.stateTools`
|
|
- `subStructureFilling.py`
|
|
- imports: `modules.datamodels.datamodelExtraction`, `modules.datamodels.datamodelAi`,
|
|
`modules.workflows.processing.shared.stateTools`
|
|
- `subResponseParsing.py`
|
|
- imports: `modules.shared.jsonUtils`, `modules.services.serviceAi.subJsonResponseHandling`,
|
|
`modules.datamodels.datamodelAi`
|
|
- `subJsonResponseHandling.py`
|
|
- imports: `modules.shared.jsonUtils`, `modules.datamodels.datamodelAi`
|
|
- `subJsonMerger.py`
|
|
- imports: `modules.shared.jsonUtils`
|
|
- `subDocumentIntents.py`
|
|
- imports: `modules.datamodels.datamodelChat`, `modules.datamodels.datamodelExtraction`,
|
|
`modules.workflows.processing.shared.stateTools`
|
|
- `subContentExtraction.py`
|
|
- imports: `modules.datamodels.datamodelChat`, `modules.datamodels.datamodelExtraction`,
|
|
`modules.workflows.processing.shared.stateTools`
|
|
- `subAiCallLooping.py`
|
|
- imports: `modules.datamodels.datamodelAi`, `modules.datamodels.datamodelExtraction`,
|
|
`modules.services.serviceAi.subJsonResponseHandling`,
|
|
`modules.services.serviceAi.subLoopingUseCases`,
|
|
`modules.workflows.processing.shared.stateTools`,
|
|
`modules.shared.jsonContinuation`, `modules.shared.jsonUtils`
|
|
- `subLoopingUseCases.py`, `subJsonResponseHandling.py`, `subJsonMerger.py` (shared utils)
|
|
- imports: `modules.shared.*` (je nach Datei)
|
|
|
|
**serviceExtraction/**
|
|
- `mainServiceExtraction.py`
|
|
- imports: `modules.datamodels.datamodelExtraction`, `modules.datamodels.datamodelChat`,
|
|
`modules.datamodels.datamodelAi`, `modules.aicore.aicoreModelRegistry`,
|
|
`modules.aicore.aicoreModelSelector`, `modules.shared.jsonUtils`
|
|
- `merging/*` (mergerText/mergerTable/mergerDefault)
|
|
- imports: `modules.datamodels.datamodelExtraction`
|
|
- `extractors/*` (Xml/Xlsx/Text/Sql/Pptx/Html/Image/Json/Pdf/Csv/Docx/Binary)
|
|
- imports: `modules.datamodels.datamodelExtraction` (teilweise ContentExtracted)
|
|
- `chunking/*` (chunkerText/ChunkerTable/ChunkerStructure/ChunkerImage)
|
|
- imports: `modules.datamodels.datamodelExtraction`
|
|
- `subRegistry.py`
|
|
- imports: `modules.datamodels.datamodelExtraction`
|
|
- `subPromptBuilderExtraction.py`
|
|
- imports: `modules.datamodels.datamodelAi`
|
|
- `subPipeline.py`
|
|
- imports: `modules.datamodels.datamodelExtraction`
|
|
- `subMerger.py`
|
|
- imports: `modules.datamodels.datamodelExtraction`
|
|
|
|
**serviceGeneration/**
|
|
- `mainServiceGeneration.py`
|
|
- imports: `modules.datamodels.datamodelDocument`, `modules.datamodels.datamodelChat`,
|
|
`modules.services.serviceGeneration.subDocumentUtility`
|
|
- `renderers/*`
|
|
- imports: `modules.datamodels.datamodelDocument` (alle Renderer)
|
|
- `documentRendererBaseTemplate.py` imports zusaetzlich:
|
|
`modules.datamodels.datamodelJson`, `modules.datamodels.datamodelAi`
|
|
- `paths/*`
|
|
- `imagePath.py`: `modules.datamodels.datamodelWorkflow`, `modules.datamodels.datamodelAi`
|
|
- `documentPath.py`: `modules.datamodels.datamodelWorkflow`, `modules.datamodels.datamodelExtraction`,
|
|
`modules.datamodels.datamodelAi`, `modules.datamodels.datamodelDocument`,
|
|
`modules.workflows.processing.shared.stateTools`
|
|
- `codePath.py`: `modules.datamodels.datamodelWorkflow`, `modules.datamodels.datamodelExtraction`,
|
|
`modules.datamodels.datamodelAi`, `modules.shared.jsonUtils`
|
|
- `subStructureGenerator.py` / `subPromptBuilderGeneration.py`
|
|
- imports: `modules.datamodels.datamodelJson`
|
|
- `subContentGenerator.py`
|
|
- imports: `modules.services.serviceGeneration.subContentIntegrator`,
|
|
`modules.workflows.processing.shared.stateTools`
|
|
|
|
**serviceWeb/**
|
|
- `mainServiceWeb.py`
|
|
- imports: `modules.datamodels.datamodelAi` (AiCallOptions, OperationTypeEnum, AiCallPrompt*)
|
|
|
|
**serviceNeutralization/**
|
|
- `mainServiceNeutralization.py`
|
|
- imports: `modules.datamodels.datamodelNeutralizer`,
|
|
`modules.services.serviceNeutralization.subProcess*`
|
|
- `subProcessText.py`
|
|
- imports: `modules.services.serviceNeutralization.subParseString`
|
|
- `subProcessList.py`
|
|
- imports: `modules.services.serviceNeutralization.subParseString`,
|
|
`modules.services.serviceNeutralization.subPatterns`
|
|
- `subParseString.py`
|
|
- imports: `modules.services.serviceNeutralization.subPatterns`
|
|
|
|
## Compliance-Check gegen Import-Regelwerk (Zielzustand)
|
|
|
|
**Zielkriterium:**
|
|
- Keine Imports zwischen Feature-Containern.
|
|
- Feature-Container duerfen zentrale Module importieren.
|
|
- Zentrale Module duerfen keine Feature-Container importieren.
|
|
|
|
**Erwarteter Zustand nach Migration:**
|
|
- Alle `interfaceFeatureXxx.py`, `routeFeatureXxx.py`, `datamodelFeatureXxx.py`, `mainXxx.py` liegen im jeweiligen Feature-Container.
|
|
- Interne Feature-Imports (z.B. `chatbot` -> `chatbot.eventManager`) sind erlaubt.
|
|
- Keine Feature-zu-Feature-Imports mehr (z.B. `chatbot` -> `workflow` entfaellt durch Auslagerung).
|
|
|
|
**Hinweis zur Validierung:**
|
|
- Compliance-Check erfolgt nach Abschluss der Verschiebungen und Import-Anpassungen.
|
|
- Der Istzustand dient nur als Analysegrundlage und ist nicht compliance-faehig.
|
|
|
|
## Import-Check (Zielzustand, Soll)
|
|
|
|
**Erlaubte Imports innerhalb eines Feature-Containers:**
|
|
- Relative Imports innerhalb des Containers (z.B. `.eventManager`, `.subModule`).
|
|
- Absolute Imports innerhalb des eigenen Containers (z.B. `modules.features.chatbot.*` im Container `chatbot`).
|
|
- Standardbibliothek und externe Libraries.
|
|
|
|
**Nicht erlaubt (muss im Zielzustand eliminiert werden):**
|
|
- Imports aus anderen Feature-Containern (`modules.features.<anderesFeature>.*`).
|
|
- Zentrale Module importieren Feature-Container (`modules.features.*`).
|
|
|
|
**Soll-Checkliste je Feature-Container:**
|
|
- Keine `modules.features.<anderesFeature>.*` Imports.
|
|
- Keine Feature-zu-Feature-Abhaengigkeiten.
|
|
|
|
**Pruefroutine (rg-Patterns, Zielzustand):**
|
|
- Finde direkte Cross-Feature-Imports:
|
|
- `rg -n "modules\\.features\\.(?!<feature>\\.)" gateway/modules/features/<feature>/`
|
|
- Finde verbotene Feature-Imports aus zentralem Code:
|
|
- `rg -n "modules\\.features\\." gateway/modules/(routes|interfaces|datamodels|services|aicore|shared|connectors|security|auth)/`
|
|
|
|
## Istzustand (nur Analyse, vor Migration)
|
|
|
|
**Konflikte (heute):**
|
|
- Alle Routen, Interfaces, Feature-Logiken und Services importieren Module ausserhalb eines Feature-Containers.
|
|
- Es bestehen Imports zwischen Features (z.B. `routeFeatureChatbot` -> `modules.features.workflow`, im Zielzustand entfaellt da `workflow` kein Feature mehr ist).
|
|
|
|
**Liste der Imports zwischen Features (Istzustand, Analyse):**
|
|
- `gateway/modules/interfaces/interfaceDbChatbot.py` -> `modules.features.chatbot.eventManager`
|
|
|
|
## Offene Punkte fuer Umsetzung
|
|
- Dynamische Feature-Discovery in `app.py` und Service-Loader designen
|
|
- Schrittweise Migration je Feature mit Tests
|