""" Klausur-Service Exam Models Data classes for Klausur and StudentKlausur. """ from dataclasses import dataclass, asdict from datetime import datetime from typing import Optional, List, Dict, Any from .enums import KlausurModus, StudentKlausurStatus @dataclass class StudentKlausur: """A student's exam work.""" id: str klausur_id: str student_name: str student_id: Optional[str] file_path: Optional[str] ocr_text: Optional[str] status: StudentKlausurStatus criteria_scores: Dict[str, Dict] gutachten: Optional[Dict] raw_points: int grade_points: int created_at: datetime def to_dict(self) -> Dict[str, Any]: """Convert to dictionary for JSON serialization.""" d = asdict(self) d['status'] = self.status.value if hasattr(self.status, 'value') else self.status d['created_at'] = self.created_at.isoformat() return d @dataclass class Klausur: """An exam/Klausur with associated student works.""" id: str title: str subject: str modus: KlausurModus class_id: Optional[str] year: int semester: str erwartungshorizont: Optional[Dict] students: List[StudentKlausur] created_at: datetime teacher_id: str def to_dict(self) -> Dict[str, Any]: """Convert to dictionary for JSON serialization.""" return { 'id': self.id, 'title': self.title, 'subject': self.subject, 'modus': self.modus.value, 'class_id': self.class_id, 'year': self.year, 'semester': self.semester, 'erwartungshorizont': self.erwartungshorizont, 'student_count': len(self.students), 'students': [s.to_dict() for s in self.students], 'created_at': self.created_at.isoformat(), 'teacher_id': self.teacher_id }