TIF_E41211115_Genso_quiz_ba.../app/services/quiz_service.py

54 lines
1.9 KiB
Python

from typing import List
from repositories import QuizRepository
from schemas import QuizGetSchema
from schemas.requests import QuizCreateSchema
from schemas.response import UserQuizListResponse
from exception import DataNotFoundException
from mapper import map_quiz_entity_to_schema
from exception import ValidationException
class QuizService:
def __init__(self, quiz_repository=QuizRepository):
self.quiz_repository = quiz_repository
def get_quiz(self, quiz_id) -> QuizGetSchema:
data = self.quiz_repository.get_by_id(quiz_id)
if data is None:
raise DataNotFoundException("Quiz not found")
return map_quiz_entity_to_schema(data)
def get_user_quiz(
self, user_id: str, page: int = 1, page_size: int = 10
) -> UserQuizListResponse:
quizzes = self.quiz_repository.get_by_user_id(user_id, page, page_size)
total_user_quiz = self.quiz_repository.count_by_user_id(user_id)
return UserQuizListResponse(
total=total_user_quiz,
quizzes=[map_quiz_entity_to_schema(quiz) for quiz in quizzes],
)
def create_quiz(self, quiz_data: QuizCreateSchema):
for question in quiz_data.question_listings:
if question.type == "option" and (
not question.options or len(question.options) != 4
):
raise ValidationException(
"Option type questions must have exactly 4 options."
)
return self.quiz_repository.create(quiz_data)
def update_quiz(self, quiz_id, quiz_data):
return self.quiz_repository.update(quiz_id, quiz_data)
def delete_quiz(self, quiz_id):
return self.quiz_repository.delete(quiz_id)
def quiz_recommendation(self):
data = self.quiz_repository
if data is None:
raise DataNotFoundException("Quiz not found")
return map_quiz_entity_to_schema(data)