feat(M1): Universal-MiniApp-Registry — Plugin-Layer, permission fail-closed, Lifecycle, /api/v1/miniapps
Check Cross-Plugin Imports / check (push) Has been cancelled
Check Cross-Plugin Imports / check (push) Has been cancelled
- app/plugins/miniapp_registry.py: Registry aus kommunikation in Plugin-Layer gehoben (Plattform-Konzept, hosts chat/dashboard/window)
- MiniAppDef: permission (fail-closed) + settings_schema + col/row_span + hosts + component + order + builtin
- MiniAppContribution + FrontendDashboardWidget (Manifest-Schema) um M1-Felder erweitert — dashboard_widgets ist Alias von miniapps (ein Contribution-Typ, #359-Philosophie)
- BasePlugin.on_activate: automatische Manifest-Registrierung; on_deactivate: unregister_plugin (nur eigene Apps)
- GET /api/v1/miniapps (server-seitig permission-gefiltert, ?host=) + GET /api/v1/miniapps/{app_id} (403/404 fail-closed)
- kommunikation/miniapp_registry.py = Kompatibilitaets-Bruecke (Bestands-Importer unveraendert)
- Doku: api-documentation.md + plugin-development-guide.md (MiniApp-Beitragsmuster)
TDD: Rot 16 failed -> Gruen 16/16; Regressionen: contracts 23/23, lifecycle+route_order 4/4; ruff clean (M1-Dateien, Vorbestand per Stash bewiesen); create_app OK
This commit is contained in:
@@ -524,6 +524,8 @@ Admin-only. Rebuild regenerates the embedding + TSV; purge sets embedding/TSV to
|
||||
| POST | `/api/v1/reports/einvoice/render` | Rechnungsdaten -> EN16931/XRechnung CII-XML (Phase L5 Format-Layer). |
|
||||
| POST | `/api/v1/reports/einvoice/validate` | Rechnungsdaten pruefen (BT/BG-Pflichtfelder, 422 mit Fehlliste). |
|
||||
| POST | `/api/v1/reports/einvoice/render-for` | E-Invoice fuer Entitaet via einvoice_data()-Contract (Verkaufsmodul-Andockpunkt). |
|
||||
| GET | `/api/v1/miniapps` | Verfuegbare MiniApps (server-seitig permission-gefiltert, ?host=chat\|dashboard\|window) (Phase M1) |
|
||||
| GET | `/api/v1/miniapps/{app_id}` | Einzelne MiniApp (403 ohne Permission, 404 unbekannt) (Phase M1) |
|
||||
|
||||
### entity-links (Entity Linking)
|
||||
|
||||
|
||||
@@ -2710,3 +2710,30 @@ class SalesContract:
|
||||
Validierung + CII-XML-Generierung uebernimmt report_generator (`einvoice.py`,
|
||||
EN16931 BT/BG-Pflichtfelder, kommerzielles Rounding, XRechnung-3.0-Guideline).
|
||||
Kein Beitrag -> `POST /einvoice/render-for` antwortet 404 `no_data_source`.
|
||||
|
||||
## MiniApp-Beitrag (Phase M1 — universal, Chat + Dashboard + Windows)
|
||||
|
||||
MiniApps sind die universalen UI-Bausteine der Plattform. Registrierung:
|
||||
|
||||
1. **Manifest (deklarativ, empfohlen):** `dashboard_widgets`- oder `miniapps`-Eintraege werden bei Plugin-Aktivierung AUTOMATISCH in die Universal-Registry uebernommen (BasePlugin.on_activate). Bestehende Manifeste laufen unveraendert weiter.
|
||||
2. **Programmatisch (z.B. dynamische Apps):** `get_miniapp_registry().register(...)` aus `app.plugins.miniapp_registry`.
|
||||
|
||||
```python
|
||||
# Manifest-Beispiel (beide Formen sind gleichwertig)
|
||||
dashboard_widgets=[FrontendDashboardWidget(
|
||||
id="tasks_summary", label="Tasks", component="@/components/dashboard/TasksSummaryWidget",
|
||||
col_span=1, row_span=1, permission="tasks:read", settings_schema={...},
|
||||
)]
|
||||
miniapps=[MiniAppContribution(
|
||||
app_id="my_app", name="My App", permission="myplugin:read",
|
||||
settings_schema={"type": "object", "properties": {...}},
|
||||
hosts=["chat", "dashboard", "window"], component="@/components/myplugin/MyMiniApp",
|
||||
)]
|
||||
```
|
||||
|
||||
**Regeln:**
|
||||
- `permission` wird server-seitig fail-closed gefiltert (`GET /api/v1/miniapps`, 403 bei Einzel-Lookup)
|
||||
- `settings_schema` speist generische Per-Instanz-Settings-Forms (Dashboard-Builder M3)
|
||||
- `hosts` beschraenkt wo die App erscheinen darf (chat/dashboard/window)
|
||||
- Deaktivierung des Plugins entfernt seine MiniApps automatisch (unregister_plugin)
|
||||
- Alte Chat-Registry-Imports (`kommunikation.miniapp_registry`) funktionieren ueber Kompatibilitaets-Bruecke weiter
|
||||
|
||||
Reference in New Issue
Block a user