45 lines
1.6 KiB
Python
45 lines
1.6 KiB
Python
from typing import List, Optional
|
|
from models.entities import SubjectEntity
|
|
from schemas.requests import SubjectCreateRequest, SubjectUpdateRequest
|
|
from schemas.response import GetSubjectResponse
|
|
from repositories import SubjectRepository
|
|
|
|
|
|
class SubjectService:
|
|
def __init__(self, repository: SubjectRepository):
|
|
self.repository = repository
|
|
|
|
def create_subject(self, request: SubjectCreateRequest) -> str:
|
|
subject = SubjectEntity(**request)
|
|
return self.repository.create(subject)
|
|
|
|
def get_all_subjects(self) -> List[GetSubjectResponse]:
|
|
subjects = self.repository.get_all()
|
|
return [
|
|
GetSubjectResponse(
|
|
id=str(subject.id),
|
|
name=subject.name,
|
|
alias=subject.short_name,
|
|
description=subject.description,
|
|
)
|
|
for subject in subjects
|
|
]
|
|
|
|
def get_subject_by_id(self, subject_id: str) -> Optional[GetSubjectResponse]:
|
|
subject = self.repository.get_by_id(subject_id)
|
|
if subject:
|
|
return GetSubjectResponse(
|
|
id=str(subject.id),
|
|
name=subject.name,
|
|
alias=subject.short_name,
|
|
description=subject.description,
|
|
)
|
|
return None
|
|
|
|
def update_subject(self, subject_id: str, request: SubjectUpdateRequest) -> bool:
|
|
update_data = request.dict(exclude_unset=True)
|
|
return self.repository.update(subject_id, update_data)
|
|
|
|
def delete_subject(self, subject_id: str) -> bool:
|
|
return self.repository.delete(subject_id)
|