"""결과 저장소가 공유하는 순수 값 정규화 도우미.""" from __future__ import annotations import hashlib import json from collections.abc import Mapping from typing import Any from ..deps import Principal, Role def value(row: Mapping[str, Any], key: str, default: Any = None) -> Any: try: return row[key] except (KeyError, TypeError): return default def canonical_hash(payload: Any) -> str: serialized = json.dumps( payload, ensure_ascii=False, separators=(",", ":"), sort_keys=True, default=str, ) return hashlib.sha256(serialized.encode("utf-8")).hexdigest() def public_row(row: Mapping[str, Any]) -> dict[str, Any]: """API 응답에서 학습자 피드백 정책 판정 전용 열을 제거한다.""" payload = dict(row) payload.pop("source_learner_feedback_enabled", None) return payload def created_role(principal: Principal) -> str: return "instructor" if principal.role == Role.TEACHER else principal.role.value