feat(v3): restructure project + add complete frontend
- Restructure: move backend from new_project/ to backend/ - Add full React/TypeScript frontend (37 pages, 17 services, 16 type defs, 11 query hooks) - Add docs/ with SRS specs, user stories, and workflow documentation - Update .gitignore for new directory layout Workflows implemented: WF1 User Signup, WF2 Placement Test, WF3 Exam Configuration, WF4 General English Exam, WF5 Course Generation, WF6 Entity Student Onboarding, AI Course Generation, Adaptive Learning Engine UI, White-Label Branding, Score Release Made-with: Cursor
This commit is contained in:
35
custom_addons/encoach_adaptive/services/style_matcher.py
Normal file
35
custom_addons/encoach_adaptive/services/style_matcher.py
Normal file
@@ -0,0 +1,35 @@
|
||||
import logging
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
STYLE_RESOURCE_MAP = {
|
||||
'visual': ['video', 'pdf', 'interactive'],
|
||||
'auditory': ['video', 'interactive'],
|
||||
'reading': ['pdf', 'document'],
|
||||
'kinesthetic': ['interactive'],
|
||||
}
|
||||
|
||||
|
||||
class StyleMatcher:
|
||||
"""Ranks learning resources based on student's learning style preference."""
|
||||
|
||||
@classmethod
|
||||
def rank_resources(cls, learning_style, resources):
|
||||
"""Sort resources so that types matching the student's style come first.
|
||||
|
||||
Args:
|
||||
learning_style: str, one of visual/auditory/reading/kinesthetic
|
||||
resources: recordset of encoach.resource
|
||||
|
||||
Returns:
|
||||
sorted list of resource records
|
||||
"""
|
||||
preferred_types = STYLE_RESOURCE_MAP.get(learning_style, [])
|
||||
return sorted(resources, key=lambda r: (r.type not in preferred_types, r.id))
|
||||
|
||||
@classmethod
|
||||
def filter_by_style(cls, learning_style, resources):
|
||||
"""Return only resources matching the learning style (with fallback to all)."""
|
||||
preferred_types = STYLE_RESOURCE_MAP.get(learning_style, [])
|
||||
matched = [r for r in resources if r.type in preferred_types]
|
||||
return matched if matched else list(resources)
|
||||
Reference in New Issue
Block a user