Entwicklungs-Übersicht¶
Dieser Guide behandelt alles, was zum Einrichten einer lokalen Entwicklungsumgebung, zum Ausführen der Applikation und zum Beitragen zu TCM365 benötigt wird.
Voraussetzungen¶
Stellen Sie sicher, dass die folgenden Tools installiert sind:
| Tool | Version | Zweck |
|---|---|---|
| Node.js | 18+ | JavaScript Runtime |
| npm | 9+ | Package Manager |
| PostgreSQL | 15+ | Primäre Datenbank |
| Redis | 7+ | Cache und Rate Limiting (optional) |
| Git | 2.30+ | Versionskontrolle |
| Docker | 24+ | Container Runtime (optional) |
Redis ist optional
TCM365 fällt auf In-Memory Rate Limiting und Token Blacklisting zurück, wenn Redis nicht verfügbar ist. Für lokale Entwicklung kann Redis komplett uebersprungen werden.
Schnellstart¶
Automatisiertes Setup (empfohlen)¶
Das Projekt beinhaltet automatisierte Setup-Skripte, die Umgebungskonfiguration, Dependency-Installation, Datenbank-Initialisierung und Admin-Benutzer-Erstellung uebernehmen:
Setup-Modi:
| Modus | Beschreibung |
|---|---|
| Normal Setup | Standardinstallation (behaelt bestehende Daten) |
| Upgrade | Dependencies aktualisieren und Migrationen ausführen |
| Repair | Probleme beheben durch Datenbank-Reset |
| Clean Install | Komplett-Neustart (löscht alle Daten) |
Manuelles Setup¶
Falls Sie das manuelle Setup bevorzugen:
# 1. Repository klonen
git clone <repository-url>
cd tcm_dev1
# 2. Datenbankdienste starten (via Docker)
cd infrastructure/docker
docker compose -f docker-compose.local.yml up -d
cd ../..
# 3. Backend Dependencies installieren
cd backend-js
npm ci
# 4. Umgebung konfigurieren
cp .env.example .env
# .env mit Ihren Datenbank-Credentials bearbeiten
# 5. Datenbank-Migrationen ausführen
npm run migration:run
# 6. Admin-Benutzer erstellen
npm run db:seed
# 7. Backend Dev Server starten
npm run start:dev
# 8. In einem neuen Terminal: Frontend installieren und starten
cd frontend
npm ci
npm run dev
Standard-Credentials¶
Nach dem Setup können Sie sich anmelden mit:
| Feld | Wert |
|---|---|
admin@tcm.local |
|
| Passwort | Admin123!TCM |
| Rolle | SUPER_ADMIN |
Standard-Passwort ändern
Ändern Sie das Standard-Admin-Passwort umgehend nach der ersten Anmeldung, insbesondere in Staging- oder Produktionsumgebungen.
Entwicklungsbefehle¶
Backend (NestJS / TypeScript)¶
Alle Backend-Befehle werden aus dem backend-js/ Verzeichnis ausgeführt:
| Befehl | Beschreibung |
|---|---|
npm ci |
Dependencies installieren (Clean Install) |
npm run start:dev |
Dev Server mit Hot Reload starten |
npm run build |
Produktion Build |
npm run start:prod |
Produktions-Server starten |
npm run migration:run |
Ausstehende Datenbank-Migrationen ausführen |
npm run migration:generate src/database/migrations/Name |
Neue Migration generieren |
npm run migration:revert |
Letzte Migration rückgängig machen |
npm run db:seed |
Admin-Benutzer erstellen oder aktualisieren |
npm test |
Alle Tests ausführen |
npm run test:watch |
Tests im Watch-Modus ausführen |
npm run test:cov |
Tests mit Coverage Report ausführen |
npm run test:e2e |
End-to-End Tests ausführen |
npm run format |
Code mit Prettier formatieren |
npm run lint |
Code mit ESLint prüfen |
Backend Port
Das Backend läuft auf Port 8000 (nicht dem NestJS Standard 3000). Dies wird in backend-js/.env über die Variable PORT konfiguriert.
Frontend (Vue 3 / Vite)¶
Alle Frontend-Befehle werden aus dem frontend/ Verzeichnis ausgeführt:
| Befehl | Beschreibung |
|---|---|
npm ci |
Dependencies installieren (Clean Install) |
npm run dev |
Vite Dev Server mit HMR starten |
npm run build |
Produktion Build |
npm run format |
Code mit Prettier formatieren |
npm run test:e2e |
Playwright End-to-End Tests ausführen |
npm run test:e2e:api |
Nur API E2E Tests (SKIP_SERVER=1) |
Der Vite Dev Server leitet API Requests an http://localhost:8000 weiter (konfiguriert in frontend/vite.config.js).
Docker¶
| Befehl | Beschreibung |
|---|---|
docker compose -f docker-compose.local.yml up -d |
Nur PostgreSQL + Redis starten (Dev) |
docker compose up --build |
Vollständiger Stack (alles containerisiert) |
docker compose -f docker-compose.coolify.yml up -d |
Coolify Deployment Stack |
Häufige Entwicklungsaufgaben¶
Neuen API Endpoint hinzufügen¶
-
DTOs erstellen oder aktualisieren in
backend-js/src/modules/{module}/dto/ -
Service-Methode hinzufügen in
backend-js/src/modules/{module}/{module}.service.ts -
Controller-Methode hinzufügen in
backend-js/src/modules/{module}/{module}.controller.ts@Post() @UseGuards(JwtAuthGuard, RolesGuard) @Roles(UserRole.TENANT_ADMIN) @ApiOperation({ summary: 'Neues Beispiel erstellen' }) @ApiResponse({ status: 201, description: 'Beispiel erstellt' }) async create( @Body() dto: CreateExampleDto, @CurrentUser() user: User, ) { return this.exampleService.create(dto, user); } -
Swagger Decorators hinzufügen (
@ApiOperation,@ApiResponse,@ApiTags) -
Tests schreiben in
backend-js/src/modules/{module}/{module}.service.spec.ts
Neue Datenbank-Entity hinzufügen¶
-
Entity erstellen in
backend-js/src/entities/{entity-name}.entity.ts -
Entity importieren in
backend-js/src/database/data-source.ts -
Migration generieren:
-
Migration ausführen:
-
DTOs erstellen im
dto/Ordner des Moduls
Tenant-bezogene Entities
Wenn die Entity tenant-bezogen ist (Data Plane), muss die Migration die Tabelle auch in bestehenden tenant_{uuid} Schemas erstellen, nicht nur im public Schema. Orientieren Sie sich an bestehenden Migrationen als Referenz.
Neue Frontend-Seite hinzufügen¶
-
View erstellen in
frontend/src/views/{ViewName}.vue -
Route hinzufügen in
frontend/src/router/index.js -
Komponenten erstellen in
frontend/src/components/{feature}/falls nötig -
API Service-Methoden hinzufügen in
frontend/src/services/{feature}Service.ts -
Pinia Store erstellen oder aktualisieren falls nötig in
frontend/src/stores/
Path Aliases¶
Die Backend TypeScript Konfiguration definiert Path Aliases für saubere Imports:
| Alias | Verweist auf |
|---|---|
@/* |
src/* |
@config/* |
src/config/* |
@database/* |
src/database/* |
@entities/* |
src/entities/* |
@modules/* |
src/modules/* |
@common/* |
src/common/* |
// Statt relativer Imports:
import { User } from '../../../entities/user.entity';
// Path Aliases verwenden:
import { User } from '@entities/user.entity';
Diese sind in backend-js/tsconfig.json definiert und werden sowohl vom TypeScript Compiler als auch vom Jest Test Runner aufgeloest.
Debugging¶
Backend Debugging¶
Structured Logs:
Alle Backend Requests erzeugen strukturierte Logs mit Korrelations-IDs:
2026-03-05T14:30:00Z | INFO | SnapshotsController [req=abc123 op=create user=admin] | Snapshot created
SQL Query Logging:
Aktivieren Sie ausfuehrliches SQL Logging durch Setzen in backend-js/.env:
Diagnostics Endpoint:
Rufen Sie den Diagnostics Endpoint für den vollständigen Systemstatus auf:
Dies gibt den Status für Datenbank, Redis, Storage und Azure AD Verbindungen zurück.
Swagger UI:
Nutzen Sie die interaktive Swagger UI unter http://localhost:8000/api/docs zum direkten Testen von Endpoints mit Authentifizierungs-Unterstützung.
Frontend Debugging¶
Vue Devtools:
Installieren Sie die Vue Devtools Browser-Erweiterung für:
- Component Tree Inspektion
- Pinia Store State
- Vue Router State
- Event Tracking
Network Tab:
Überwachen Sie API Aufrufe im Browser Network Tab. Achten Sie auf X-Request-ID Header zur Korrelation mit Backend Logs.
Console Errors:
Prüfen Sie die Browser-Konsole auf JavaScript Fehler und unbehandelte Promise Rejections.
Umgebungsvariablen¶
Wichtige Umgebungsvariablen für die Entwicklung. Die vollständige Liste finden Sie in backend-js/.env.example.
| Variable | Standard | Beschreibung |
|---|---|---|
PORT |
8000 |
Backend Server Port |
APP_SECRET_KEY |
-- | JWT Signing Key (min. 32 Zeichen) |
APP_DEBUG |
false |
Debug-Modus aktivieren |
DATABASE_HOST |
localhost |
PostgreSQL Host |
DATABASE_PORT |
5432 |
PostgreSQL Port |
DATABASE_USERNAME |
tcm_user |
PostgreSQL Benutzername |
DATABASE_PASSWORD |
tcm_password |
PostgreSQL Passwort |
DATABASE_NAME |
tcm_db |
PostgreSQL Datenbankname |
DATABASE_LOGGING |
false |
SQL Query Logging aktivieren |
STORAGE_BACKEND |
local |
Storage: local oder azure |
LOCAL_STORAGE_PATH |
./data |
Pfad für lokalen Dateispeicher |
REDIS_URL |
-- | Redis Connection URL (optional) |
CORS_ORIGINS |
localhost:* |
Erlaubte CORS Origins |
Lokale Entwicklung
Für lokale Entwicklung setzen Sie STORAGE_BACKEND=local und lassen Azure-bezogene Variablen weg. Redis kann ebenfalls weggelassen werden -- die Applikation fällt auf In-Memory Alternativen zurück.
Weitergehende Informationen¶
- Code-Konventionen -- Codierungsstandards und Styleguide
- Testing Guide -- Test-Framework, Patterns und Coverage
- Troubleshooting -- Häufige Probleme und Lösungen
- Contributing Guide -- Wie Sie zu TCM365 beitragen