Files
codetutor/backend/src/schemas/pattern.py

127 lines
2.7 KiB
Python

from typing import Any
from uuid import UUID
from pydantic import BaseModel
class PatternBase(BaseModel):
"""Base pattern schema."""
name: str
slug: str
description: str | None = None
when_to_use: str | None = None
pattern_type: str | None = None
display_order: int | None = None
class PatternResponse(PatternBase):
"""Pattern response schema."""
id: UUID
question_count: int = 0
model_config = {"from_attributes": True}
class PatternListResponse(BaseModel):
"""Response for pattern list."""
items: list[PatternResponse]
class PatternDetailResponse(PatternBase):
"""Pattern detail with related questions."""
id: UUID
question_count: int = 0
model_config = {"from_attributes": True}
# Tutorial-specific schemas
class CommonMistake(BaseModel):
"""A common mistake when using a pattern."""
title: str
description: str
fix: str | None = None
class PatternVariation(BaseModel):
"""A variation of a pattern."""
name: str
description: str
example: str | None = None
class RelatedPattern(BaseModel):
"""Brief info about a related pattern."""
slug: str
name: str
description: str | None = None
class LearningQuestion(BaseModel):
"""Question for learning progression."""
id: UUID
title: str
slug: str
difficulty: str
leetcode_id: int | None = None
is_optimal: bool = False
class LearningProgression(BaseModel):
"""Curated learning path for a pattern."""
warmup: list[LearningQuestion]
core: list[LearningQuestion]
challenge: list[LearningQuestion]
class VisualizationExample(BaseModel):
"""Interactive visualization example for a pattern."""
id: str
title: str
input: dict[str, Any] | None = None
code: str
steps: list[dict[str, Any]]
class PatternTutorialResponse(PatternBase):
"""Full pattern tutorial with all educational content."""
id: UUID
question_count: int = 0
# Tutorial content
metaphor: str | None = None
core_concept: str | None = None
visualization: str | None = None
code_template: str | None = None
# Structured data
recognition_signals: list[str] | None = None
common_mistakes: list[CommonMistake] | None = None
variations: list[PatternVariation] | None = None
related_patterns: list[RelatedPattern] | None = None
prerequisite_patterns: list[RelatedPattern] | None = None
# Difficulty level (1-5)
difficulty_level: int | None = None
# Learning progression
learning_progression: LearningProgression | None = None
# Interactive visualization examples
visualization_examples: list[VisualizationExample] | None = None
model_config = {"from_attributes": True}