import structlog from sqlalchemy import select logger = structlog.get_logger() async def price_sync_job() -> None: from app.dependencies import get_session_factory from app.db.models.asset import Asset from app.services.price_feed_service import fetch_price from app.services.investment_service import update_asset_price session_factory = get_session_factory() if not session_factory: return async with session_factory() as db: try: result = await db.execute(select(Asset).where(Asset.is_active == True)) # noqa: E712 assets = result.scalars().all() updated = 0 for asset in assets: data = await fetch_price(asset.symbol, asset.data_source, asset.data_source_id) if data and data.get("price"): await update_asset_price(db, asset, data["price"], data.get("change_24h")) updated += 1 await db.commit() logger.info("price_sync_done", updated=updated, total=len(assets)) except Exception as exc: await db.rollback() logger.error("price_sync_failed", error=str(exc))