Skip to content

Backend-Architektur

Das TCM365 Backend ist eine Node.js/TypeScript-Anwendung auf NestJS 10 mit 36 Feature-Modulen, 35 TypeORM Entities und einer umfassenden REST API. Diese Seite behandelt die Modulstruktur, Kern-Services, API-Design und Entwicklungsmuster.


Technology Stack

Technologie Version Zweck
Node.js 18+ JavaScript Runtime
NestJS 10 Application Framework
TypeScript 5 Typsichere Entwicklung (Strict Mode)
TypeORM 0.3 Object-Relational Mapping
Express 4 HTTP Server (NestJS Default)
Passport 0.7 Authentifizierungsstrategien
class-validator Latest DTO-Validierungsdekoratoren
class-transformer Latest DTO-Transformation
nestjs/jwt Latest JWT Token Handling
azure/msal-node Latest Azure AD-Authentifizierung
microsoft/microsoft-graph-client Latest Microsoft Graph API
ioredis Latest Redis Client
Helmet Latest HTTP Security Headers
Swagger / OpenAPI 3.0 API-Dokumentation

Modulstruktur

TCM365 folgt dem NestJS Module-per-Feature-Pattern. Jedes Modul kapselt einen Controller, Service, DTOs und modulspezifische Entities oder Utilities.

36 Feature-Module

backend-js/src/modules/
├── admin/                  # Audit Logs, Systemgesundheit, Diagnostik
├── ai-analysis/            # OpenAI / Azure OpenAI Konfigurationsanalyse
├── anomaly-detection/      # ML-basierte Anomalieerkennung und Custom Probes
├── audit-evidence/         # Audit Evidence Collection und Management
├── audit-log/              # Unveraenderliches Action Logging
├── auth/                   # Login, Token Refresh, Passwortänderung
├── baselines/              # Security Baseline Management und Compliance Engine
├── bcdr/                   # BC/DR Test Management mit RTO/RPO Tracking
├── blueprints/             # Configuration Template Management
├── ca-whatif/              # Conditional Access What-If Simulation
├── change-management/      # Change Requests und Approval Chains
├── compliance/             # Compliance-Bewertung über Frameworks
├── configuration-drift/    # Drift Detection und Monitoring
├── copilot-readiness/      # Copilot Readiness Assessment (44 Checks)
├── data-viewer/            # Datenbanktabellen-Viewer (Admin)
├── diff/                   # Konfigurationsvergleich und Export
├── email-security/         # SPF/DKIM/DMARC DNS-Validierung
├── groups/                 # Benutzergruppen-Management
├── health/                 # Health Check Endpoint
├── incidents/              # Incident Management (NIS2-Fristen)
├── notifications/          # Multi-Channel-Benachrichtigungen
├── registry/               # UTCM Resource Registry
├── reports/                # Report-Generierung (5 Report-Typen)
├── risk-assessment/        # Risk Assessment mit Heat Maps
├── rollback/               # Konfigurations-Rollback-Ausführung
├── scheduler/              # Background Job Scheduling
├── settings/               # System Settings Management
├── setup/                  # System-Initialisierungs-Wizard
├── snapshots/              # Snapshot Capture, Auflistung, Vergleich
├── tenants/                # Multi-Vendor Tenant Management + Feature Flags
├── users/                  # Benutzer-CRUD-Management
├── vendor-registry/        # VendorAdapter Registry und Multi-Vendor-Ressourcen
├── workflows/              # Task Scheduling und Ausführung
├── zscaler-client/         # Zscaler ZIA/ZPA API Clients
└── atlassian-client/       # Atlassian Cloud API Clients (Jira, Confluence, Admin)

Modulaufbau

Jedes Modul folgt einer konsistenten internen Struktur:

