diff --git a/docker-compose.yml b/docker-compose.yml index 230d47a..c1b24a9 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -30,7 +30,6 @@ services: # condition: service_healthy # command: > # sh -c "python3 -m alembic upgrade head && - # python3 -m scripts.seed && # gunicorn --bind 0.0.0.0:3000 app:app" code-api: diff --git a/src/handlers/riddle_handler.py b/src/handlers/riddle_handler.py index f3d3313..2a23734 100644 --- a/src/handlers/riddle_handler.py +++ b/src/handlers/riddle_handler.py @@ -16,7 +16,8 @@ def get_riddles(self): def get_riddles_group(self): """Get a random group of riddles (1 per index) and their solution.""" amount = request.args.get('amount', 5, type=int) - res = self.riddle_service.get_random_riddles_group(amount) + tag = request.args.get('tag') + res = self.riddle_service.get_random_riddles_group(amount, tag=tag) if res['status'] == "error": return jsonify(res), 400 return jsonify(res), 200 diff --git a/src/repositories/riddle_repository.py b/src/repositories/riddle_repository.py index a0778f0..33a8196 100644 --- a/src/repositories/riddle_repository.py +++ b/src/repositories/riddle_repository.py @@ -47,15 +47,20 @@ def find_all(self, offset: int = 0, limit: int = 10): return riddles, total_count - def find_random_per_index(self, amount: int): + def find_random_per_index(self, amount: int, tag_name: str = None): """Pick one random riddle for each refer_index from 1 to amount.""" riddles_group = [] with self._get_session() as session: for i in range(1, amount + 1): statement = select(Riddle).where(Riddle.refer_index == i) + if tag_name: + statement = statement.join(Riddle.tags).where(Tag.name.ilike(tag_name)) results = session.exec(statement).all() if results: riddles_group.append(random.choice(results)) else: - raise ValueError(f"No riddles found for specific index {i}") + error_msg = f"No riddles found for specific index {i}" + if tag_name: + error_msg += f" with tag '{tag_name}'" + raise ValueError(error_msg) return riddles_group diff --git a/src/services/riddle_service.py b/src/services/riddle_service.py index f8a3cdb..991fe04 100644 --- a/src/services/riddle_service.py +++ b/src/services/riddle_service.py @@ -87,10 +87,10 @@ def update_riddle(self, riddle_id: str, update_data: dict): return self.riddle_repo.update(riddle).model_dump() - def get_random_riddles_group(self, amount: int): + def get_random_riddles_group(self, amount: int, tag: str = None): """Pick N random riddles (1 per refer_index) and build solution string.""" try: - riddles = self.riddle_repo.find_random_per_index(amount) + riddles = self.riddle_repo.find_random_per_index(amount, tag_name=tag) # Build solution string by joining refer_char in order of refer_index solution = "".join([r.refer_char for r in riddles])