from typing import Optional from sqlalchemy.orm import Session from app.application.course_students_repository import CourseStudentsRepository from app.domain.entities.course_students_entity import CourseStudentEntity from app.domain.models.course_students import CourseStudent class CourseStudentsService: def __init__(self, db: Session): self.course_students_repository = CourseStudentsRepository(db) def get_all(self) -> list[CourseStudentEntity]: course_students = self.course_students_repository.get_all() return [ CourseStudentEntity( id=course_student.id, enrollment_date=course_student.enrollment_date, is_finished=course_student.is_finished, course_id=course_student.course_id, user_id=course_student.user_id, ) for course_student in course_students ] def get_by_id(self, course_student_id: int) -> Optional[CourseStudentEntity]: course_student = self.course_students_repository.get_by_id(course_student_id) if course_student: return CourseStudentEntity( id=course_student.id, enrollment_date=course_student.enrollment_date, is_finished=course_student.is_finished, course_id=course_student.course_id, user_id=course_student.user_id, ) return None def create(self, course_student: CourseStudentEntity) -> CourseStudentEntity: course_student_model = CourseStudent( enrollment_date=course_student.enrollment_date, is_finished=course_student.is_finished, course_id=course_student.course_id, user_id=course_student.user_id, ) created_course_student = self.course_students_repository.create(course_student_model) return CourseStudentEntity( id=created_course_student.id, enrollment_date=created_course_student.enrollment_date, is_finished=created_course_student.is_finished, course_id=created_course_student.course_id, user_id=created_course_student.user_id, ) def update(self, course_student_id: int, course_student: CourseStudentEntity) -> Optional[CourseStudentEntity]: course_student_model = self.course_students_repository.get_by_id(course_student_id) if course_student_model: course_student_model.enrollment_date = course_student.enrollment_date course_student_model.is_finished = course_student.is_finished course_student_model.course_id = course_student.course_id course_student_model.user_id = course_student.user_id updated_course_student = self.course_students_repository.update(course_student_model) return CourseStudentEntity( id=updated_course_student.id, enrollment_date=updated_course_student.enrollment_date, is_finished=updated_course_student.is_finished, course_id=updated_course_student.course_id, user_id=updated_course_student.user_id, ) return None def delete(self, course_student_id: int) -> bool: return self.course_students_repository.delete(course_student_id) is not None