From 1353964cb655b082d6a4a75eaa8ea819c914fe64 Mon Sep 17 00:00:00 2001 From: Nizar Izzuddin Yatim Fadlan Date: Tue, 9 Dec 2025 21:19:48 +0700 Subject: [PATCH] refactor: Enhance get_all_speakers function to support search functionality --- repository/speaker.py | 15 ++++++++++++++- routes/speaker.py | 4 +++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/repository/speaker.py b/repository/speaker.py index 6971181..9e47f6a 100644 --- a/repository/speaker.py +++ b/repository/speaker.py @@ -11,7 +11,11 @@ from schemas.speaker import SpeakerResponseItem -def get_all_speakers(db: Session, order_dir: Literal["asc", "desc"] = "asc"): +def get_all_speakers( + db: Session, + order_dir: Literal["asc", "desc"] = "asc", + search: Optional[str] = None, +): # Query dasar stmt = select(Speaker) @@ -21,6 +25,15 @@ def get_all_speakers(db: Session, order_dir: Literal["asc", "desc"] = "asc"): else: stmt = stmt.order_by(Speaker.updated_at.desc()) + if search: + search_pattern = f"%{search}%" + stmt = stmt.join(User, Speaker.user).where( + (User.username.ilike(search_pattern)) + | (User.first_name.ilike(search_pattern)) + | (User.last_name.ilike(search_pattern)) + | (User.email.ilike(search_pattern)) + ) + # Tambahkan pagination (offset + limit) # Hitung total data sebelum pagination total_count = db.scalar(select(func.count()).select_from(stmt.subquery())) diff --git a/routes/speaker.py b/routes/speaker.py index 08ba9c7..6d73126 100644 --- a/routes/speaker.py +++ b/routes/speaker.py @@ -60,7 +60,9 @@ async def get_speaker( ): try: if query.all: - data = speakerRepo.get_all_speakers(db=db, order_dir=query.order_dir) + data = speakerRepo.get_all_speakers( + db=db, search=query.search, order_dir=query.order_dir + ) else: data = speakerRepo.get_speaker_per_page_by_search( db=db,