diff --git a/backend/app/routes/usage_routes.py b/backend/app/routes/usage_routes.py index 8a6ad90..bef5b1f 100644 --- a/backend/app/routes/usage_routes.py +++ b/backend/app/routes/usage_routes.py @@ -1,5 +1,5 @@ import os -import hashlib +import hashlib from bson import json_util from flask_restx import Resource from flask_jwt_extended import jwt_required @@ -15,7 +15,8 @@ from app.docs.usage_models import ( model_price_update, model_prices_query_params, transcription_data_query_params, usage_ns) - +from app.utils.current_date import is_current_date +from app.utils.hash_key import set_hash_key TMP_DIR = '/tmp' @@ -40,13 +41,15 @@ class TranscriptionExport(Resource): validated = TranscriptionRequest(**data) - # Cria um nome de arquivo baseado nos parâmetros (evita caracteres inválidos) - hash_key = hashlib.md5(f"{validated.company_id}_{validated.start_date}_{validated.end_date}_{validated.who}".encode()).hexdigest() - filename = f"transcription_{hash_key}.xlsx" + # Cria um nome de arquivo baseado nos parâmetros (evita caracteres inválidos) + hash_key = set_hash_key(f"{validated.company_id}_{validated.start_date}_{validated.end_date}_{validated.who}") + filename = f"transcription_{hash_key}.xlsx" filepath = os.path.join(TMP_DIR, filename) + + ignore_cache = is_current_date(validated.start_date, validated.end_date) # Verifica se o arquivo já existe - if not os.path.exists(filepath): + if not os.path.exists(filepath) or ignore_cache: # Gera o relatório e salva no caminho desejado service = TranscriptionReportService( validated.company_id, @@ -72,7 +75,7 @@ class TranscriptionExport(Resource): download_name=os.path.basename(filepath), mimetype='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' ) - + @usage_ns.route('/data/trascription') class TranscriptionUsageData(Resource): diff --git a/backend/app/services/report_service.py b/backend/app/services/report_service.py index 56f16b6..95c3890 100644 --- a/backend/app/services/report_service.py +++ b/backend/app/services/report_service.py @@ -6,12 +6,13 @@ from openpyxl import Workbook from openpyxl.utils.dataframe import dataframe_to_rows from openpyxl.styles import Font, PatternFill import pandas as pd -import os -import hashlib +import os from typing import List, Dict, Any, Optional from app.utils.mysql_query import execute_query from app.utils.calc_api_usage import calculate_api_usage from app.services.redis_service import cache_del, cache_get, cache_set +from app.utils.current_date import is_current_date +from app.utils.hash_key import set_hash_key import json class TranscriptionReportService: @@ -311,11 +312,13 @@ class TranscriptionReportService: def _reportDataTotalCost(self): - hash_key = hashlib.md5(f"{self.company_id}_{self.start_date}_{self.end_date}".encode()).hexdigest() - sum_key = f"sum_total_cost_{hash_key}" - - if data := cache_get(f'report_model_usage:total_cost:{sum_key}'): - return json.loads(data) + sum_key = set_hash_key(f"{self.company_id}_{self.start_date}_{self.end_date}") + + ignore_cache = is_current_date(self.start_date, self.end_date) + + if not ignore_cache: + if data := cache_get(f'report_model_usage:total_cost:{sum_key}'): + return json.loads(data) self._fetch_mongo_data(all_data=True) mysql_data = self._fetch_mysql_data(hit_report=True) @@ -331,10 +334,10 @@ class TranscriptionReportService: 'total_client_cost': total_client_cost } - cache_set(f'report_model_usage:total_cost:{sum_key}', json.dumps(sum_total_cost)) + cache_set(f'report_model_usage:total_cost:{sum_key}', json.dumps(sum_total_cost), 86400) return sum_total_cost - + def reportDataXLSX(self, hit_report: Optional[bool] = False) -> str: self._fetch_mongo_data(all_data=True) diff --git a/backend/app/utils/current_date.py b/backend/app/utils/current_date.py new file mode 100644 index 0000000..3081f85 --- /dev/null +++ b/backend/app/utils/current_date.py @@ -0,0 +1,6 @@ +from datetime import datetime + +def is_current_date(start_date: str, end_date: str): + today_str = datetime.utcnow().date().isoformat() + ignore_cache = (start_date == today_str or end_date == today_str) + return ignore_cache \ No newline at end of file diff --git a/backend/app/utils/hash_key.py b/backend/app/utils/hash_key.py new file mode 100644 index 0000000..e6c8dd3 --- /dev/null +++ b/backend/app/utils/hash_key.py @@ -0,0 +1,5 @@ +import hashlib + +def set_hash_key(key: str) -> str: + hash_key = hashlib.md5(f"{key}".encode()).hexdigest() + return hash_key \ No newline at end of file