feat: adding increment for user playing the quiz

This commit is contained in:
akhdanre 2025-05-01 00:15:32 +07:00
parent 417c2e017c
commit 650c4d7b03
6 changed files with 17 additions and 6 deletions

View File

@ -69,7 +69,7 @@ class QuizController:
answer_id = self.answer_service.create_answer(answer_obj) answer_id = self.answer_service.create_answer(answer_obj)
return make_response( return make_response(
message="Answer submitted", message="Answer submitted",
data={"answer_id": True}, data={"answer_id": answer_id},
status_code=201, status_code=201,
) )
except ValidationError as e: except ValidationError as e:

View File

@ -14,6 +14,7 @@ class QuizEntity(BaseModel):
date: Optional[datetime] = None date: Optional[datetime] = None
total_quiz: Optional[int] = 0 total_quiz: Optional[int] = 0
limit_duration: Optional[int] = 0 limit_duration: Optional[int] = 0
total_user_playing: int = 0
question_listings: Optional[list[QuestionItemEntity]] = [] question_listings: Optional[list[QuestionItemEntity]] = []
class Config: class Config:

View File

@ -8,7 +8,7 @@ from .base import PyObjectId
class UserAnswerEntity(BaseModel): class UserAnswerEntity(BaseModel):
id: Optional[PyObjectId] = Field(alias="_id") id: Optional[PyObjectId] = Field(default=None, alias="_id")
session_id: Optional[str] session_id: Optional[str]
quiz_id: str quiz_id: str
user_id: str user_id: str

View File

@ -9,7 +9,7 @@ class UserAnswerRepository:
self.collection: Collection = db.user_answers self.collection: Collection = db.user_answers
def create(self, answer_session: UserAnswerEntity) -> str: def create(self, answer_session: UserAnswerEntity) -> str:
data = answer_session.model_dump(by_alias=True) data = answer_session.model_dump(by_alias=True, exclude_none=True)
result = self.collection.insert_one(data) result = self.collection.insert_one(data)
return str(result.inserted_id) return str(result.inserted_id)

View File

@ -62,6 +62,12 @@ class QuizRepository:
) )
return result.modified_count > 0 return result.modified_count > 0
def update_user_playing(self, quiz_id: str, total_user: int) -> bool:
result = self.collection.update_one(
{"_id": ObjectId(quiz_id)}, {"$set": {"total_user_playing": total_user}}
)
return result.modified_count > 0
def delete(self, quiz_id: str) -> bool: def delete(self, quiz_id: str) -> bool:
result = self.collection.delete_one({"_id": ObjectId(quiz_id)}) result = self.collection.delete_one({"_id": ObjectId(quiz_id)})
return result.deleted_count > 0 return result.deleted_count > 0

View File

@ -29,6 +29,11 @@ class AnswerService:
if not user_data: if not user_data:
raise ValidationException(message="user is not registered") raise ValidationException(message="user is not registered")
total_quiz_played = quiz_data.total_user_playing + 1
self.quiz_repository.update_user_playing(
quiz_id=quiz_data.id, total_user=total_quiz_played
)
question_map = {q.index: q for q in quiz_data.question_listings} question_map = {q.index: q for q in quiz_data.question_listings}
answer_item_Entity = [] answer_item_Entity = []
@ -91,8 +96,7 @@ class AnswerService:
total_score=total_score, total_score=total_score,
) )
self.answer_repository.create(answer_entity) return self.answer_repository.create(answer_entity)
return True
def update_answer(self, answer_id, answer_data): def update_answer(self, answer_id, answer_data):
return self.answer_repository.update(answer_id, answer_data) return self.answer_repository.update(answer_id, answer_data)