feat: fix the response lgoin user data

This commit is contained in:
akhdanre 2025-05-25 22:06:25 +07:00
parent 82faab1cc5
commit 55f9e15468
5 changed files with 33 additions and 12 deletions

View File

@ -77,6 +77,7 @@ class Container(containers.DeclarativeContainer):
subject_repository, subject_repository,
answer_repository, answer_repository,
) )
answer_service = providers.Factory( answer_service = providers.Factory(
AnswerService, AnswerService,
answer_repository, answer_repository,

View File

@ -49,9 +49,16 @@ class UserMapper:
email=user.email, email=user.email,
name=user.name, name=user.name,
birth_date=( 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, pic_url=user.pic_url,
phone=user.phone, phone=user.phone,
locale=user.locale, locale=user.locale,
created_at=(
DatetimeUtil.to_string(user.created_at, fmt="%d-%m-%Y")
if user.created_at
else None
),
) )

View File

@ -109,6 +109,14 @@ class QuizRepository:
) )
return [QuizEntity(**doc) for doc in cursor] 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( def get_random_quizzes_by_subjects(
self, subject_ids: List[str], limit: int = 3 self, subject_ids: List[str], limit: int = 3
) -> List[QuizEntity]: ) -> List[QuizEntity]:

View File

@ -12,3 +12,4 @@ class LoginResponseSchema(BaseModel):
pic_url: Optional[str] = None pic_url: Optional[str] = None
phone: Optional[str] = None phone: Optional[str] = None
locale: Optional[str] = None locale: Optional[str] = None
created_at: Optional[str] = None

View File

@ -123,22 +123,26 @@ class QuizService:
return result return result
def get_quiz_recommendation(self, user_id: str, page: int, limit: int): 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: if not user_answer:
return [] return []
quiz_ids = list({answer.quiz_id for answer in user_answer}) quiz_ids = list({answer.quiz_id for answer in user_answer})
quiz_work = self.quiz_repository.get_by_ids(quiz_ids) quiz_work = self.quiz_repository.get_by_ids(quiz_ids)
if not quiz_work: if not quiz_work:
return [] 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 = [] result = []
for quiz in quiz_data: for quiz in quiz_data:
author = self.user_repostory.get_user_by_id(user_id=quiz.author_id) author = self.user_repostory.get_user_by_id(user_id=quiz.author_id)