from typing import Optional from datetime import datetime from pydantic import BaseModel from app.schemas.student import Student from app.schemas.course import Course # Shared properties class ClassEnrollmentBase(BaseModel): student_id: int course_id: int enrollment_date: Optional[datetime] = None grade: Optional[float] = None semester: str academic_year: str # Properties to receive via API on creation class ClassEnrollmentCreate(ClassEnrollmentBase): pass # Properties to receive via API on update class ClassEnrollmentUpdate(BaseModel): grade: Optional[float] = None semester: Optional[str] = None academic_year: Optional[str] = None class ClassEnrollmentInDBBase(ClassEnrollmentBase): id: int class Config: from_attributes = True # Additional properties to return via API class ClassEnrollment(ClassEnrollmentInDBBase): pass # Class enrollment with Student and Course details class ClassEnrollmentWithDetails(ClassEnrollment): student: Optional[Student] = None course: Optional[Course] = None # Update forward refs ClassEnrollmentWithDetails.model_rebuild()