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

87 lines
3.5 KiB
Python

from typing import Optional
from sqlalchemy.orm import Session
from app.application.task_answers_repository import TaskAnswersRepository
from app.domain.entities.task_answers_entity import TaskAnswerEntity
from app.domain.models.task_answers import TaskAnswer
class TaskAnswersService:
def __init__(self, db: Session):
self.task_answers_repository = TaskAnswersRepository(db)
def get_all(self) -> list[TaskAnswerEntity]:
task_answers = self.task_answers_repository.get_all()
return [
TaskAnswerEntity(
id=task_answer.id,
answer_date=task_answer.answer_date,
text=task_answer.text,
is_current=task_answer.is_current,
comment=task_answer.comment,
user_id=task_answer.user_id,
task_id=task_answer.task_id,
) for task_answer in task_answers
]
def get_by_id(self, task_answer_id: int) -> Optional[TaskAnswerEntity]:
task_answer = self.task_answers_repository.get_by_id(task_answer_id)
if task_answer:
return TaskAnswerEntity(
id=task_answer.id,
answer_date=task_answer.answer_date,
text=task_answer.text,
is_current=task_answer.is_current,
comment=task_answer.comment,
user_id=task_answer.user_id,
task_id=task_answer.task_id,
)
return None
def create(self, task_answer: TaskAnswerEntity) -> TaskAnswerEntity:
task_answer_model = TaskAnswer(
answer_date=task_answer.answer_date,
text=task_answer.text,
is_current=task_answer.is_current,
comment=task_answer.comment,
user_id=task_answer.user_id,
task_id=task_answer.task_id,
)
created_task_answer = self.task_answers_repository.create(task_answer_model)
return TaskAnswerEntity(
id=created_task_answer.id,
answer_date=created_task_answer.answer_date,
text=created_task_answer.text,
is_current=created_task_answer.is_current,
comment=created_task_answer.comment,
user_id=created_task_answer.user_id,
task_id=created_task_answer.task_id,
)
def update(self, task_answer_id: int, task_answer: TaskAnswerEntity) -> Optional[TaskAnswerEntity]:
task_answer_model = self.task_answers_repository.get_by_id(task_answer_id)
if task_answer_model:
task_answer_model.answer_date = task_answer.answer_date
task_answer_model.text = task_answer.text
task_answer_model.is_current = task_answer.is_current
task_answer_model.comment = task_answer.comment
task_answer_model.user_id = task_answer.user_id
task_answer_model.task_id = task_answer.task_id
updated_task_answer = self.task_answers_repository.update(task_answer_model)
return TaskAnswerEntity(
id=updated_task_answer.id,
answer_date=updated_task_answer.answer_date,
text=updated_task_answer.text,
is_current=updated_task_answer.is_current,
comment=updated_task_answer.comment,
user_id=updated_task_answer.user_id,
task_id=updated_task_answer.task_id,
)
return None
def delete(self, task_answer_id: int) -> bool:
return self.task_answers_repository.delete(task_answer_id) is not None