modules/snapshots/
├── snapshots.module.ts        # Moduldefinition (Imports, Providers, Controllers)
├── snapshots.controller.ts    # REST-Endpoints mit Dekoratoren
├── snapshots.service.ts       # Geschaeftslogik
├── dto/                       # Data Transfer Objects
│   ├── create-snapshot.dto.ts
│   ├── update-snapshot.dto.ts
│   └── snapshot-filter.dto.ts
└── snapshots.service.spec.ts  # Unit Tests

Kern-Services

GraphService

Pfad: backend-js/src/services/graph.service.ts (1.704 Zeilen)

Der Microsoft Graph API Client für direkte API-Operationen gegen Entra ID, Intune und Defender-Konfigurationen.

Fähigkeit Beschreibung
Entra ID Conditional Access Policies, Named Locations, Authentication Methods, Directory Settings
Intune Device Compliance, Configuration Profiles, Enrollment Configs, Endpoint Security
Defender Secure Score, Security Alerts, Threat Indicators
Audit Logs Directory Audit Log-Abfragen für Change Attribution

UtcmService

Pfad: backend-js/src/services/utcm.service.ts (1.438 Zeilen)

Der UTCM (Unified Tenant Configuration Management) API Client für Teams- und Exchange-Konfigurationserfassung.

Fähigkeit Beschreibung
Snapshot Jobs UTCM Snapshot Jobs erstellen und überwachen
Configuration Monitors UTCM Drift Monitors verwalten
Quota Tracking UTCM API Quota-Nutzung verfolgen
Resource Types Teams- und Exchange-Ressourcentyp-Handling

VendorAdapterRegistry

Pfad: backend-js/src/modules/vendor-registry/

Die zentrale Registry für vendor-spezifische Adapter-Implementierungen. Siehe Multi-Vendor-Architektur für Details.

Zscaler Clients

Pfad: backend-js/src/modules/zscaler-client/

Service Beschreibung
ZscalerAuthFactory ZIA Cookie Auth (28-Min TTL) + ZPA OAuth 2.0 (5-Min Pre-Expiry Buffer)
ZscalerRateLimiter Sliding-Window-Throttle (ZIA: 80 Read/10s, 10 Write/10s; ZPA: 15/10s)
ZscalerZiaClient ZIA REST API (12 Endpoint-Gruppen)
ZscalerZpaClient ZPA REST API (9 Endpoint-Gruppen)

Atlassian Clients

Pfad: backend-js/src/modules/atlassian-client/

Service Beschreibung
AtlassianAuthFactory OAuth 2LO-Authentifizierung mit Token-Verwaltung
AtlassianRateLimiter Points-basiertes Rate Limiting für Atlassian APIs
AtlassianJiraClient Jira REST API v3 (16 Getter-Methoden)
AtlassianConfluenceClient Confluence REST API v2
AtlassianAdminClient Atlassian Admin REST API mit Cursor-Body-Pagination

Guards, Dekoratoren und Strategien

Authentifizierungs-Guards

Guard Zweck
JwtAuthGuard Validiert JWT Bearer Tokens auf geschuetzten Routen
LocalAuthGuard Validiert E-Mail/Passwort-Credentials für Login
RolesGuard Erzwingt minimale Rollenstufe für Routenzugriff
PermissionsGuard Erzwingt spezifische resource:action-Berechtigungen

Custom-Dekoratoren

Dekorator Zweck Beispiel
@CurrentUser() Injiziert den authentifizierten Benutzer in den Handler @CurrentUser() user: User
@Roles() Spezifiziert minimal erforderliche Rolle @Roles(UserRole.TENANT_ADMIN)
@Permissions() Spezifiziert erforderliche Berechtigungen @Permissions('tenants:write')
@Public() Markiert eine Route als öffentlich zugänglich (kein Auth) @Public() auf Health Check

Passport-Strategien

Strategie Zweck
JwtStrategy Extrahiert und validiert JWT aus dem Authorization: Bearer-Header
LocalStrategy Validiert E-Mail + bcrypt-Passwort-Hash für Login

API Routes

