# Architektur-Übersicht

---

## Kernprinzipien

### Event-getriebene Pipeline

`pipelineService` hält einen Snapshot der State-Machine und broadcastet Änderungen sofort via WebSocket.

```text
State-Änderung -> PIPELINE_STATE_CHANGED/PIPELINE_PROGRESS -> Frontend-Update
```

### Service-Layer

```text
Route -> Service -> DB/Tool-Execution
```

Routes enthalten kaum Business-Logik.

### Schema-getriebene Settings

Settings sind DB-schema-getrieben (`settings_schema` + `settings_values`), UI rendert dynamisch aus diesen Daten.

---

## Echtzeit-Kommunikation

WebSocket läuft auf `/ws`.

Wichtige Events:

- `PIPELINE_STATE_CHANGED`, `PIPELINE_PROGRESS`, `PIPELINE_QUEUE_CHANGED`
- Disk erkannt, Disk entfernt
- `HARDWARE_MONITOR_UPDATE`
- `SETTINGS_UPDATED`, `SETTINGS_BULK_UPDATED`
- `SETTINGS_SCRIPTS_UPDATED`, `SETTINGS_SCRIPT_CHAINS_UPDATED`, `USER_PRESETS_UPDATED`
- `CRON_JOBS_UPDATED`, `CRON_JOB_UPDATED`
- `PIPELINE_ERROR`, `DISK_DETECTION_ERROR`

---

## Prozessausführung

Externe Tools werden als Child-Processes gestartet (`processRunner`):

- Streaming von stdout/stderr
- Progress-Parsing (`progressParsers.js`)
- kontrollierter Abbruch (SIGINT/SIGKILL-Fallback)

---

## Persistenz

SQLite-Datei: `backend/data/ripster.db`

Kern-Tabellen:

- `jobs`, `pipeline_state`
- `settings_schema`, `settings_values`
- `scripts`, `script_chains`, `script_chain_steps`
- `user_presets`
- `cron_jobs`, `cron_run_logs`

Beim Start werden Schema und Settings-Migrationen automatisch ausgeführt.

---

## Fehlerbehandlung

Zentrales Error-Handling liefert:

```json
{
  "error": {
    "message": "...",
    "statusCode": 400,
    "reqId": "...",
    "details": []
  }
}
```

Fehlgeschlagene Jobs bleiben in der Historie (`Fehler` oder `Abgebrochen`) und können erneut gestartet werden.

---

## CORS & Runtime-Konfig

- `CORS_ORIGIN` default: `*`
- `LOG_LEVEL` default: `info`
- DB-/Log-Pfade über `DB_PATH`/`LOG_DIR` konfigurierbar
