from typing import Optional from sqlalchemy.orm import Session from app.application.courses_repository import CoursesRepository from app.domain.entities.courses_entity import CourseEntity from app.domain.models.courses import Course class CoursesService: def __init__(self, db: Session): self.courses_repository = CoursesRepository(db) def get_all(self) -> list[CourseEntity]: courses = self.courses_repository.get_all() return [ CourseEntity( id=course.id, title=course.title, description=course.description, category_id=course.category_id, owner_user_id=course.owner_user_id, ) for course in courses ] def get_by_id(self, course_id: int) -> Optional[CourseEntity]: course = self.courses_repository.get_by_id(course_id) if course: return CourseEntity( id=course.id, title=course.title, description=course.description, category_id=course.category_id, owner_user_id=course.owner_user_id, ) return None def create(self, course: CourseEntity) -> CourseEntity: course_model = Course( title=course.title, description=course.description, category_id=course.category_id, owner_user_id=course.owner_user_id, ) created_course = self.courses_repository.create(course_model) return CourseEntity( id=created_course.id, title=created_course.title, description=created_course.description, category_id=created_course.category_id, owner_user_id=created_course.owner_user_id, ) def update(self, course_id: int, course: CourseEntity) -> Optional[CourseEntity]: course_model = self.courses_repository.get_by_id(course_id) if course_model: course_model.title = course.title course_model.description = course.description course_model.category_id = course.category_id course_model.owner_user_id = course.owner_user_id updated_course = self.courses_repository.update(course_model) return CourseEntity( id=updated_course.id, title=updated_course.title, description=updated_course.description, category_id=updated_course.category_id, owner_user_id=updated_course.owner_user_id, ) return None def delete(self, course_id: int) -> bool: return self.courses_repository.delete(course_id) is not None