fix: Restore all files lost during destructive rebase

A previous `git pull --rebase origin main` dropped 177 local commits,
losing 3400+ files across admin-v2, backend, studio-v2, website,
klausur-service, and many other services. The partial restore attempt
(660295e2) only recovered some files.

This commit restores all missing files from pre-rebase ref 98933f5e
while preserving post-rebase additions (night-scheduler, night-mode UI,
NightModeWidget dashboard integration).

Restored features include:
- AI Module Sidebar (FAB), OCR Labeling, OCR Compare
- GPU Dashboard, RAG Pipeline, Magic Help
- Klausur-Korrektur (8 files), Abitur-Archiv (5+ files)
- Companion, Zeugnisse-Crawler, Screen Flow
- Full backend, studio-v2, website, klausur-service
- All compliance SDKs, agent-core, voice-service
- CI/CD configs, documentation, scripts

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Benjamin Admin
2026-02-09 09:51:32 +01:00
parent f7487ee240
commit 21a844cb8a
1986 changed files with 744143 additions and 1731 deletions

196
geo-service/STATUS.md Normal file
View File

@@ -0,0 +1,196 @@
# GeoEdu Service - Implementierungsstatus
**Stand:** 2026-01-24
**Status:** Infrastruktur komplett, Downloads ausstehend
---
## Übersicht
Der GeoEdu Service ist eine DSGVO-konforme Erdkunde-Lernplattform mit:
- Self-Hosted OpenStreetMap Tile Server für Deutschland
- 3D-Terrain aus Copernicus DEM (Open Data)
- Unity WebGL Integration für immersive Lernwelten
- Learning Nodes System für didaktische Inhalte (via Ollama LLM)
**Port:** 8088
---
## Abgeschlossene Arbeiten
### Backend (geo-service/)
| Datei | Status | Beschreibung |
|-------|--------|--------------|
| `Dockerfile` | ✅ | Python 3.11 + GDAL + Geo-Libraries |
| `requirements.txt` | ✅ | FastAPI, asyncpg, shapely, rasterio, pmtiles |
| `config.py` | ✅ | Pydantic Settings |
| `main.py` | ✅ | FastAPI App mit allen Routers |
| `api/tiles.py` | ✅ | Vector Tile Endpoints |
| `api/terrain.py` | ✅ | DEM/Heightmap Endpoints |
| `api/aoi.py` | ✅ | AOI Packaging Endpoints |
| `api/learning.py` | ✅ | Learning Nodes API |
| `services/tile_server.py` | ✅ | PMTiles Reader |
| `services/dem_service.py` | ✅ | Copernicus DEM Handler |
| `services/aoi_packager.py` | ✅ | Unity Bundle Generator |
| `services/osm_extractor.py` | ✅ | OSM Feature Extraction |
| `services/learning_generator.py` | ✅ | Ollama LLM Integration |
| `models/aoi.py` | ✅ | AOI Pydantic Models |
| `models/learning_node.py` | ✅ | Learning Node Models |
| `models/attribution.py` | ✅ | License Attribution |
| `utils/geo_utils.py` | ✅ | Koordinaten-Transformationen |
| `utils/minio_client.py` | ✅ | S3 Client |
| `utils/license_checker.py` | ✅ | Lizenz-Validierung |
| `scripts/download_osm.sh` | ✅ | Geofabrik Download (NICHT ausgeführt) |
| `scripts/download_dem.sh` | ✅ | Copernicus Download (NICHT ausgeführt) |
| `scripts/import_osm.sh` | ✅ | osm2pgsql Import |
| `scripts/generate_tiles.sh` | ✅ | PMTiles Generation |
| `scripts/init_postgis.sql` | ✅ | PostGIS Schema + Tabellen |
| `tests/test_tiles.py` | ✅ | API Tests |
| `tests/test_aoi.py` | ✅ | AOI + Geo Utils Tests |
| `tests/test_learning.py` | ✅ | Learning Generator Tests |
| `.env.example` | ✅ | Environment Template |
### Frontend (studio-v2/)
| Datei | Status | Beschreibung |
|-------|--------|--------------|
| `package.json` | ✅ | maplibre-gl Dependency hinzugefügt |
| `app/geo-lernwelt/page.tsx` | ✅ | Hauptseite mit Tabs |
| `app/geo-lernwelt/types.ts` | ✅ | TypeScript Interfaces |
| `components/geo-lernwelt/AOISelector.tsx` | ✅ | MapLibre Polygon-Zeichnung |
| `components/geo-lernwelt/UnityViewer.tsx` | ✅ | Unity WebGL Viewer |
| `lib/geo-lernwelt/GeoContext.tsx` | ✅ | React Context |
| `lib/geo-lernwelt/mapStyles.ts` | ✅ | MapLibre Styles |
| `lib/geo-lernwelt/unityBridge.ts` | ✅ | Unity Communication |
### Docker-Konfiguration
| Änderung | Status | Beschreibung |
|----------|--------|--------------|
| `docker-compose.yml` | ✅ | geo-service hinzugefügt |
| PostgreSQL Image | ✅ | Geändert zu `postgis/postgis:16-3.4-alpine` |
| PostGIS Init Script | ✅ | Auto-Setup bei Container-Start |
| Volumes | ✅ | geo_osm_data, geo_dem_data, geo_tile_cache, geo_aoi_bundles |
---
## Ausstehende Arbeiten
### Downloads (NICHT automatisch starten!)
| Download | Größe | Script | Dauer (~100 Mbit/s) |
|----------|-------|--------|---------------------|
| Germany OSM PBF | 4.4 GB | `scripts/download_osm.sh` | ~6 Min |
| Copernicus DEM | ~25 GB | `scripts/download_dem.sh` | ~35 Min |
### Generierung (nach Downloads)
| Prozess | Output | Dauer |
|---------|--------|-------|
| osm2pgsql Import | PostgreSQL DB | ~2-4 Stunden |
| PMTiles (Z0-14) | ~200-300 GB | ~12-24 Stunden |
| DEM Tiles | ~15 GB | ~2-3 Stunden |
**Gesamtspeicherbedarf nach Setup: ~350 GB**
---
## API Endpoints
```
# Tiles
GET /api/v1/tiles/{z}/{x}/{y}.pbf → Vector Tile
GET /api/v1/tiles/style.json → MapLibre Style
GET /api/v1/tiles/metadata → Tile Metadata
GET /api/v1/tiles/bounds → Germany Bounds
# Terrain
GET /api/v1/terrain/{z}/{x}/{y}.png → Heightmap (Terrain-RGB)
GET /api/v1/terrain/hillshade/{z}/{x}/{y}.png → Hillshade
GET /api/v1/terrain/elevation?lat=&lon= → Point Elevation
GET /api/v1/terrain/metadata → DEM Metadata
# AOI (Area of Interest)
POST /api/v1/aoi → Create AOI
GET /api/v1/aoi/{id} → Get Status
GET /api/v1/aoi/{id}/manifest.json → Unity Manifest
POST /api/v1/aoi/validate → Validate Polygon
GET /api/v1/aoi/templates/mainau → Mainau Demo
# Learning Nodes
POST /api/v1/learning/generate → Generate with LLM
GET /api/v1/learning/templates → Available Themes
GET /api/v1/learning/{aoi_id}/nodes → Get Nodes
GET /api/v1/learning/statistics → Stats
```
---
## Nächste Schritte
1. **Container starten (ohne Downloads):**
```bash
docker compose up -d geo-service
```
2. **Health Check testen:**
```bash
curl http://localhost:8088/health
```
3. **Frontend testen:**
```
http://localhost:3001/geo-lernwelt
```
4. **Downloads starten (wenn bereit):**
```bash
# OSM Download (~6 Min)
docker exec breakpilot-pwa-geo-service /app/scripts/download_osm.sh
# DEM Download (~35 Min)
docker exec breakpilot-pwa-geo-service /app/scripts/download_dem.sh
```
5. **Tile-Generierung (nach Downloads):**
```bash
# OSM Import (~2-4h)
docker exec breakpilot-pwa-geo-service /app/scripts/import_osm.sh
# PMTiles Generation (~12-24h)
docker exec breakpilot-pwa-geo-service /app/scripts/generate_tiles.sh
```
---
## Lizenz-Compliance
### Zugelassene Quellen
- ✅ OpenStreetMap (ODbL)
- ✅ Copernicus DEM (Copernicus License)
- ✅ OpenAerialMap (CC-BY 4.0)
### VERBOTEN
- ❌ Google Maps/Earth
- ❌ Bing Maps
- ❌ Apple Maps
- ❌ HERE
---
## Wichtige Dateien
| Datei | Pfad |
|-------|------|
| Haupt-Plan | `/Users/benjaminadmin/.claude/plans/stateful-hugging-kahan.md` |
| Backend | `/Users/benjaminadmin/Projekte/breakpilot-pwa/geo-service/` |
| Frontend | `/Users/benjaminadmin/Projekte/breakpilot-pwa/studio-v2/app/geo-lernwelt/` |
| Docker Config | `/Users/benjaminadmin/Projekte/breakpilot-pwa/docker-compose.yml` |
---
## Kontakt bei Fragen
Dieser Service wurde gemäß dem Plan in `/Users/benjaminadmin/.claude/plans/stateful-hugging-kahan.md` implementiert.