Cover-Bilder aus DB laden mit Fallback auf URL-Proxy
- API: neuer Endpunkt GET /api/records/{id}/cover liefert BYTEA direkt
aus der DB; cover_mime_type in COLUMNS aufgenommen
- Frontend: CoverImage lädt primär aus DB (/api/records/{id}/cover),
fällt bei 404 automatisch auf den URL-Proxy zurück
- types.ts: cover_mime_type zum MediaRecord-Interface hinzugefügt
- scripts/deploy.sh: einmaliges SSH-Passwort für alle scp-Transfers
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
944ca9a308
commit
b5366783b1
+26
@@ -53,6 +53,7 @@ COLUMNS = [
|
||||
"audio_bitrate",
|
||||
"created_at",
|
||||
"seen_at",
|
||||
"cover_mime_type",
|
||||
]
|
||||
|
||||
|
||||
@@ -452,6 +453,31 @@ async def proxy_cover(url: str = Query(..., min_length=8)):
|
||||
)
|
||||
|
||||
|
||||
@app.get("/api/records/{record_id}/cover")
|
||||
async def get_record_cover(record_id: int):
|
||||
"""Cover-Bild aus DB liefern (BYTEA). 404 wenn kein Bild gespeichert."""
|
||||
if pool is None:
|
||||
raise HTTPException(503, detail="Datenbank nicht verbunden")
|
||||
|
||||
async with pool.acquire() as conn:
|
||||
row = await conn.fetchrow(
|
||||
f"SELECT cover_image, cover_mime_type FROM {qualified_table} WHERE id = $1",
|
||||
record_id,
|
||||
)
|
||||
|
||||
if row is None:
|
||||
raise HTTPException(404, detail="Eintrag nicht gefunden")
|
||||
if not row["cover_image"]:
|
||||
raise HTTPException(404, detail="Kein Bild gespeichert")
|
||||
|
||||
mime = row["cover_mime_type"] or "image/jpeg"
|
||||
return Response(
|
||||
content=bytes(row["cover_image"]),
|
||||
media_type=mime,
|
||||
headers={"Cache-Control": "public, max-age=604800"},
|
||||
)
|
||||
|
||||
|
||||
@app.get("/api/records")
|
||||
async def get_records(
|
||||
search: str | None = Query(None, description="Suche in Dateinamen"),
|
||||
|
||||
Reference in New Issue
Block a user