feat: done make get answer by session and user id
This commit is contained in:
parent
f89a7646d8
commit
53fb989d67
|
@ -37,6 +37,13 @@ def submit_answer(controller: QuizController = Provide[Container.quiz_controller
|
||||||
return controller.submit_answer(req_body)
|
return controller.submit_answer(req_body)
|
||||||
|
|
||||||
|
|
||||||
|
@quiz_bp.route("/answer/session", methods=["POST"])
|
||||||
|
@inject
|
||||||
|
def get_answer_session(controller: QuizController = Provide[Container.quiz_controller]):
|
||||||
|
req_body = request.get_json()
|
||||||
|
return controller.get_user_ans_session(req_body)
|
||||||
|
|
||||||
|
|
||||||
@quiz_bp.route("/answer", methods=["GET"])
|
@quiz_bp.route("/answer", methods=["GET"])
|
||||||
@inject
|
@inject
|
||||||
def get_answer(controller: QuizController = Provide[Container.quiz_controller]):
|
def get_answer(controller: QuizController = Provide[Container.quiz_controller]):
|
||||||
|
|
|
@ -75,7 +75,7 @@ class QuizController:
|
||||||
def get_answer(self, quiz_id, user_id, session_id):
|
def get_answer(self, quiz_id, user_id, session_id):
|
||||||
try:
|
try:
|
||||||
# self.answer_service.
|
# self.answer_service.
|
||||||
pass
|
pass
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return make_error_response(e)
|
return make_error_response(e)
|
||||||
|
|
||||||
|
@ -139,3 +139,25 @@ class QuizController:
|
||||||
return make_response(message="succes labeling", data=result)
|
return make_response(message="succes labeling", data=result)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return make_error_response(e)
|
return make_error_response(e)
|
||||||
|
|
||||||
|
def get_user_ans_session(self, body):
|
||||||
|
try:
|
||||||
|
session_id = body.get("session_id")
|
||||||
|
user_id = body.get("user_id")
|
||||||
|
|
||||||
|
if not session_id and not user_id:
|
||||||
|
return make_response(
|
||||||
|
message="session_id or user_id must be provided", status_code=400
|
||||||
|
)
|
||||||
|
|
||||||
|
data = self.answer_service.get_answer_session(
|
||||||
|
session_id=session_id,
|
||||||
|
user_id=user_id,
|
||||||
|
)
|
||||||
|
|
||||||
|
return make_response(message="Successfully retrieved the answer", data=data)
|
||||||
|
|
||||||
|
except KeyError as e:
|
||||||
|
return make_error_response(f"Missing required key: {str(e)}")
|
||||||
|
except Exception as e:
|
||||||
|
return make_error_response(f"An error occurred: {str(e)}")
|
||||||
|
|
|
@ -19,6 +19,18 @@ class UserAnswerRepository:
|
||||||
return None
|
return None
|
||||||
return UserAnswerEntity(**result)
|
return UserAnswerEntity(**result)
|
||||||
|
|
||||||
|
def get_by_userid_and_sessionid(
|
||||||
|
self,
|
||||||
|
user_id: str,
|
||||||
|
session_id: str,
|
||||||
|
) -> Optional[UserAnswerEntity]:
|
||||||
|
result = self.collection.find_one(
|
||||||
|
{"user_id": user_id, "session_id": session_id}
|
||||||
|
)
|
||||||
|
if not result:
|
||||||
|
return None
|
||||||
|
return UserAnswerEntity(**result)
|
||||||
|
|
||||||
def get_by_user_and_quiz(self, user_id: str, quiz_id: str) -> List[dict]:
|
def get_by_user_and_quiz(self, user_id: str, quiz_id: str) -> List[dict]:
|
||||||
result = self.collection.find(
|
result = self.collection.find(
|
||||||
{"user_id": user_id, "quiz_id": ObjectId(quiz_id)}
|
{"user_id": user_id, "quiz_id": ObjectId(quiz_id)}
|
||||||
|
|
|
@ -8,6 +8,7 @@ from .recomendation.recomendation_response_schema import ListingQuizResponse
|
||||||
from .subject.get_subject_schema import GetSubjectResponse
|
from .subject.get_subject_schema import GetSubjectResponse
|
||||||
from .auth.login_response import LoginResponseSchema
|
from .auth.login_response import LoginResponseSchema
|
||||||
from .user.user_response_scema import UserResponseSchema
|
from .user.user_response_scema import UserResponseSchema
|
||||||
|
from .answer.answer_session_response import AnsweredQuizResponse
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
"QuizCreationResponse",
|
"QuizCreationResponse",
|
||||||
|
@ -21,4 +22,5 @@ __all__ = [
|
||||||
"GetSubjectResponse",
|
"GetSubjectResponse",
|
||||||
"LoginResponseSchema",
|
"LoginResponseSchema",
|
||||||
"UserResponseSchema",
|
"UserResponseSchema",
|
||||||
|
"AnsweredQuizResponse",
|
||||||
]
|
]
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
from pydantic import BaseModel
|
||||||
|
from typing import List, Dict
|
||||||
|
|
||||||
|
|
||||||
|
class AnsweredQuizResponse(BaseModel):
|
||||||
|
id: str
|
||||||
|
session_id: str
|
||||||
|
quiz_id: str
|
||||||
|
user_id: str
|
||||||
|
answered_at: str
|
||||||
|
answers: List[Dict]
|
||||||
|
total_score: int
|
||||||
|
total_correct: int
|
|
@ -1,8 +1,10 @@
|
||||||
from app.repositories import UserAnswerRepository, QuizRepository, UserRepository
|
from app.repositories import UserAnswerRepository, QuizRepository, UserRepository
|
||||||
from app.schemas.requests import UserAnswerSchema
|
from app.schemas.requests import UserAnswerSchema
|
||||||
|
from app.schemas.response import AnsweredQuizResponse
|
||||||
from app.models import UserAnswerEntity
|
from app.models import UserAnswerEntity
|
||||||
from app.models.entities import AnswerItemEntity
|
from app.models.entities import AnswerItemEntity
|
||||||
from app.exception import ValidationException
|
from app.exception import ValidationException
|
||||||
|
from app.helpers import DatetimeUtil
|
||||||
|
|
||||||
|
|
||||||
class AnswerService:
|
class AnswerService:
|
||||||
|
@ -103,3 +105,35 @@ class AnswerService:
|
||||||
|
|
||||||
def delete_answer(self, answer_id):
|
def delete_answer(self, answer_id):
|
||||||
return self.answer_repository.delete_by_id(answer_id)
|
return self.answer_repository.delete_by_id(answer_id)
|
||||||
|
|
||||||
|
def get_answer_session(self, session_id: str, user_id: str) -> AnsweredQuizResponse:
|
||||||
|
answer_data: UserAnswerEntity = (
|
||||||
|
self.answer_repository.get_by_userid_and_sessionid(
|
||||||
|
session_id=session_id,
|
||||||
|
user_id=user_id,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
if not answer_data:
|
||||||
|
return None
|
||||||
|
|
||||||
|
data = AnsweredQuizResponse(
|
||||||
|
id=str(answer_data.id),
|
||||||
|
session_id=answer_data.session_id,
|
||||||
|
quiz_id=answer_data.quiz_id,
|
||||||
|
user_id=answer_data.user_id,
|
||||||
|
answered_at=DatetimeUtil.to_string(answer_data.answered_at),
|
||||||
|
answers=[
|
||||||
|
{
|
||||||
|
"question_index": ans.question_index,
|
||||||
|
"answer": ans.answer,
|
||||||
|
"is_correct": ans.is_correct,
|
||||||
|
"time_spent": ans.time_spent,
|
||||||
|
}
|
||||||
|
for ans in answer_data.answers
|
||||||
|
],
|
||||||
|
total_score=answer_data.total_score,
|
||||||
|
total_correct=answer_data.total_correct,
|
||||||
|
)
|
||||||
|
|
||||||
|
return data
|
||||||
|
|
Loading…
Reference in New Issue