feat: Wired source_videos and body_sections_format into technique detai…
- "backend/routers/techniques.py" GSD-Task: S03/T02
This commit is contained in:
parent
ae98e4e30e
commit
66b02dd94e
1 changed files with 18 additions and 1 deletions
|
|
@ -11,12 +11,13 @@ from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
from sqlalchemy.orm import selectinload
|
from sqlalchemy.orm import selectinload
|
||||||
|
|
||||||
from database import get_session
|
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 (
|
from schemas import (
|
||||||
CreatorInfo,
|
CreatorInfo,
|
||||||
KeyMomentSummary,
|
KeyMomentSummary,
|
||||||
PaginatedResponse,
|
PaginatedResponse,
|
||||||
RelatedLinkItem,
|
RelatedLinkItem,
|
||||||
|
SourceVideoSummary,
|
||||||
TechniquePageDetail,
|
TechniquePageDetail,
|
||||||
TechniquePageRead,
|
TechniquePageRead,
|
||||||
TechniquePageVersionDetail,
|
TechniquePageVersionDetail,
|
||||||
|
|
@ -223,6 +224,9 @@ async def get_technique(
|
||||||
selectinload(TechniquePage.incoming_links).selectinload(
|
selectinload(TechniquePage.incoming_links).selectinload(
|
||||||
RelatedTechniqueLink.source_page
|
RelatedTechniqueLink.source_page
|
||||||
),
|
),
|
||||||
|
selectinload(TechniquePage.source_video_links).selectinload(
|
||||||
|
TechniquePageVideo.source_video
|
||||||
|
),
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
result = await db.execute(stmt)
|
result = await db.execute(stmt)
|
||||||
|
|
@ -295,12 +299,25 @@ async def get_technique(
|
||||||
version_count_result = await db.execute(version_count_stmt)
|
version_count_result = await db.execute(version_count_stmt)
|
||||||
version_count = version_count_result.scalar() or 0
|
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(
|
return TechniquePageDetail(
|
||||||
**base.model_dump(),
|
**base.model_dump(),
|
||||||
key_moments=key_moment_items,
|
key_moments=key_moment_items,
|
||||||
creator_info=creator_info,
|
creator_info=creator_info,
|
||||||
related_links=related_links,
|
related_links=related_links,
|
||||||
version_count=version_count,
|
version_count=version_count,
|
||||||
|
source_videos=source_videos,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue