feat(Explorer): Enhance metric extraction, source transparency, and UI display
- **Standardization & Formula Logic:** Fixed NameError/SyntaxError in formula parser; added support for comments and capitalized placeholders.
- **Source URL Tracking:** Extended DB schema and cascade logic to store and track specific source URLs.
- **Frontend & UI:**
- Added 'Standardized Potential' display in Inspector.
- Added clickable source link with icon.
- Fixed Settings tab layout collapse (flex-shrink-0).
- **Export Capabilities:**
- Single-company JSON export now includes full quantitative metadata.
- New global CSV export endpoint /api/companies/export.
- **System Integrity:**
- Fixed Notion sync typo ('Stanardization').
- Corrected Nginx proxy routing and FastAPI route ordering.
- Ensured DB persistence via explicit docker-compose volume mapping.
This commit is contained in:
@@ -183,4 +183,56 @@ Sync-Skript: `backend/scripts/sync_notion_industries.py`.
|
||||
|
||||
## 10. Database Migration
|
||||
|
||||
Bei Schema-Änderungen ohne Datenverlust: `backend/scripts/migrate_db.py`.
|
||||
Bei Schema-Änderungen ohne Datenverlust: `backend/scripts/migrate_db.py`.
|
||||
|
||||
### 11.1 Lessons Learned (Retrospektive Jan 24, 2026)
|
||||
|
||||
1. **API-Routing-Reihenfolge (FastAPI):** Ein spezifischer Endpunkt (z.B. `/api/companies/export`) muss **vor** einem dynamischen Endpunkt (z.B. `/api/companies/{company_id}`) deklariert werden. Andernfalls interpretiert FastAPI "export" als eine `company_id`, was zu einem `422 Unprocessable Entity` Fehler führt.
|
||||
2. **Nginx `proxy_pass` Trailing Slash:** Das Vorhandensein oder Fehlen eines `/` am Ende der `proxy_pass`-URL in Nginx ist kritisch. Für Dienste wie FastAPI, die mit einem `root_path` (z.B. `/ce`) laufen, darf **kein** Trailing Slash verwendet werden (`proxy_pass http://company-explorer:8000;`), damit der `root_path` in der an das Backend weitergeleiteten Anfrage erhalten bleibt.
|
||||
3. **Docker-Datenbank-Persistenz:** Das Fehlen eines expliziten Volume-Mappings für die Datenbankdatei in `docker-compose.yml` führt dazu, dass der Container eine interne, ephemere Kopie der Datenbank verwendet. Alle Änderungen, die außerhalb des Containers an der "Host"-DB vorgenommen werden, sind für die Anwendung unsichtbar. Es ist zwingend erforderlich, ein Mapping wie `./database.db:/app/database.db` zu definieren.
|
||||
4. **Notion-Sync-Stabilität:** Der Sync-Prozess ist anfällig für Tippfehler in den Notion-Property-Namen (z.B. "Stanardization" statt "Standardization"). Dies führt zu stillen Fehlern, bei denen Felder einfach `None` sind. Bei fehlenden Daten muss dieses Skript zuerst überprüft werden.
|
||||
5. **Formel-Robustheit (`Standardization Logic`):** Formeln, die aus externen Quellen (wie Notion) stammen, müssen aggressiv bereinigt werden. Kommentare in Klammern (z.B. `(Fläche pro Patient...)`) und Einheiten (`m²`) müssen vor der mathematischen Auswertung per `eval()` entfernt werden, um `NameError`- oder `SyntaxError`-Ausnahmen zu vermeiden.
|
||||
|
||||
|
||||
|
||||
## 12. Deployment & Access Notes (Diskstation / Docker Compose)
|
||||
|
||||
|
||||
|
||||
**Wichtiger Hinweis zum Deployment-Setup:**
|
||||
|
||||
|
||||
|
||||
Dieses Projekt läuft in einer Docker-Compose-Umgebung, typischerweise auf einer Synology Diskstation. Der Zugriff auf die einzelnen Microservices erfolgt über einen zentralen Nginx-Reverse-Proxy (`proxy`-Service), der auf Port `8090` des Host-Systems lauscht.
|
||||
|
||||
|
||||
|
||||
**Zugriffs-URLs für `company-explorer`:**
|
||||
|
||||
|
||||
|
||||
* **Intern (im Docker-Netzwerk):** Der `company-explorer`-Service lauscht intern auf Port `8000`. Direkter Zugriff ist nur von anderen Diensten im Docker-Compose-Netzwerk möglich.
|
||||
|
||||
* **Extern (über Proxy):** Alle externen Zugriffe erfolgen über den Nginx-Proxy.
|
||||
|
||||
* **Lokales Netzwerk (Beispiel):** `http://192.168.178.6:8090/ce/`
|
||||
|
||||
* **Extern (über DuckDNS/HTTPS, Beispiel):** `https://floke-ai.duckdns.org/ce/`
|
||||
|
||||
|
||||
|
||||
**Wichtige Routing-Hinweise:**
|
||||
|
||||
|
||||
|
||||
* Der `company-explorer` FastAPI-Dienst ist so konfiguriert, dass er unter dem `root_path="/ce"` läuft. Alle API-Endpunkte (z.B. `/api/companies`, `/api/companies/export`) sind daher unter `/ce/api/...` zu erreichen, wenn sie über den Proxy aufgerufen werden.
|
||||
|
||||
* Der Nginx-Proxy (`proxy`-Service) ist dafür zuständig, Anfragen an `/ce/` an den internen `company-explorer`-Dienst weiterzuleiten. Stellen Sie sicher, dass die `nginx-proxy.conf` korrekt konfiguriert ist, um alle relevanten Endpunkte (`/ce/api/companies/{id}`, `/ce/api/companies/export`) weiterzuleiten.
|
||||
|
||||
|
||||
|
||||
**Datenbank-Persistenz:**
|
||||
|
||||
|
||||
|
||||
* Die SQLite-Datenbankdatei (`companies_v3_fixed_2.db`) muss mittels Docker-Volume-Mapping vom Host-Dateisystem in den `company-explorer`-Container gemountet werden (`./companies_v3_fixed_2.db:/app/companies_v3_fixed_2.db`). Dies stellt sicher, dass Datenänderungen persistent sind und nicht verloren gehen, wenn der Container neu gestartet oder neu erstellt wird.
|
||||
|
||||
Reference in New Issue
Block a user