54 lines
2.1 KiB
Python
54 lines
2.1 KiB
Python
from sqlalchemy.orm import Session
|
|
from app.db.database import SessionLocal, transaction
|
|
from app.services.external_api.tcgplayer.tcgplayer_inventory_service import TCGPlayerInventoryService
|
|
from app.services.file_processing_service import FileProcessingService
|
|
from app.services.scheduler.base_scheduler import BaseScheduler
|
|
import logging
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
class SchedulerService:
|
|
def __init__(self):
|
|
self.tcgplayer_service = TCGPlayerInventoryService()
|
|
self.file_processor = FileProcessingService()
|
|
self.scheduler = BaseScheduler()
|
|
|
|
async def process_tcgplayer_export(self, export_type: str = "live", use_cache: bool = False):
|
|
"""
|
|
Process TCGPlayer export as a scheduled task.
|
|
|
|
Args:
|
|
export_type: Type of export to process (staged, live, or pricing)
|
|
"""
|
|
db = SessionLocal()
|
|
try:
|
|
logger.info(f"Starting scheduled TCGPlayer export processing for {export_type}")
|
|
|
|
# Download the file
|
|
file_bytes = await self.tcgplayer_service.get_tcgplayer_export(export_type)
|
|
|
|
# Process the file and load into database
|
|
with transaction(db):
|
|
stats = await self.file_processor.process_tcgplayer_export(db, export_type=export_type, file_bytes=file_bytes, use_cache=use_cache)
|
|
|
|
logger.info(f"Completed TCGPlayer export processing: {stats}")
|
|
return stats
|
|
|
|
except Exception as e:
|
|
logger.error(f"Error processing TCGPlayer export: {str(e)}")
|
|
raise
|
|
finally:
|
|
db.close()
|
|
|
|
async def start_scheduled_tasks(self):
|
|
"""Start all scheduled tasks"""
|
|
# Schedule TCGPlayer export processing to run daily at 2 AM
|
|
await self.scheduler.schedule_task(
|
|
task_name="process_tcgplayer_export",
|
|
func=self.process_tcgplayer_export,
|
|
interval_seconds=24 * 60 * 60, # 24 hours
|
|
export_type="live"
|
|
)
|
|
|
|
self.scheduler.start()
|
|
logger.info("All scheduled tasks started") |