Zum Inhalt

Datenbank

Ripster verwendet SQLite3 als Datenbank. Die Datenbankdatei liegt unter backend/data/ripster.db.


Schema-Übersicht

-- 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.

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).

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.

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.

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:

DB_PATH=/var/lib/ripster/ripster.db

Direkte Datenbankinspektion

# 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;