From c582a940277d85b6997967d28bcce8fee8e7922a Mon Sep 17 00:00:00 2001 From: akhdanre Date: Mon, 28 Apr 2025 11:39:13 +0700 Subject: [PATCH] feat: adding get user --- app/blueprints/quiz.py | 10 ++++++++++ app/controllers/quiz_controller.py | 11 +++++++++++ app/main.py | 4 ++-- app/repositories/quiz_repositroy.py | 14 +++++++++++++- app/services/quiz_service.py | 7 +++++++ 5 files changed, 43 insertions(+), 3 deletions(-) diff --git a/app/blueprints/quiz.py b/app/blueprints/quiz.py index 3c201e1..da5826f 100644 --- a/app/blueprints/quiz.py +++ b/app/blueprints/quiz.py @@ -47,3 +47,13 @@ def get_quiz_recommendation( controller: QuizController = Provide[Container.quiz_controller], ): return controller.get_quiz_recommendation() + + +@quiz_bp.route("/user/", methods=["GET"]) +@inject +def get_user_quiz(controller: QuizController = Provide[Container.quiz_controller]): + page = request.args.get("page", default=1, type=int) + page_size = request.args.get("page_size", default=10, type=int) + return controller.get_user_quiz( + user_id=request.view_args["user_id"], page=page, page_size=page_size + ) diff --git a/app/controllers/quiz_controller.py b/app/controllers/quiz_controller.py index c378dd3..d53abda 100644 --- a/app/controllers/quiz_controller.py +++ b/app/controllers/quiz_controller.py @@ -82,3 +82,14 @@ class QuizController: print("yps") except Exception as e: return make_error_response(e) + + def get_user_quiz(self, user_id, page=1, page_size=10): + try: + result = self.quiz_service.get_user_quiz( + user_id=user_id, page=page, page_size=page_size + ) + return make_response( + message="User quizzes retrieved successfully", data=result + ) + except Exception as e: + return make_error_response(e) diff --git a/app/main.py b/app/main.py index b6aa521..479c448 100644 --- a/app/main.py +++ b/app/main.py @@ -41,8 +41,8 @@ def createApp() -> Flask: app.register_blueprint(user_blueprint, url_prefix="/api") app.register_blueprint(quiz_bp, url_prefix="/api/quiz") - # for rule in app.url_map.iter_rules(): - # print(f"Route: {rule} -> Methods: {rule.methods}") + for rule in app.url_map.iter_rules(): + print(f"Route: {rule} -> Methods: {rule.methods}") return app diff --git a/app/repositories/quiz_repositroy.py b/app/repositories/quiz_repositroy.py index 94749aa..9f8060d 100644 --- a/app/repositories/quiz_repositroy.py +++ b/app/repositories/quiz_repositroy.py @@ -1,10 +1,11 @@ from bson import ObjectId from typing import List, Optional from models import QuizEntity +from pymongo.database import Database class QuizRepository: - def __init__(self, db): + def __init__(self, db: Database): self.collection = db.quiz def create(self, quiz: QuizEntity) -> str: @@ -18,6 +19,17 @@ class QuizRepository: return QuizEntity(**data) return None + def get_by_user_id( + self, user_id: str, page: int = 1, page_size: int = 10 + ) -> List[QuizEntity]: + skip = (page - 1) * page_size + cursor = ( + self.collection.find({"user_id": ObjectId(user_id)}) + .skip(skip) + .limit(page_size) + ) + return [QuizEntity(**doc) for doc in cursor] + def get_all(self, skip: int = 0, limit: int = 10) -> List[QuizEntity]: cursor = self.collection.find().skip(skip).limit(limit) return [QuizEntity(**doc) for doc in cursor] diff --git a/app/services/quiz_service.py b/app/services/quiz_service.py index 3959d6b..08c7c2a 100644 --- a/app/services/quiz_service.py +++ b/app/services/quiz_service.py @@ -1,3 +1,4 @@ +from typing import List from repositories import QuizRepository from schemas import QuizGetSchema from exception import DataNotFoundException @@ -15,6 +16,12 @@ class QuizService: return map_quiz_entity_to_schema(data) + def get_user_quiz( + self, user_id: str, page: int = 1, page_size: int = 10 + ) -> List[QuizGetSchema]: + quizzes = self.quiz_repository.get_by_user_id(user_id, page, page_size) + return [QuizGetSchema.model_validate(quiz) for quiz in quizzes] + def create_quiz(self, quiz_data): return self.quiz_repository.create(quiz_data)