skill-forge/API/app/infrastructure/courses_service.py

75 lines
2.6 KiB
Python

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