docs: Projekt-API in API-Docs, Developer Portal + MKDocs ergaenzen
Some checks failed
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / test-go-ai-compliance (push) Failing after 38s
CI / test-python-backend-compliance (push) Successful in 1m0s
CI / test-python-document-crawler (push) Successful in 23s
CI / test-python-dsms-gateway (push) Successful in 20s
Some checks failed
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / test-go-ai-compliance (push) Failing after 38s
CI / test-python-backend-compliance (push) Successful in 1m0s
CI / test-python-document-crawler (push) Successful in 23s
CI / test-python-dsms-gateway (push) Successful in 20s
- endpoints.ts: Neues Modul "Projekte — Multi-Projekt-Verwaltung" (5 Endpoints) - Developer Portal: projectId im Beispiel-Code, Multi-Projekt als Feature - multi-tenancy.md: Verweis auf multi-project.md + neue Tests Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -131,6 +131,21 @@ export const apiModules: ApiModule[] = [
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
id: 'projects',
|
||||||
|
name: 'Projekte — Multi-Projekt-Verwaltung',
|
||||||
|
service: 'python',
|
||||||
|
basePath: '/api/compliance/v1/projects',
|
||||||
|
exposure: 'internal',
|
||||||
|
endpoints: [
|
||||||
|
{ method: 'GET', path: '/', description: 'Alle Projekte des Tenants auflisten', service: 'python' },
|
||||||
|
{ method: 'POST', path: '/', description: 'Neues Projekt erstellen (optional mit Stammdaten-Kopie)', service: 'python' },
|
||||||
|
{ method: 'GET', path: '/{project_id}', description: 'Einzelnes Projekt laden', service: 'python' },
|
||||||
|
{ method: 'PATCH', path: '/{project_id}', description: 'Projekt aktualisieren (Name, Beschreibung)', service: 'python' },
|
||||||
|
{ method: 'DELETE', path: '/{project_id}', description: 'Projekt archivieren (Soft Delete)', service: 'python' },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
id: 'compliance-scope',
|
id: 'compliance-scope',
|
||||||
name: 'Compliance Scope — Geltungsbereich',
|
name: 'Compliance Scope — Geltungsbereich',
|
||||||
|
|||||||
@@ -102,6 +102,7 @@ function App() {
|
|||||||
return (
|
return (
|
||||||
<SDKProvider
|
<SDKProvider
|
||||||
tenantId="your-tenant-id"
|
tenantId="your-tenant-id"
|
||||||
|
projectId="your-project-id"
|
||||||
apiKey={process.env.BREAKPILOT_API_KEY}
|
apiKey={process.env.BREAKPILOT_API_KEY}
|
||||||
>
|
>
|
||||||
<ComplianceDashboard />
|
<ComplianceDashboard />
|
||||||
@@ -197,10 +198,16 @@ function ComplianceDashboard() {
|
|||||||
{/* Features */}
|
{/* Features */}
|
||||||
<h2>Hauptfunktionen</h2>
|
<h2>Hauptfunktionen</h2>
|
||||||
<div className="grid grid-cols-1 md:grid-cols-2 gap-4 not-prose">
|
<div className="grid grid-cols-1 md:grid-cols-2 gap-4 not-prose">
|
||||||
|
<div className="p-4 border border-gray-200 rounded-lg">
|
||||||
|
<h4 className="font-medium text-gray-900 mb-2">Multi-Projekt & Multi-Tenant</h4>
|
||||||
|
<p className="text-sm text-gray-600">
|
||||||
|
Mehrere Compliance-Projekte pro Tenant mit isolierten Stammdaten und paralleler Bearbeitung
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
<div className="p-4 border border-gray-200 rounded-lg">
|
<div className="p-4 border border-gray-200 rounded-lg">
|
||||||
<h4 className="font-medium text-gray-900 mb-2">19-Schritt-Workflow</h4>
|
<h4 className="font-medium text-gray-900 mb-2">19-Schritt-Workflow</h4>
|
||||||
<p className="text-sm text-gray-600">
|
<p className="text-sm text-gray-600">
|
||||||
Geführter Compliance-Prozess von Use Case bis DSR-Portal
|
Gefuehrter Compliance-Prozess von Use Case bis DSR-Portal
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div className="p-4 border border-gray-200 rounded-lg">
|
<div className="p-4 border border-gray-200 rounded-lg">
|
||||||
@@ -218,7 +225,7 @@ function ComplianceDashboard() {
|
|||||||
<div className="p-4 border border-gray-200 rounded-lg">
|
<div className="p-4 border border-gray-200 rounded-lg">
|
||||||
<h4 className="font-medium text-gray-900 mb-2">Export</h4>
|
<h4 className="font-medium text-gray-900 mb-2">Export</h4>
|
||||||
<p className="text-sm text-gray-600">
|
<p className="text-sm text-gray-600">
|
||||||
PDF, JSON, ZIP-Export für Audits und Dokumentation
|
PDF, JSON, ZIP-Export fuer Audits und Dokumentation
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -54,7 +54,14 @@ Der Next.js-Proxy setzt automatisch den `X-Tenant-ID` Header:
|
|||||||
headers['X-Tenant-ID'] = clientTenantId || process.env.DEFAULT_TENANT_ID || '9282a473-...'
|
headers['X-Tenant-ID'] = clientTenantId || process.env.DEFAULT_TENANT_ID || '9282a473-...'
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Multi-Projekt pro Tenant
|
||||||
|
|
||||||
|
Seit Migration 039 kann jeder Tenant mehrere Compliance-Projekte anlegen. Jedes Projekt hat einen eigenen SDK-State und eigene Stammdaten (CompanyProfile).
|
||||||
|
|
||||||
|
Details: [Multi-Projekt-Architektur](multi-project.md)
|
||||||
|
|
||||||
## Tests
|
## Tests
|
||||||
|
|
||||||
- 20 Tests in `test_vvt_tenant_isolation.py`
|
- 20 Tests in `test_vvt_tenant_isolation.py`
|
||||||
- UUID-Validierung, Header-/Query-Precedence, Model-Column-Checks, Route-Isolation
|
- UUID-Validierung, Header-/Query-Precedence, Model-Column-Checks, Route-Isolation
|
||||||
|
- 6 Test-Klassen in `test_project_routes.py` — Projekt-CRUD, Tenant-Isolation, State-Isolation
|
||||||
|
|||||||
Reference in New Issue
Block a user