diff --git a/backend/routers/shows.py b/backend/routers/shows.py index c389b26..3e0ebce 100644 --- a/backend/routers/shows.py +++ b/backend/routers/shows.py @@ -2,7 +2,7 @@ from typing import List from fastapi import APIRouter, Depends, HTTPException, Query from sqlmodel import Session, select from database import get_session -from models import Show, Tag, EntityTag +from models import Show, Tag, EntityTag, Vertical from schemas import ShowCreate, ShowRead, ShowUpdate, TagRead from auth import get_current_user @@ -93,6 +93,10 @@ def read_show(slug: str, session: Session = Depends(get_session)): show_data = ShowRead.model_validate(show) show_data.tags = tags + # Get vertical for band name + vertical = session.get(Vertical, show.vertical_id) + show_data.vertical = vertical + # Sort performances by position sorted_perfs = sorted(show.performances, key=lambda p: p.position) diff --git a/backend/schemas.py b/backend/schemas.py index bda2688..646a789 100644 --- a/backend/schemas.py +++ b/backend/schemas.py @@ -72,6 +72,15 @@ class SongUpdate(SQLModel): original_artist: Optional[str] = None notes: Optional[str] = None +# --- Vertical Schema (simple for embedding) --- +class VerticalSimple(SQLModel): + id: int + name: str + slug: str + description: Optional[str] = None + logo_url: Optional[str] = None + accent_color: Optional[str] = None + # --- Show Schemas --- class ShowBase(SQLModel): date: datetime @@ -163,6 +172,7 @@ class GroupPostRead(GroupPostBase): class ShowRead(ShowBase): id: int slug: Optional[str] = None + vertical: Optional["VerticalSimple"] = None venue: Optional["VenueRead"] = None tour: Optional["TourRead"] = None tags: List["TagRead"] = [] diff --git a/frontend/app/shows/[slug]/page.tsx b/frontend/app/shows/[slug]/page.tsx index 7c7cc75..e961238 100644 --- a/frontend/app/shows/[slug]/page.tsx +++ b/frontend/app/shows/[slug]/page.tsx @@ -72,6 +72,16 @@ export default async function ShowDetailPage({ params }: { params: Promise<{ slu
+ {/* Band Name - Most Important */} + {show.vertical && ( + + + {show.vertical.name} + + )}

{new Date(show.date).toLocaleDateString()}

@@ -247,7 +257,7 @@ export default async function ShowDetailPage({ params }: { params: Promise<{ slu

No Setlist Documented

- This show's setlist hasn't been added yet. Early Goose shows (2014-2016) often weren't documented. + This show's setlist hasn't been added yet. Early shows often weren't documented.

)}