feat: fix the response lgoin user data
This commit is contained in:
parent
82faab1cc5
commit
55f9e15468
|
@ -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,
|
||||||
|
|
|
@ -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
|
||||||
|
),
|
||||||
)
|
)
|
||||||
|
|
|
@ -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]:
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue