feat: Wired source_videos and body_sections_format into technique detai…

- "backend/routers/techniques.py"

GSD-Task: S03/T02
This commit is contained in:
jlightner 2026-04-03 01:19:32 +00:00
parent ae98e4e30e
commit 66b02dd94e

View file

@ -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,
)