From 66b02dd94eced51c36c09b8d8e090814070ac0b1 Mon Sep 17 00:00:00 2001 From: jlightner Date: Fri, 3 Apr 2026 01:19:32 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20Wired=20source=5Fvideos=20and=20body=5F?= =?UTF-8?q?sections=5Fformat=20into=20technique=20detai=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - "backend/routers/techniques.py" GSD-Task: S03/T02 --- backend/routers/techniques.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) 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, )