diff --git a/backend/routers/techniques.py b/backend/routers/techniques.py index a5eeb48..63a6b39 100644 --- a/backend/routers/techniques.py +++ b/backend/routers/techniques.py @@ -11,12 +11,13 @@ from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.orm import selectinload from database import get_session -from models import Creator, KeyMoment, RelatedTechniqueLink, SourceVideo, TechniquePage, TechniquePageVersion +from models import Creator, KeyMoment, RelatedTechniqueLink, SourceVideo, TechniquePage, TechniquePageVersion, TechniquePageVideo from schemas import ( CreatorInfo, KeyMomentSummary, PaginatedResponse, RelatedLinkItem, + SourceVideoSummary, TechniquePageDetail, TechniquePageRead, TechniquePageVersionDetail, @@ -223,6 +224,9 @@ async def get_technique( selectinload(TechniquePage.incoming_links).selectinload( RelatedTechniqueLink.source_page ), + selectinload(TechniquePage.source_video_links).selectinload( + TechniquePageVideo.source_video + ), ) ) result = await db.execute(stmt) @@ -295,12 +299,25 @@ async def get_technique( version_count_result = await db.execute(version_count_stmt) version_count = version_count_result.scalar() or 0 + # Build source video list from association table + source_videos = [ + SourceVideoSummary( + id=link.source_video.id, + filename=link.source_video.filename, + content_type=link.source_video.content_type.value if hasattr(link.source_video.content_type, 'value') else str(link.source_video.content_type), + added_at=link.added_at, + ) + for link in page.source_video_links + if link.source_video is not None + ] + return TechniquePageDetail( **base.model_dump(), key_moments=key_moment_items, creator_info=creator_info, related_links=related_links, version_count=version_count, + source_videos=source_videos, )