# History API - Ripster
Benutzerhandbuch für den Betrieb von Ripster mit technischem Anhang
Author: Michael

Zum Inhalt

# History API

Endpunkte für Job-Historie, Orphan-Import und Löschoperationen.

## GET /api/history

Liefert Jobs (optionale Filter).

Query-Parameter:

Parameter | Typ | Beschreibung
--- | --- | ---
`status` | string | Filter nach Job-Status
`search` | string | Suche in Titel-Feldern

Beispiel:

    GET /api/history?status=FINISHED&search=Inception

Response:

    {
      "jobs": [
        {
          "id": 42,
          "status": "FINISHED",
          "title": "Inception",
          "raw_path": "/mnt/raw/Inception - RAW - job-42",
          "output_path": "/mnt/movies/Inception (2010)/Inception (2010).mkv",
          "mediaType": "bluray",
          "ripSuccessful": true,
          "encodeSuccess": true,
          "created_at": "2026-03-10T08:00:00.000Z",
          "updated_at": "2026-03-10T10:00:00.000Z"
        }
      ]
    }

## GET /api/history/:id

Liefert Job-Detail.

Query-Parameter:

Parameter | Typ | Standard | Beschreibung
--- | --- | --- | ---
`includeLogs` | bool | `false` | Prozesslog laden
`includeLiveLog` | bool | `false` | alias-artig ebenfalls Prozesslog laden
`includeAllLogs` | bool | `false` | vollständiges Log statt Tail
`logTailLines` | number | `800` | Tail-Länge falls nicht `includeAllLogs`

Response:

    {
      "job": {
        "id": 42,
        "status": "FINISHED",
        "makemkvInfo": {},
        "mediainfoInfo": {},
        "handbrakeInfo": {},
        "encodePlan": {},
        "log": "...",
        "log_count": 1,
        "logMeta": {
          "loaded": true,
          "total": 800,
          "returned": 800,
          "truncated": true
        }
      }
    }

## GET /api/history/database

Debug-Ansicht der DB-Zeilen (angereichert).

Response:

    {
      "rows": [
        {
          "id": 42,
          "status": "FINISHED",
          "rawFolderName": "Inception - RAW - job-42"
        }
      ]
    }

## GET /api/history/orphan-raw

Sucht RAW-Ordner ohne zugehörigen Job.

Response:

    {
      "rawDir": "/mnt/raw",
      "rawDirs": ["/mnt/raw", "/mnt/raw-bluray"],
      "rows": [
        {
          "rawPath": "/mnt/raw/Inception (2010) [tt1375666] - RAW - job-99",
          "folderName": "Inception (2010) [tt1375666] - RAW - job-99",
          "title": "Inception",
          "year": 2010,
          "imdbId": "tt1375666",
          "folderJobId": 99,
          "entryCount": 4,
          "hasBlurayStructure": true,
          "lastModifiedAt": "2026-03-10T09:00:00.000Z"
        }
      ]
    }

## POST /api/history/orphan-raw/import

Importiert RAW-Ordner als FINISHED-Job.

Request:

    { "rawPath": "/mnt/raw/Inception (2010) [tt1375666] - RAW - job-99" }

Response:

    {
      "job": { "id": 77, "status": "FINISHED" },
      "uiReset": { "reset": true, "state": "IDLE" }
    }

## POST /api/history/:id/omdb/assign

Weist OMDb-/Metadaten nachträglich zu.

Request:

    {
      "imdbId": "tt1375666",
      "title": "Inception",
      "year": 2010,
      "poster": "https://...",
      "fromOmdb": true
    }

Response:

    { "job": { "id": 42, "imdb_id": "tt1375666" } }

## POST /api/history/:id/delete-files

Löscht Dateien eines Jobs, behält DB-Eintrag.

Request:

    { "target": "both" }

`target`: `raw` | `movie` | `both`

Response:

    {
      "summary": {
        "target": "both",
        "raw": { "attempted": true, "deleted": true, "filesDeleted": 12, "dirsRemoved": 3, "reason": null },
        "movie": { "attempted": true, "deleted": false, "filesDeleted": 0, "dirsRemoved": 0, "reason": "Movie-Datei/Pfad existiert nicht." }
      },
      "job": { "id": 42 }
    }

## POST /api/history/:id/delete

Löscht Job aus DB; optional auch Dateien.

Request:

    { "target": "none" }

`target`: `none` | `raw` | `movie` | `both`

Response:

    {
      "deleted": true,
      "jobId": 42,
      "fileTarget": "both",
      "fileSummary": {
        "target": "both",
        "raw": { "filesDeleted": 10 },
        "movie": { "filesDeleted": 1 }
      },
      "uiReset": {
        "reset": true,
        "state": "IDLE"
      }
    }

## Hinweise

- Ein aktiver Pipeline-Job kann nicht gelöscht werden (`409`).
- Alle Löschoperationen sind irreversibel.