6.1 KiB
6.1 KiB
Überblick und Projektstruktur
← Zurück zum Inhaltsverzeichnis | Weiter: Datenmodell erstellen →
Überblick
Das Feature "realEstate" bietet eine stateless API für Real Estate-Datenbankoperationen mit AI-basierter natürlicher Sprachverarbeitung:
Hauptfunktionalität
- Natürliche Sprache → CRUD-Operationen: User-Input wird mit AI analysiert und in entsprechende Datenbankoperationen übersetzt
- Direkte Datenbankabfragen: SQL-Queries können direkt ausgeführt werden
- CRUD-Operationen: Erstellen, Lesen, Aktualisieren und Löschen von Real Estate-Entitäten
- PostgreSQL-Datenbankzugriff: Über den bestehenden DatabaseConnector
- RESTful API-Endpunkte: Einfache, stateless Endpunkte ohne Session-Management
- Benutzerauthentifizierung und Zugriffskontrolle: Integriert in bestehende UAM-Struktur
Architektur-Ansatz
Stateless Design:
- Keine Chat-Sessions notwendig (optional für zukünftige Erweiterungen)
- Jeder Request ist unabhängig
- Direkter Flow: User-Input → AI-Analyse → CRUD-Operation → Ergebnis
- Keine Query-History (kann optional später hinzugefügt werden)
AI-Integration:
- Nutzt
serviceAifür Intent-Erkennung - Übersetzt natürliche Sprache in CRUD-Operationen
- Unterstützt CREATE, READ, UPDATE, DELETE, QUERY-Intents
Real Estate-Datenmodell-Entitäten:
- Kernentitäten: Projekt, Parzelle
- Unterstützend: Dokument, Kontext
- Geografisch: GeoPolylinie, GeoPunkt
- Administrativ: Land, Kanton, Gemeinde
Architektur-Komponenten
Die Architektur folgt dem Muster bestehender Features:
- Routes (
modules/routes/) - API-Endpunkte (stateless) - Features (
modules/features/) - Geschäftslogik mit AI-Integration - Interfaces (
modules/interfaces/) - Datenbankzugriff (CRUD-Operationen) - DataModels (
modules/datamodels/) - Pydantic-Modelle für Real Estate-Entitäten - Services (
modules/services/) - AI-Service für Intent-Analyse
Projektstruktur
gateway/
├── modules/
│ ├── routes/
│ │ └── routeRealEstate.py # NEU: Stateless API-Endpunkte
│ │ ├── POST /api/realestate/command # Natürliche Sprache → CRUD
│ │ └── POST /api/realestate/query # Direkte SQL-Query
│ │
│ ├── features/
│ │ └── realEstate/
│ │ └── mainRealEstate.py # NEU: Feature-Logik mit AI-Integration
│ │ ├── processNaturalLanguageCommand() # Hauptfunktion
│ │ ├── analyzeUserIntent() # AI-basierte Intent-Analyse
│ │ └── executeIntentBasedOperation() # CRUD-Ausführung
│ │
│ ├── interfaces/
│ │ ├── interfaceDbRealEstateAccess.py # NEU: Zugriffskontrolle
│ │ ├── interfaceDbRealEstateObjects.py # NEU: CRUD-Interface
│ │ └── interfaceDbRealEstateChatObjects.py # OPTIONAL: Für Session-Support
│ │
│ ├── datamodels/
│ │ ├── datamodelRealEstate.py # NEU: Real Estate Datenmodelle
│ │ │ ├── Projekt, Parzelle, Dokument, etc.
│ │ └── datamodelRealEstateChat.py # OPTIONAL: Für Session-Support
│ │
│ ├── services/
│ │ └── serviceAi/ # BEREITS VORHANDEN
│ │ └── mainServiceAi.py # Wird für Intent-Analyse genutzt
│ │
│ └── connectors/
│ └── connectorDbPostgre.py # BEREITS VORHANDEN
│
├── app.py # Router-Registrierung
├── env_dev.env # Environment-Konfiguration
└── modules/features/featuresLifecycle.py # Feature-Lifecycle
Wichtige Dateien
Erforderlich:
routeRealEstate.py- API-Endpunkte (stateless)mainRealEstate.py- Feature-Logik mit AI-IntegrationinterfaceDbRealEstateAccess.py- ZugriffskontrolleinterfaceDbRealEstateObjects.py- CRUD-InterfacedatamodelRealEstate.py- Datenmodelle
Optional (für zukünftige Session-Unterstützung):
interfaceDbRealEstateChatObjects.py- Session-ManagementdatamodelRealEstateChat.py- Session-Modelle
Datenfluss: User-Input → Ergebnis
Flow: Natürliche Sprache ohne Session
1. User sendet Request
POST /api/realestate/command
Body: { "userInput": "Erstelle ein neues Projekt namens 'Hauptstrasse 42'" }
2. Route empfängt Request
routeRealEstate.process_command()
→ Auth: getCurrentUser()
3. Feature-Logik verarbeitet
mainRealEstate.processNaturalLanguageCommand()
→ Services initialisieren: getServices(currentUser, workflow=None)
4. AI analysiert Intent
analyzeUserIntent(services.ai, userInput)
→ services.ai.callAiPlanning(intentPrompt)
→ AI gibt zurück: { "intent": "CREATE", "entity": "Projekt", "parameters": {...} }
5. CRUD-Operation ausführen
executeIntentBasedOperation(intent, entity, parameters)
→ getRealEstateInterface(currentUser)
→ RealEstateObjects.createProjekt(projekt)
→ DatabaseConnector.recordCreate(Projekt)
6. Ergebnis zurückgeben
HTTP 200 OK
{ "success": true, "intent": "CREATE", "result": {...} }
Flow: Direkte SQL-Query
1. User sendet Request
POST /api/realestate/query
Body: { "queryText": "SELECT * FROM Projekt WHERE plz = '8000'" }
2. Route empfängt Request
routeRealEstate.execute_direct_query()
→ Auth: getCurrentUser()
3. Query ausführen
getChatInterface(currentUser)
→ RealEstateChatObjects.executeQuery(queryText)
→ DatabaseConnector.executeQuery(sql)
4. Ergebnis zurückgeben
HTTP 200 OK
{ "rows": [...], "columns": [...], "rowCount": 15 }
Vorteile des stateless Ansatzes
- Einfachheit: Kein Session-Management notwendig
- Performance: Weniger Datenbank-Operationen pro Request
- Skalierbarkeit: Stateless Requests sind einfacher zu skalieren
- Flexibilität: Jeder Request ist unabhängig
- Erweiterbarkeit: Session-Support kann später optional hinzugefügt werden
Nächster Schritt: 02-datamodels.md