From 55f9e15468def026981de7369d3c6034370b8b8b Mon Sep 17 00:00:00 2001 From: akhdanre Date: Sun, 25 May 2025 22:06:25 +0700 Subject: [PATCH] feat: fix the response lgoin user data --- app/di_container.py | 1 + app/mapper/user_mapper.py | 9 ++++++- app/repositories/quiz_repositroy.py | 8 +++++++ app/schemas/response/auth/login_response.py | 1 + app/services/quiz_service.py | 26 ++++++++++++--------- 5 files changed, 33 insertions(+), 12 deletions(-) diff --git a/app/di_container.py b/app/di_container.py index 20dc267..9cd92ff 100644 --- a/app/di_container.py +++ b/app/di_container.py @@ -77,6 +77,7 @@ class Container(containers.DeclarativeContainer): subject_repository, answer_repository, ) + answer_service = providers.Factory( AnswerService, answer_repository, diff --git a/app/mapper/user_mapper.py b/app/mapper/user_mapper.py index d0d352c..bd0651f 100644 --- a/app/mapper/user_mapper.py +++ b/app/mapper/user_mapper.py @@ -49,9 +49,16 @@ class UserMapper: email=user.email, name=user.name, birth_date=( - DatetimeUtil.to_string(user.birth_date) if user.birth_date else None + DatetimeUtil.to_string(user.birth_date, fmt="%d-%m-%Y") + if user.birth_date + else None ), pic_url=user.pic_url, phone=user.phone, locale=user.locale, + created_at=( + DatetimeUtil.to_string(user.created_at, fmt="%d-%m-%Y") + if user.created_at + else None + ), ) diff --git a/app/repositories/quiz_repositroy.py b/app/repositories/quiz_repositroy.py index 28bcd93..2c24b3b 100644 --- a/app/repositories/quiz_repositroy.py +++ b/app/repositories/quiz_repositroy.py @@ -109,6 +109,14 @@ class QuizRepository: ) return [QuizEntity(**doc) for doc in cursor] + def get_random_quizzes(self, limit: int = 3) -> List[QuizEntity]: + pipeline = [ + {"$match": {"is_public": True}}, + {"$sample": {"size": limit}}, + ] + cursor = self.collection.aggregate(pipeline) + return [QuizEntity(**doc) for doc in cursor] + def get_random_quizzes_by_subjects( self, subject_ids: List[str], limit: int = 3 ) -> List[QuizEntity]: diff --git a/app/schemas/response/auth/login_response.py b/app/schemas/response/auth/login_response.py index 8c634a0..d50824c 100644 --- a/app/schemas/response/auth/login_response.py +++ b/app/schemas/response/auth/login_response.py @@ -12,3 +12,4 @@ class LoginResponseSchema(BaseModel): pic_url: Optional[str] = None phone: Optional[str] = None locale: Optional[str] = None + created_at: Optional[str] = None diff --git a/app/services/quiz_service.py b/app/services/quiz_service.py index 45be7e8..0745440 100644 --- a/app/services/quiz_service.py +++ b/app/services/quiz_service.py @@ -123,22 +123,26 @@ class QuizService: return result def get_quiz_recommendation(self, user_id: str, page: int, limit: int): - user_answer = self.answer_repository.get_by_user(user_id=user_id) + if not user_id: + quiz_data = self.quiz_repository.get_random_quizzes(limit=limit) + else: + user_answer = self.answer_repository.get_by_user(user_id=user_id) - if not user_answer: - return [] + if not user_answer: + return [] - quiz_ids = list({answer.quiz_id for answer in user_answer}) - quiz_work = self.quiz_repository.get_by_ids(quiz_ids) + quiz_ids = list({answer.quiz_id for answer in user_answer}) + quiz_work = self.quiz_repository.get_by_ids(quiz_ids) - if not quiz_work: - return [] + if not quiz_work: + return [] - quiz_subjects = list({quiz.subject_id for quiz in quiz_work}) + quiz_subjects = list({quiz.subject_id for quiz in quiz_work}) + + quiz_data = self.quiz_repository.get_random_quizzes_by_subjects( + subject_ids=quiz_subjects, limit=limit + ) - quiz_data = self.quiz_repository.get_random_quizzes_by_subjects( - subject_ids=quiz_subjects, limit=limit - ) result = [] for quiz in quiz_data: author = self.user_repostory.get_user_by_id(user_id=quiz.author_id)