feat: add training case import export

This commit is contained in:
2026-04-30 20:45:33 -04:00
parent b40c858f91
commit 62ea8bc6e8
6 changed files with 800 additions and 1 deletions
+17
View File
@@ -13,9 +13,11 @@ from src.api.signals import get_recent_signals
from src.api.training import (
add_training_annotation,
create_training_attempt,
export_training_case_package,
get_training_case,
get_training_cases,
get_training_progress,
import_training_case_package,
submit_training_attempt,
)
from src.services.execution import ExecutionService
@@ -32,6 +34,8 @@ def build_api_dependencies() -> dict:
"executions": execution_service.build_execution_dashboard_items,
"training_cases": get_training_cases,
"training_case": get_training_case,
"training_export_cases": export_training_case_package,
"training_import_cases": import_training_case_package,
"training_create_attempt": create_training_attempt,
"training_add_annotation": add_training_annotation,
"training_submit_attempt": submit_training_attempt,
@@ -90,6 +94,19 @@ def route_request(
limit=limit,
)
}
if method == "GET" and path == "/training/cases/export":
status = _get_single(query, "status")
skill_tag = _get_single(query, "skill_tag")
instrument_id = _get_optional_int(query, "instrument_id")
limit = _get_limit(query, "limit", 100, max_value=MAX_TRAINING_LIMIT)
return 200, deps["training_export_cases"](
status=status,
skill_tag=skill_tag,
instrument_id=instrument_id,
limit=limit,
)
if method == "POST" and path == "/training/cases/import":
return 201, deps["training_import_cases"](body or {})
if method == "GET" and len(path_parts) == 3 and path_parts[:2] == ["training", "cases"]:
case_id = _parse_path_int(path_parts[2], "case_id")
case = deps["training_case"](case_id=case_id)
+19
View File
@@ -65,6 +65,25 @@ def get_training_progress(
return _service(service).get_progress(user_id=user_id, skill_tag=skill_tag, limit=limit)
def export_training_case_package(
status: Optional[str] = None,
skill_tag: Optional[str] = None,
instrument_id: Optional[int] = None,
limit: int = 100,
service: Optional[TrainingCaseService] = None,
) -> dict:
return _service(service).export_cases(
status=status,
skill_tag=skill_tag,
instrument_id=instrument_id,
limit=limit,
)
def import_training_case_package(body: dict, service: Optional[TrainingCaseService] = None) -> dict:
return _service(service).import_cases(body)
def _service(service: Optional[TrainingCaseService]) -> TrainingCaseService:
return service or TrainingCaseService()