127 lines
2.7 KiB
Python
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}
|