- Add rules_engine.py with quantitative rules for all 8 workout types - Add quality gate retry loop in generate_single_workout() - Expand calibrate_structure_rules to all 120 combinations (8 types × 5 goals × 3 sections) - Wire WeeklySplitPattern DB records into _pick_weekly_split() - Enforce movement patterns from WorkoutStructureRule in exercise selection - Add straight-set strength support (single main lift, 4-6 rounds) - Add modality consistency check for duration-dominant workout types - Add InjuryStep component to onboarding and preferences - Add sibling exercise exclusion in regenerate and preview_day endpoints - Display generator warnings on dashboard - Expand fix_rep_durations, fix_exercise_flags, fix_movement_pattern_typo - Add audit_exercise_data and check_rules_drift management commands - Add Next.js frontend with dashboard, onboarding, preferences, history pages - Add generator app with ML-powered workout generation pipeline - 96 new tests across 7 test modules Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
46 lines
2.2 KiB
Python
46 lines
2.2 KiB
Python
from django.urls import path
|
|
from . import views
|
|
|
|
urlpatterns = [
|
|
# Preferences
|
|
path('preferences/', views.get_preferences, name='get_preferences'),
|
|
path('preferences/update/', views.update_preferences, name='update_preferences'),
|
|
|
|
# Plan generation & listing
|
|
path('generate/', views.generate_plan, name='generate_plan'),
|
|
path('plans/', views.list_plans, name='list_plans'),
|
|
path('plans/<int:plan_id>/', views.plan_detail, name='plan_detail'),
|
|
|
|
# Workout actions
|
|
path('workout/<int:workout_id>/accept/', views.accept_workout, name='accept_workout'),
|
|
path('workout/<int:workout_id>/reject/', views.reject_workout, name='reject_workout'),
|
|
path('workout/<int:workout_id>/rate/', views.rate_workout, name='rate_workout'),
|
|
path('workout/<int:workout_id>/regenerate/', views.regenerate_workout, name='regenerate_workout'),
|
|
|
|
# Edit actions (delete day / superset / exercise, swap exercise)
|
|
path('workout/<int:workout_id>/delete/', views.delete_workout_day, name='delete_workout_day'),
|
|
path('superset/<int:superset_id>/delete/', views.delete_superset, name='delete_superset'),
|
|
path('superset-exercise/<int:exercise_id>/delete/', views.delete_superset_exercise, name='delete_superset_exercise'),
|
|
path('superset-exercise/<int:exercise_id>/swap/', views.swap_exercise, name='swap_exercise'),
|
|
path('exercise/<int:exercise_id>/similar/', views.similar_exercises, name='similar_exercises'),
|
|
|
|
# Reference data (for preference UI)
|
|
path('muscles/', views.list_muscles, name='list_muscles'),
|
|
path('equipment/', views.list_equipment, name='list_equipment'),
|
|
path('workout-types/', views.list_workout_types, name='list_workout_types'),
|
|
|
|
# Confirm (batch-accept) a plan
|
|
path('plans/<int:plan_id>/confirm/', views.confirm_plan, name='confirm_plan'),
|
|
|
|
# Preview-based generation
|
|
path('preview/', views.preview_plan, name='preview_plan'),
|
|
path('preview-day/', views.preview_day, name='preview_day'),
|
|
path('save-plan/', views.save_plan, name='save_plan'),
|
|
|
|
# Analysis
|
|
path('analysis/stats/', views.analysis_stats, name='analysis_stats'),
|
|
|
|
# Generation rules
|
|
path('rules/', views.generation_rules, name='generation_rules'),
|
|
]
|