so much stuff lol
This commit is contained in:
@ -1,4 +1,4 @@
|
||||
from typing import Any, Dict, Optional
|
||||
from typing import Any, Dict, Optional, Union
|
||||
import aiohttp
|
||||
import logging
|
||||
from app.services.external_api.base_external_service import BaseExternalService
|
||||
@ -7,14 +7,20 @@ from app.services.external_api.tcgplayer.tcgplayer_credentials import TCGPlayerC
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
class BaseTCGPlayerService(BaseExternalService):
|
||||
STORE_BASE_URL = "https://store.tcgplayer.com"
|
||||
LOGIN_ENDPOINT = "/oauth/login"
|
||||
PRICING_ENDPOINT = "/Admin/Pricing"
|
||||
|
||||
def __init__(self):
|
||||
super().__init__(
|
||||
store_base_url="https://store.tcgplayer.com",
|
||||
login_endpoint="/oauth/login",
|
||||
pricing_endpoint="/Admin/Pricing",
|
||||
staged_inventory_endpoint=self.pricing_endpoint + "/DownloadStagedInventoryExportCSV?type=Pricing",
|
||||
live_inventory_endpoint=self.pricing_endpoint + "/DownloadMyExportCSV?type=Pricing"
|
||||
)
|
||||
super().__init__(base_url=self.STORE_BASE_URL)
|
||||
|
||||
# Set up endpoints
|
||||
self.login_endpoint = self.LOGIN_ENDPOINT
|
||||
self.pricing_endpoint = self.PRICING_ENDPOINT
|
||||
self.staged_inventory_endpoint = f"{self.PRICING_ENDPOINT}/DownloadStagedInventoryExportCSV?type=Pricing"
|
||||
self.live_inventory_endpoint = f"{self.PRICING_ENDPOINT}/DownloadMyExportCSV?type=Pricing"
|
||||
self.pricing_export_endpoint = f"{self.PRICING_ENDPOINT}/downloadexportcsv"
|
||||
|
||||
self.credentials = TCGPlayerCredentials()
|
||||
|
||||
def _get_headers(self, method: str) -> Dict[str, str]:
|
||||
@ -53,10 +59,11 @@ class BaseTCGPlayerService(BaseExternalService):
|
||||
params: Optional[Dict[str, Any]] = None,
|
||||
headers: Optional[Dict[str, str]] = None,
|
||||
data: Optional[Dict[str, Any]] = None,
|
||||
auth_required: bool = True
|
||||
) -> Dict[str, Any]:
|
||||
auth_required: bool = True,
|
||||
download_file: bool = False
|
||||
) -> Union[Dict[str, Any], bytes]:
|
||||
session = await self._get_session()
|
||||
url = f"{self.store_base_url}{endpoint}"
|
||||
url = f"{self.base_url}{endpoint}"
|
||||
|
||||
# Get the authentication cookie if required
|
||||
if auth_required:
|
||||
@ -77,6 +84,9 @@ class BaseTCGPlayerService(BaseExternalService):
|
||||
if response.status == 401:
|
||||
raise RuntimeError("TCGPlayer authentication failed. Cookie may be invalid or expired.")
|
||||
response.raise_for_status()
|
||||
|
||||
if download_file:
|
||||
return await response.read()
|
||||
return await response.json()
|
||||
except aiohttp.ClientError as e:
|
||||
logger.error(f"TCGPlayer API request failed: {str(e)}")
|
||||
|
@ -5,14 +5,17 @@ class TCGPlayerInventoryService(BaseTCGPlayerService):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
|
||||
async def get_inventory(self) -> List[Dict]:
|
||||
"""Get inventory items"""
|
||||
endpoint = "/inventory"
|
||||
response = await self._make_request("GET", endpoint)
|
||||
return response.get("results", [])
|
||||
|
||||
async def update_inventory(self, updates: List[Dict]) -> Dict:
|
||||
"""Update inventory items"""
|
||||
endpoint = "/inventory"
|
||||
response = await self._make_request("PUT", endpoint, data=updates)
|
||||
return response
|
||||
async def get_tcgplayer_export(self, export_type: str):
|
||||
"""
|
||||
Get a TCGPlayer Staged Inventory Export, Live Inventory Export, or Pricing Export
|
||||
"""
|
||||
if export_type == "staged":
|
||||
endpoint = self.staged_inventory_endpoint
|
||||
elif export_type == "live":
|
||||
endpoint = self.live_inventory_endpoint
|
||||
elif export_type == "pricing":
|
||||
endpoint = self.pricing_export_endpoint
|
||||
else:
|
||||
raise ValueError(f"Invalid export type: {export_type}, must be 'staged', 'live', or 'pricing'")
|
||||
file_bytes = await self._make_request("GET", endpoint, download_file=True)
|
||||
return file_bytes
|
@ -1,106 +0,0 @@
|
||||
from typing import Dict, List, Optional
|
||||
from datetime import datetime
|
||||
from app.services.external_api.tcgplayer.base_tcgplayer_service import BaseTCGPlayerService
|
||||
|
||||
class TCGPlayerOrderService(BaseTCGPlayerService):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
|
||||
async def get_orders(
|
||||
self,
|
||||
status: Optional[str] = None,
|
||||
start_date: Optional[datetime] = None,
|
||||
end_date: Optional[datetime] = None,
|
||||
limit: int = 100
|
||||
) -> List[Dict]:
|
||||
"""
|
||||
Get a list of orders with optional filtering
|
||||
|
||||
Args:
|
||||
status: Filter by order status (e.g., "Shipped", "Processing")
|
||||
start_date: Filter orders after this date
|
||||
end_date: Filter orders before this date
|
||||
limit: Maximum number of orders to return
|
||||
|
||||
Returns:
|
||||
List of orders matching the criteria
|
||||
"""
|
||||
endpoint = "/orders"
|
||||
params = {"limit": limit}
|
||||
|
||||
if status:
|
||||
params["status"] = status
|
||||
if start_date:
|
||||
params["startDate"] = start_date.isoformat()
|
||||
if end_date:
|
||||
params["endDate"] = end_date.isoformat()
|
||||
|
||||
response = await self._make_request("GET", endpoint, params=params)
|
||||
return response.get("results", [])
|
||||
|
||||
async def get_order_details(self, order_id: str) -> Dict:
|
||||
"""
|
||||
Get detailed information about a specific order
|
||||
|
||||
Args:
|
||||
order_id: TCGPlayer order ID
|
||||
|
||||
Returns:
|
||||
Detailed order information
|
||||
"""
|
||||
endpoint = f"/orders/{order_id}"
|
||||
response = await self._make_request("GET", endpoint)
|
||||
return response
|
||||
|
||||
async def get_order_items(self, order_id: str) -> List[Dict]:
|
||||
"""
|
||||
Get items in a specific order
|
||||
|
||||
Args:
|
||||
order_id: TCGPlayer order ID
|
||||
|
||||
Returns:
|
||||
List of items in the order
|
||||
"""
|
||||
endpoint = f"/orders/{order_id}/items"
|
||||
response = await self._make_request("GET", endpoint)
|
||||
return response.get("results", [])
|
||||
|
||||
async def get_order_status(self, order_id: str) -> Dict:
|
||||
"""
|
||||
Get the current status of an order
|
||||
|
||||
Args:
|
||||
order_id: TCGPlayer order ID
|
||||
|
||||
Returns:
|
||||
Order status information
|
||||
"""
|
||||
endpoint = f"/orders/{order_id}/status"
|
||||
response = await self._make_request("GET", endpoint)
|
||||
return response
|
||||
|
||||
async def update_order_status(
|
||||
self,
|
||||
order_id: str,
|
||||
status: str,
|
||||
tracking_number: Optional[str] = None
|
||||
) -> Dict:
|
||||
"""
|
||||
Update the status of an order
|
||||
|
||||
Args:
|
||||
order_id: TCGPlayer order ID
|
||||
status: New status for the order
|
||||
tracking_number: Optional tracking number for shipping
|
||||
|
||||
Returns:
|
||||
Updated order information
|
||||
"""
|
||||
endpoint = f"/orders/{order_id}/status"
|
||||
data = {"status": status}
|
||||
if tracking_number:
|
||||
data["trackingNumber"] = tracking_number
|
||||
|
||||
response = await self._make_request("PUT", endpoint, data=data)
|
||||
return response
|
Reference in New Issue
Block a user