diff --git a/backend/adapters/hdhive_adapter.py b/backend/adapters/hdhive_adapter.py index e2386f2..2e2e603 100644 --- a/backend/adapters/hdhive_adapter.py +++ b/backend/adapters/hdhive_adapter.py @@ -1,5 +1,6 @@ from config import Config from http_client import request_json +from error_handling import AppServiceError, classify_http_error def _headers(): @@ -12,20 +13,42 @@ def _headers(): return headers +def _ensure_hdhive_success(response_data): + if not isinstance(response_data, dict): + return + success = response_data.get("success") + if success is not False: + return + + code = str(response_data.get("code") or "HDHIVE_API_ERROR") + message = response_data.get("message") or response_data.get("description") or "HDHIVE request failed" + category = classify_http_error(400, code) + raise AppServiceError( + message, + category=category, + code=code, + status=400, + provider="hdhive", + detail=response_data, + ) + + def search_resource(media_type, tmdb_id): url = f"{Config.HDHIVE_BASE_URL}/api/open/resources/{media_type}/{tmdb_id}" - return request_json( + result = request_json( url, headers=_headers(), max_retry=Config.MAX_RETRY, retry_delay_ms=Config.RETRY_DELAY_MS, provider="hdhive", ) + _ensure_hdhive_success(result.get("data")) + return result def unlock_link(slug): url = f"{Config.HDHIVE_BASE_URL}/api/open/resources/unlock" - return request_json( + result = request_json( url, method="POST", payload={"slug": slug}, @@ -34,6 +57,8 @@ def unlock_link(slug): retry_delay_ms=Config.RETRY_DELAY_MS, provider="hdhive", ) + _ensure_hdhive_success(result.get("data")) + return result def normalize_resource(search_data, unlock_data):