From dfeeb2ae8146c873c3c08acedcd9d9a75650a48f Mon Sep 17 00:00:00 2001 From: fullsizemalt <106900403+fullsizemalt@users.noreply.github.com> Date: Wed, 31 Dec 2025 09:34:12 -0800 Subject: [PATCH] feat: show artist and original artist on song detail page --- backend/routers/songs.py | 10 +++++++++- backend/schemas.py | 2 ++ frontend/app/songs/[slug]/page.tsx | 13 ++++++++----- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/backend/routers/songs.py b/backend/routers/songs.py index b995b47..69c6026 100644 --- a/backend/routers/songs.py +++ b/backend/routers/songs.py @@ -54,7 +54,15 @@ def read_songs( @router.get("/{slug}", response_model=SongReadWithStats) def read_song(slug: str, session: Session = Depends(get_session)): - song = session.exec(select(Song).where(Song.slug == slug)).first() + from sqlalchemy.orm import joinedload + song = session.exec( + select(Song) + .where(Song.slug == slug) + .options( + joinedload(Song.artist), + joinedload(Song.vertical) + ) + ).first() if not song: raise HTTPException(status_code=404, detail="Song not found") diff --git a/backend/schemas.py b/backend/schemas.py index 43ea784..1799693 100644 --- a/backend/schemas.py +++ b/backend/schemas.py @@ -83,6 +83,8 @@ class SongRead(SongBase): id: int slug: Optional[str] = None tags: List["TagRead"] = [] + artist: Optional["ArtistRead"] = None + vertical: Optional["VerticalSimple"] = None diff --git a/frontend/app/songs/[slug]/page.tsx b/frontend/app/songs/[slug]/page.tsx index 7523346..7308d17 100644 --- a/frontend/app/songs/[slug]/page.tsx +++ b/frontend/app/songs/[slug]/page.tsx @@ -73,14 +73,17 @@ export default async function SongDetailPage({ params }: { params: Promise<{ slu

{song.title}

- {song.artist ? ( + {song.artist && ( - ({song.artist.name}) + {song.artist.name} - ) : song.original_artist ? ( - ({song.original_artist}) - ) : null} + )}
+ {song.original_artist && ( +
+ Original Artist: {song.original_artist} +
+ )} {song.tags && song.tags.length > 0 && (
{song.tags.map((tag: any) => (