242 lines
4.0 KiB
Markdown
242 lines
4.0 KiB
Markdown
# 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:**
|
|
|
|
```text
|
|
GET /api/history?status=FINISHED&search=Inception
|
|
```
|
|
|
|
**Response:**
|
|
|
|
```json
|
|
{
|
|
"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:**
|
|
|
|
```json
|
|
{
|
|
"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:**
|
|
|
|
```json
|
|
{
|
|
"rows": [
|
|
{
|
|
"id": 42,
|
|
"status": "FINISHED",
|
|
"rawFolderName": "Inception - RAW - job-42"
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## GET /api/history/orphan-raw
|
|
|
|
Sucht RAW-Ordner ohne zugehörigen Job.
|
|
|
|
**Response:**
|
|
|
|
```json
|
|
{
|
|
"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:**
|
|
|
|
```json
|
|
{ "rawPath": "/mnt/raw/Inception (2010) [tt1375666] - RAW - job-99" }
|
|
```
|
|
|
|
**Response:**
|
|
|
|
```json
|
|
{
|
|
"job": { "id": 77, "status": "FINISHED" },
|
|
"uiReset": { "reset": true, "state": "IDLE" }
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## POST /api/history/:id/omdb/assign
|
|
|
|
Weist OMDb-/Metadaten nachträglich zu.
|
|
|
|
**Request:**
|
|
|
|
```json
|
|
{
|
|
"imdbId": "tt1375666",
|
|
"title": "Inception",
|
|
"year": 2010,
|
|
"poster": "https://...",
|
|
"fromOmdb": true
|
|
}
|
|
```
|
|
|
|
**Response:**
|
|
|
|
```json
|
|
{ "job": { "id": 42, "imdb_id": "tt1375666" } }
|
|
```
|
|
|
|
---
|
|
|
|
## POST /api/history/:id/delete-files
|
|
|
|
Löscht Dateien eines Jobs, behält DB-Eintrag.
|
|
|
|
**Request:**
|
|
|
|
```json
|
|
{ "target": "both" }
|
|
```
|
|
|
|
`target`: `raw` | `movie` | `both`
|
|
|
|
**Response:**
|
|
|
|
```json
|
|
{
|
|
"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:**
|
|
|
|
```json
|
|
{ "target": "none" }
|
|
```
|
|
|
|
`target`: `none` | `raw` | `movie` | `both`
|
|
|
|
**Response:**
|
|
|
|
```json
|
|
{
|
|
"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.
|