From f9c404b69e10c9ce9c0caa14a88477b492a6e37f Mon Sep 17 00:00:00 2001 From: Kai Chappell Date: Wed, 21 May 2025 20:41:04 +0100 Subject: [PATCH] feat(backend): data loader handles test cases --- backend/scripts/load_data.py | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/backend/scripts/load_data.py b/backend/scripts/load_data.py index 5220f05..dd0c41e 100644 --- a/backend/scripts/load_data.py +++ b/backend/scripts/load_data.py @@ -9,6 +9,7 @@ from typing import Any import yaml from sqlalchemy import select from sqlalchemy.ext.asyncio import AsyncSession +from sqlalchemy.orm import selectinload # Add src to path for imports sys.path.insert(0, str(Path(__file__).parent.parent)) @@ -96,28 +97,41 @@ async def load_question( data: dict[str, Any] = yaml.safe_load(f) slug = data["slug"] - result = await session.execute(select(Question).where(Question.slug == slug)) + result = await session.execute( + select(Question) + .where(Question.slug == slug) + .options( + selectinload(Question.explanation), + selectinload(Question.solutions), + selectinload(Question.categories), + selectinload(Question.patterns), + ) + ) existing = result.scalar_one_or_none() if existing: question = existing question.title = data["title"] - question.difficulty = Difficulty(data["difficulty"]) + question.difficulty = Difficulty(data["difficulty"].lower()) question.description = data["description"] question.constraints = data.get("constraints") question.examples = data.get("examples") question.leetcode_id = data.get("leetcode_id") question.leetcode_url = data.get("leetcode_url") + question.function_signature = data.get("function_signature") + question.test_cases = data.get("test_cases") else: question = Question( title=data["title"], slug=slug, - difficulty=Difficulty(data["difficulty"]), + difficulty=Difficulty(data["difficulty"].lower()), description=data["description"], constraints=data.get("constraints"), examples=data.get("examples"), leetcode_id=data.get("leetcode_id"), leetcode_url=data.get("leetcode_url"), + function_signature=data.get("function_signature"), + test_cases=data.get("test_cases"), ) session.add(question) @@ -136,7 +150,7 @@ async def load_question( # Handle explanation if "explanation" in data: exp_data = data["explanation"] - if question.explanation: + if existing and existing.explanation: explanation = question.explanation explanation.approach = exp_data["approach"] explanation.intuition = exp_data["intuition"]