Alle Routen sind mit /api/v1/ praefixiert (ausser Health Check). Die vollständige API ist über Swagger unter /api/docs dokumentiert.

Endpoint-Gruppen

Gruppe Pfad Auth Beschreibung
Health /health Public Datenbank-Konnektivitaetspruefung
Auth /api/v1/auth Gemischt Login, Logout, Token Refresh, Profil
Users /api/v1/users Admin Benutzer-CRUD-Management
Groups /api/v1/groups Admin Benutzergruppen-Management
Tenants /api/v1/tenants Auth Multi-Vendor Tenant CRUD
Snapshots /api/v1/snapshots Auth Capture, Auflistung, Vergleich
Diff /api/v1/diff Auth Konfigurationsvergleich, JSON/HTML-Export
Rollback /api/v1/rollback Auth Rollback ausführen und verfolgen
Drift /api/v1/configuration-drift Auth Drift Detection und Monitoring
Baselines /api/v1/baselines Auth Security Baseline Management
Compliance /api/v1/compliance Auth Framework-Compliance-Bewertung
Blueprints /api/v1/blueprints Auth Configuration Template Management
AI Analysis /api/v1/ai-analysis Auth KI-gestützte Analyse
Reports /api/v1/reports Auth Report-Generierung und -Abruf
Notifications /api/v1/notifications Auth Benachrichtigungskanal-Management
Registry /api/v1/registry Auth UTCM Resource Registry
CA What-If /api/v1/ca-whatif Auth Conditional Access Simulation
Email Security /api/v1/email-security Auth SPF/DKIM/DMARC-Validierung
Incidents /api/v1/incidents Auth Incident Management (NIS2)
Risk Assessment /api/v1/risk-assessment Auth Risikobewertungen und Heat Maps
Change Mgmt /api/v1/change-management Auth Change Requests und Approvals
BC/DR /api/v1/bcdr Auth BC/DR Test Management
Audit Evidence /api/v1/audit-evidence Auth Audit Evidence Collection
Anomaly /api/v1/anomaly-detection Auth ML Anomaly Detection, Custom Probes
Copilot Readiness /api/v1/copilot-readiness Auth Copilot Readiness Assessment (44 Checks)
Workflows /api/v1/workflows Auth Workflow CRUD und Ausführung
Settings /api/v1/settings Admin System Settings Management
Setup /api/v1/setup Admin System-Initialisierungs-Wizard
Admin /api/v1/admin Admin Audit Logs, Systemgesundheit
Data Viewer /api/v1/data-viewer Admin Datenbanktabellen-Viewer
Diagnostics /api/v1/diagnostics Admin Systemdiagnostik und Reparatur

Path Aliases

TypeScript Path Aliases sind in backend-js/tsconfig.json für sauberere Imports konfiguriert:

