From 7ea7f8f560e93f184c1d8df3ccb1c41fab653b48 Mon Sep 17 00:00:00 2001 From: Pathompum Jirakarnpaisan <107536914+Saannddy@users.noreply.github.com> Date: Thu, 9 Apr 2026 22:47:24 +0700 Subject: [PATCH 1/2] chore: uncomment local services and remove seed script from docker-compose configuration --- docker-compose.yml | 64 +++++++++++++++++++++++----------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 230d47a..c6117dd 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,41 +1,41 @@ services: - # db: - # image: postgres:16-alpine - # restart: always - # profiles: [ "local" ] - # environment: - # POSTGRES_USER: postgres - # POSTGRES_PASSWORD: postgres - # POSTGRES_DB: code_executor - # ports: - # - "5432:5432" - # volumes: - # - postgres_data:/var/lib/postgresql/data - # healthcheck: - # test: [ "CMD-SHELL", "pg_isready -U postgres -d code_executor" ] - # interval: 5s - # timeout: 5s - # retries: 5 + db: + image: postgres:16-alpine + restart: always + profiles: [ "local" ] + environment: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + POSTGRES_DB: code_executor + ports: + - "5432:5432" + volumes: + - postgres_data:/var/lib/postgresql/data + healthcheck: + test: [ "CMD-SHELL", "pg_isready -U postgres -d code_executor" ] + interval: 5s + timeout: 5s + retries: 5 - # local-code-api: - # image: code-api:latest - # build: . - # profiles: [ "local" ] - # ports: - # - "3000:3000" - # environment: - # DATABASE_URL: ${POSTGRES_URL} - # depends_on: - # db: - # condition: service_healthy - # command: > - # sh -c "python3 -m alembic upgrade head && - # python3 -m scripts.seed && - # gunicorn --bind 0.0.0.0:3000 app:app" + local-code-api: + image: code-api:latest + build: . + profiles: [ "local" ] + ports: + - "3000:3000" + environment: + DATABASE_URL: ${POSTGRES_URL} + depends_on: + db: + condition: service_healthy + command: > + sh -c "python3 -m alembic upgrade head && + gunicorn --bind 0.0.0.0:3000 app:app" code-api: image: code-api:latest build: . + profiles: [ "remote" ] ports: - "3000:3000" environment: From 298067a2c676eb3e249b42d73df6303b8beeb624 Mon Sep 17 00:00:00 2001 From: Pathompum Jirakarnpaisan <107536914+Saannddy@users.noreply.github.com> Date: Fri, 10 Apr 2026 00:29:11 +0700 Subject: [PATCH 2/2] feat: add optional tag filtering to random riddle group retrieval --- src/handlers/riddle_handler.py | 3 ++- src/repositories/riddle_repository.py | 9 +++++++-- src/services/riddle_service.py | 4 ++-- 3 files changed, 11 insertions(+), 5 deletions(-) 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])