162 lines
4.3 KiB
Markdown
162 lines
4.3 KiB
Markdown
# Datenbank
|
||
|
||
Ripster verwendet **SQLite3** als Datenbank. Die Datenbankdatei liegt unter `backend/data/ripster.db`.
|
||
|
||
---
|
||
|
||
## Schema-Übersicht
|
||
|
||
```sql
|
||
-- Vier Haupt-Tabellen
|
||
settings_schema -- Einstellungs-Definitionen
|
||
settings_values -- Benutzer-Werte
|
||
jobs -- Rip-Job-Datensätze
|
||
pipeline_state -- Aktueller Pipeline-Zustand (Singleton)
|
||
```
|
||
|
||
---
|
||
|
||
## Tabelle: jobs
|
||
|
||
Die wichtigste Tabelle – speichert alle Ripping-Jobs.
|
||
|
||
```sql
|
||
CREATE TABLE jobs (
|
||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
created_at TEXT NOT NULL,
|
||
updated_at TEXT NOT NULL,
|
||
status TEXT NOT NULL, -- Aktueller Status
|
||
title TEXT, -- Filmtitel (von OMDb)
|
||
imdb_id TEXT, -- IMDb-ID
|
||
omdb_year TEXT, -- Erscheinungsjahr
|
||
omdb_type TEXT, -- movie/series
|
||
omdb_poster TEXT, -- Poster-URL
|
||
raw_path TEXT, -- Pfad zur Raw-MKV
|
||
output_path TEXT, -- Pfad zur Ausgabedatei
|
||
playlist TEXT, -- Gewählte Blu-ray Playlist
|
||
makemkv_output TEXT, -- MakeMKV-Ausgabe (JSON)
|
||
mediainfo_output TEXT, -- MediaInfo-Ausgabe (JSON)
|
||
encode_plan TEXT, -- Encode-Plan (JSON)
|
||
handbrake_log TEXT, -- HandBrake Log-Pfad
|
||
error_message TEXT, -- Fehlermeldung bei ERROR
|
||
error_details TEXT -- Detaillierte Fehler-Infos
|
||
);
|
||
```
|
||
|
||
### Job-Status-Werte
|
||
|
||
| Status | Beschreibung |
|
||
|--------|-------------|
|
||
| `ANALYZING` | MakeMKV analysiert die Disc |
|
||
| `METADATA_SELECTION` | Wartet auf Benutzer-Metadaten-Auswahl |
|
||
| `READY_TO_START` | Bereit zum Starten |
|
||
| `RIPPING` | MakeMKV rippt die Disc |
|
||
| `MEDIAINFO_CHECK` | MediaInfo analysiert die Raw-Datei |
|
||
| `READY_TO_ENCODE` | Wartet auf Encode-Bestätigung |
|
||
| `ENCODING` | HandBrake encodiert |
|
||
| `FINISHED` | Erfolgreich abgeschlossen |
|
||
| `ERROR` | Fehler aufgetreten |
|
||
|
||
---
|
||
|
||
## Tabelle: pipeline_state
|
||
|
||
Singleton-Tabelle für den aktuellen Pipeline-Zustand (immer genau 1 Zeile).
|
||
|
||
```sql
|
||
CREATE TABLE pipeline_state (
|
||
id INTEGER PRIMARY KEY CHECK(id = 1),
|
||
state TEXT NOT NULL DEFAULT 'IDLE',
|
||
job_id INTEGER, -- Aktiver Job (NULL wenn IDLE)
|
||
progress REAL, -- Fortschritt 0-100
|
||
eta TEXT, -- Geschätzte Restzeit
|
||
updated_at TEXT NOT NULL
|
||
);
|
||
```
|
||
|
||
---
|
||
|
||
## Tabelle: settings_schema
|
||
|
||
Definiert alle verfügbaren Einstellungen mit Metadaten.
|
||
|
||
```sql
|
||
CREATE TABLE settings_schema (
|
||
key TEXT PRIMARY KEY,
|
||
category TEXT NOT NULL, -- paths, tools, encoding, ...
|
||
type TEXT NOT NULL, -- string, number, boolean, select
|
||
label TEXT NOT NULL, -- Anzeigename
|
||
description TEXT, -- Hilfetext
|
||
default_val TEXT, -- Standardwert
|
||
required INTEGER, -- 1 = Pflichtfeld
|
||
min_val REAL, -- Minimalwert (für number)
|
||
max_val REAL, -- Maximalwert (für number)
|
||
options TEXT -- JSON-Array für select-Typ
|
||
);
|
||
```
|
||
|
||
---
|
||
|
||
## Tabelle: settings_values
|
||
|
||
Speichert benutzer-konfigurierte Werte.
|
||
|
||
```sql
|
||
CREATE TABLE settings_values (
|
||
key TEXT PRIMARY KEY REFERENCES settings_schema(key),
|
||
value TEXT NOT NULL,
|
||
updated_at TEXT NOT NULL
|
||
);
|
||
```
|
||
|
||
---
|
||
|
||
## Schema-Migrationen
|
||
|
||
`database.js` implementiert **automatische Migrationen**:
|
||
|
||
1. Beim Start wird das aktuelle Schema geprüft
|
||
2. Fehlende Tabellen werden erstellt
|
||
3. Fehlende Spalten werden hinzugefügt
|
||
4. Neue Default-Einstellungen werden eingefügt
|
||
|
||
### Korruptions-Recovery
|
||
|
||
Falls die Datenbankdatei korrupt ist:
|
||
|
||
```
|
||
1. Korrupte Datei wird erkannt (Verbindungsfehler / Integritätsprüfung)
|
||
2. Datei wird in /backend/data/quarantine/ verschoben
|
||
3. Neue, leere Datenbank wird erstellt
|
||
4. Schema wird neu initialisiert
|
||
5. Log-Eintrag mit Warnung
|
||
```
|
||
|
||
---
|
||
|
||
## Datenbankpfad konfigurieren
|
||
|
||
Standard: `./data/ripster.db` (relativ zum Backend-Verzeichnis)
|
||
|
||
Über Umgebungsvariable anpassen:
|
||
|
||
```env
|
||
DB_PATH=/var/lib/ripster/ripster.db
|
||
```
|
||
|
||
---
|
||
|
||
## Direkte Datenbankinspektion
|
||
|
||
```bash
|
||
# SQLite3-CLI
|
||
sqlite3 backend/data/ripster.db
|
||
|
||
# Alle Jobs anzeigen
|
||
.mode table
|
||
SELECT id, status, title, created_at FROM jobs ORDER BY created_at DESC;
|
||
|
||
# Einstellungen anzeigen
|
||
SELECT key, value FROM settings_values;
|
||
```
|