Spaces:
Sleeping
Sleeping
from typing import List | |
from sqlmodel import SQLModel, Field, Relationship | |
from utils.enums.course_name_id import CourseNameId | |
from .instructor import Instructor | |
from .enrollment import Enrollment | |
class Course(SQLModel, table=True): | |
""" | |
Represents a course, including its name, unique identifier, enrolled students, and instructors. | |
Attributes: | |
id (str): A unique identifier for the course. | |
course_name (str): The name of the course. | |
enrolled_students (Dict[str, Enrollment]): A dictionary mapping student IDs to `Enrollment` instances for students enrolled in the course. | |
instructors (Dict[str, Instructor]): A dictionary mapping instructor IDs to `Instructor` instances for those teaching the course, or None if no instructors are assigned. | |
Notes: | |
Attributes defaults to an empty dictionary using default_factory. This ensures that each instance of the class gets a new dictionary instead of sharing a single instance across all instances of the model. | |
""" | |
id: str = Field( | |
default=CourseNameId.INTRO_TO_PROGRAMMING.course_id, primary_key=True) | |
course_name: str = Field( | |
default=CourseNameId.INTRO_TO_PROGRAMMING.course_name) | |
enrollments: List[Enrollment] = Relationship( | |
back_populates="course", cascade_delete=True) | |
instructors: List[Instructor] = Relationship(back_populates="course") | |
def __str__(self) -> str: | |
""" | |
Returns a string representation of the course. | |
Returns: | |
str: A string describing the course, including the course name, course ID, and the number of enrolled students. | |
""" | |
return f"Course(course_name: {self.course_name}, id: {self.id}, enrolled_students: {self.enrollments}, total_students_enrolled: {len(self.enrollments)}, instructors: {self.instructors}, total_instructors: {len(self.instructors)})" | |