Alias Mappt auf Verwendung
@/* src/* Allgemeine Source-Imports
@config/* src/config/* Konfigurationsdateien
@database/* src/database/* Datenbankkonfiguration
@entities/* src/entities/* TypeORM Entities
@modules/* src/modules/* Feature-Module
@common/* src/common/* Gemeinsame Utilities

Beispiel:

import { User } from '@entities/user.entity';
import { JwtAuthGuard } from '@common/guards/jwt-auth.guard';
import { utcmConstants } from '@config/utcm-constants';

Middleware und Interceptors

Request Pipeline

Jede Anfrage durchlaeuft die folgende Pipeline:

Request
  --> Helmet (Security Headers)
  --> CORS-Validierung
  --> Rate Limiter (Redis oder In-Memory)
  --> X-Request-ID-Zuweisung
  --> JwtAuthGuard (wenn geschützt)
  --> RolesGuard / PermissionsGuard
  --> Controller-Methode
  --> AuditLog Interceptor (zeichnet Aktion auf)
  --> AllExceptionsFilter (faengt Fehler ab)
  --> X-Process-Time Header
Response

AuditLog Interceptor

Der AuditLogInterceptor zeichnet automatisch alle zustandsaendernden Operationen (POST, PUT, PATCH, DELETE) in der audit_logs-Tabelle auf mit:

  • Request ID für Korrelation
  • Benutzer-ID und Rolle
  • Ausgefuehrte Aktion
  • Zielressource
  • Request/Response-Metadaten
  • Zeitstempel

AllExceptionsFilter

Der globale Ausnahmefilter faengt alle unbehandelten Exceptions ab und liefert konsistente Fehlerantworten:

{
  "statusCode": 500,
  "message": "Internal server error",
  "error": "InternalServerError",
  "requestId": "req-abc-123",
  "timestamp": "2024-01-15T10:30:00.000Z"
}

Dependency Injection Patterns

TCM365 folgt NestJS Dependency Injection-Konventionen:

Service Injection

@Injectable()
export class SnapshotService {
  constructor(
    @InjectRepository(Snapshot)
    private readonly snapshotRepo: Repository<Snapshot>,
    private readonly vendorRegistry: VendorAdapterRegistry,
    private readonly tenantAccess: TenantAccessService,
    private readonly configService: ConfigService,
  ) {}
}

Modulregistrierung

@Module({
  imports: [
    TypeOrmModule.forFeature([Snapshot]),
    VendorRegistryModule,
  ],
  controllers: [SnapshotController],
  providers: [SnapshotService],
  exports: [SnapshotService],
})
export class SnapshotsModule {}

Konfigurationszugriff

Umgebungsvariablen werden ausschliesslich über den NestJS ConfigService zugegriffen, niemals über process.env:

// Korrekt
const port = this.configService.get<number>('PORT', 8000);

// Falsch - niemals so
const port = process.env.PORT;

Die Konfiguration ist zentralisiert in backend-js/src/config/configuration.ts und wird beim Start über Joi-Schemas in backend-js/src/config/validation.schema.ts validiert.


Testing

Das Backend hat 780+ bestandene Test-Specs, die alle wichtigen Services abdecken, darunter 70 Cross-Tenant-Isolationstests:

cd backend-js

npm test                # Alle Tests ausführen
npm run test:watch      # Watch-Modus
npm run test:cov        # Coverage-Report
npm run test:e2e        # End-to-End-Tests

Teststruktur

Tests folgen dem NestJS Testing Module Pattern:

describe('SnapshotService', () => {
  let service: SnapshotService;
  let repository: MockType<Repository<Snapshot>>;

  beforeEach(async () => {
    const module = await Test.createTestingModule({
      providers: [
        SnapshotService,
        { provide: getRepositoryToken(Snapshot), useFactory: repositoryMockFactory },
        // ... weitere gemockte Abhängigkeiten
      ],
    }).compile();

    service = module.get(SnapshotService);
  });

  it('should create a snapshot', async () => {
    // Test-Implementierung
  });
});

Testabdeckungsbereiche

  • Kern-Services: GraphService, UtcmService, AuthService
  • Feature-Module: Snapshots, Rollback, Baselines, Compliance, Drift, Copilot Readiness
  • Vendor-Adapter: Zscaler Auth, Rate Limiter, ZIA Client, ZPA Client
  • Sicherheit: TenantAccessService, Cross-Tenant-Isolation (70 Tests)
  • Utilities: Passwort-Hashing, Berechtigungsaufloesung, JWT-Handling

Entwicklungsbefehle

Befehl Beschreibung
npm run start:dev Start mit Hot-Reload (Entwicklung)
npm run build TypeScript zu JavaScript kompilieren
npm run start:prod Produktions-Build starten
npm run migration:run Ausstehende Migrationen ausführen
npm run migration:generate Migration aus Entity-Änderungen generieren
npm run migration:revert Letzte Migration zurücksetzen
npm run db:seed Admin-User erstellen/aktualisieren
npm test Test-Suite ausführen
npm run test:cov Tests mit Coverage ausführen
npm run format Code mit Prettier formatieren
npm run lint Code mit ESLint prüfen