# shape3d

Kurzbeschreibung
Diese App zeigt eine 3D-Druck-Materialmatrix: Welche Materialien laufen auf welchen Druckern, inkl. Eigenschaften, Anforderungen und Sicherheits-/Emissionsindikatoren. Die Oberfläche lädt Daten per API und rendert sie als Tabelle mit optionalem Drucker-Vergleich.

Was wird angezeigt
- Materialliste mit Metadaten (z. B. Eigenschaften, Tg, Düsen-/Plattenanforderung, Anwendung, Kinder-Sicherheit, Emission).
- Pro ausgewähltem Drucker eine Kompatibilitäts-Spalte (voll/teilweise/mit Zusatz/nicht unterstützt).
- Auswahl: Einzelansicht (ein Drucker) oder Vergleich (mehrere Drucker).

Datenquellen (flexibel gehalten)
Die App ist so aufgebaut, dass UI und Datenzugriff getrennt sind. Je nach Reimport/Neustrukturierung können Dateinamen und Pfade abweichen, solange die folgenden Rollen weiterhin existieren:

- Einstiegspunkt (z. B. `public/index.php`): Lädt eine Seite/Ansicht, die das Layout und die Matrix enthält.
- Matrix-Ansicht (z. B. `partials/landing/main/material-matrix.php`): Enthält das Markup + JS, das die Daten lädt und die Tabelle rendert.
- API-Endpoints (z. B. `/api/*` über das Routing): Stellen JSON bereit für
  - Drucker-Liste
  - Material-Liste
  - Drucker-spezifische Material-Kompatibilität
- DB-Zugriff (z. B. `src/App/Database.php`): Baut eine DB-Verbindung und wird von den API-Endpunkten genutzt.

Aktuelle DB-Struktur (Schema-Orientierung)
Das Schema besteht aus drei Kern-Tabellen, die für die Materialmatrix benötigt werden:

1) materials
- Stammdaten der Materialien (Code/Name/Short-Desc, Eigenschaften, Tg, Anforderungen, Anwendung).
- Flags für Kinder-Sicherheit und Emission.
- `is_active` steuert Sichtbarkeit.

2) printers
- Stammdaten der Drucker (Name/Brand/Modell, Temperaturgrenzen, Bauvolumen, Notes).
- `is_active` steuert Sichtbarkeit.

3) printer_material_support
- Zuordnung Drucker ↔ Material (M:N).
- `support_level` beschreibt die Kompatibilität.
- `partial_reason` / `extra_info` liefern Detailhinweise.

Datenfluss (funktional)
1) UI lädt die Druckerliste.
2) Für den gewählten Drucker (oder mehrere) werden Materialien inkl. Support-Level geladen.
3) Die Tabelle rendert Materialinfos und pro Drucker eine Support-Badge-Zelle.

Hinweise für Reimport/Neuaufbau
- Die Datei-/Ordnernamen dürfen sich ändern, solange die Rollen (UI, API, DB-Zugriff) abgebildet sind.
- Die API muss weiterhin JSON liefern, das die Matrix-Ansicht erwarten kann:
  - `printer`: Drucker-Datensatz
  - `materials`: Liste der Materialien mit optionalem `support_level` + Zusatzinfos.
- Die Datenbank kann migriert werden, solange Material-, Drucker- und Zuordnungsdaten semantisch erhalten bleiben.
- Für DB-Zugriff muss `APP_DB_ENABLED` aktiviert sein; die Zugangsdaten sollten per ENV-Variablen kommen.

Sicherheit
- Zugangsdaten sollten nicht im Repo liegen. Nutze ENV-Variablen oder separate Configs pro Environment.
