add json response store manager

This commit is contained in:
NoeBerdoz
2025-04-12 13:40:51 +02:00
parent 7bf0b28188
commit 1e5f774f91
6 changed files with 50 additions and 2 deletions

View File

@ -1,4 +1,5 @@
API_URI=
API_KEY=
API_TEAM=
GAME_FILES_DIR=/project_absolute_path/game_files
GROQ_API_KEY=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

2
.gitignore vendored
View File

@ -273,3 +273,5 @@ devenv.lock
# pre-commit
.pre-commit-config.yaml
game_files

View File

@ -6,3 +6,4 @@ load_dotenv()
API_URI = str(os.getenv("API_URI") or "")
API_KEY = str(os.getenv("API_KEY") or "")
API_TEAM = str(os.getenv("API_TEAM") or "")
GAME_FILES_DIR = str(os.getenv("GAME_FILES_DIR") or "")

View File

@ -5,6 +5,7 @@ from typing import Literal, Dict, Any
import config
from dto.requests import GameStartRequestDTO, GameDecisionRequestDTO
from services.julius_baer_api_client import JuliusBaerApiClient
from utils.storage.game_files_manager import store_game_round_data
class Player:
@ -33,8 +34,11 @@ class Player:
status = ''
decision = self.make_decision(start_response.client_data)
while status not in ['gameover', 'complete']:
decision_counter = 0
store_game_round_data(start_response, decision_counter, str(start_response.session_id))
while status not in ['gameover', 'complete']:
payload = GameDecisionRequestDTO(
decision=decision,
session_id=start_response.session_id,
@ -45,8 +49,13 @@ class Player:
print(decision_response.status, decision_response.score)
status = decision_response.status
decision = self.make_decision(decision_response.client_data)
store_game_round_data(decision_response, decision_counter, str(start_response.session_id))
decision_counter += 1
time.sleep(1.5)
def make_decision(self, client_data: Dict[str, Any]) -> Literal["Accept", "Reject"]:
# Do your magic!

View File

View File

@ -0,0 +1,35 @@
import os
import logging
import config
import json
from dto.responses import GameStartResponseDTO, GameDecisionResponseDTO
GAME_FILES_DIR = config.GAME_FILES_DIR
# Define padding for round numbers (e.g., 6 digits for up to 999,999 rounds)
FOLDER_ROUND_PADDING = 6
def store_game_round_data(response: GameStartResponseDTO | GameDecisionResponseDTO, round_number: int, session_id: str):
"""
Logs structured response data and saves associated client files.
"""
logging.info(f"[+] Storing game round data in {GAME_FILES_DIR}")
try:
padded_round = str(round_number).zfill(FOLDER_ROUND_PADDING)
round_folder_name = f"{padded_round}_decision"
# Construct the directory path: base_dir / session_id / decision_XXXXXX
round_dir = os.path.join(GAME_FILES_DIR, str(session_id), round_folder_name)
os.makedirs(round_dir, exist_ok=True) # Create the directory structure if it doesn't exist
json_file_path = os.path.join(round_dir, f"{padded_round}_response.json")
with open(json_file_path, "w") as json_file:
json.dump(response.model_dump_json(), json_file)
logging.info(f"[+] Successfully saved API response JSON to: {json_file_path}")
except Exception as e:
logging.error(f"[!] Failed to save API response JSON: {e}")