From 7e9d5028b03ee230a9c17a579604a771cfae5b45 Mon Sep 17 00:00:00 2001 From: type-two Date: Tue, 23 Jun 2026 23:12:39 +1000 Subject: [PATCH] =?UTF-8?q?fix(shop):=20apple=5Fpreview=5Furl=20is=20a=20J?= =?UTF-8?q?SON=20array=20=E2=80=94=20return=20the=20first=20clean=20previe?= =?UTF-8?q?w=20URL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 --- app/shop_routes.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/app/shop_routes.py b/app/shop_routes.py index 0609f85..60bf419 100644 --- a/app/shop_routes.py +++ b/app/shop_routes.py @@ -153,10 +153,17 @@ async def shop_audio(release_id: int, db=Depends(get_db)): SELECT apple_preview_url, apple_url, beatport_id, beatport_url, beatport_embed, beatport_genre, spotify_id, bandcamp_url, bandcamp_embed, soundcloud_url FROM disc_release_audio WHERE release_id = :r"""), {"r": release_id})).mappings().first() + audio = dict(a) if a else None + if audio and isinstance(audio.get("apple_preview_url"), str) and audio["apple_preview_url"].lstrip().startswith("["): + try: + arr = json.loads(audio["apple_preview_url"]) + audio["apple_preview_url"] = next((u for u in arr if u), None) + except (ValueError, TypeError): + audio["apple_preview_url"] = None vids = [dict(r) for r in (await db.execute(text(""" SELECT title, uri, duration FROM disc_release_video WHERE release_id = :r AND uri <> '' LIMIT 8 """), {"r": release_id})).mappings()] - return {"audio": dict(a) if a else None, "videos": vids} + return {"audio": audio, "videos": vids} class WantIn(BaseModel):