Files
service-finder/backend/app/workers/vehicle/vehicle_efficiency_optimizer.py
2026-03-23 21:43:40 +00:00

60 lines
2.7 KiB
Python

import asyncio
import logging
from sqlalchemy import text
from app.database import AsyncSessionLocal
logging.basicConfig(level=logging.INFO, format='%(asctime)s [OPTIMIZER] %(message)s')
logger = logging.getLogger("Efficiency-Optimizer")
async def optimize_queue():
async with AsyncSessionLocal() as db:
try:
# 1. FÁZIS: AUTO-GOLD (Ami már kész van, ne menjen AI-hoz)
# Ha az UltimateSpecs vagy az RDW már kitöltötte a lényeget, lőjük Aranyba!
logger.info("🚀 1. Fázis: Auto-Gold ellenőrzés indítása...")
auto_gold_query = text("""
UPDATE vehicle.vehicle_model_definitions
SET status = 'gold_enriched',
updated_at = NOW(),
source = source || ' + AUTO_GOLD'
WHERE status = 'awaiting_ai_synthesis'
AND power_kw > 0
AND engine_capacity > 0
AND fuel_type != 'Unknown'
AND body_type IS NOT NULL
AND trim_level != ''
RETURNING id;
""")
result = await db.execute(auto_gold_query)
logger.info(f"{len(result.fetchall())} járművet automatikusan ARANY státuszba emeltem (AI megspórolva).")
# 2. FÁZIS: DEDUPLIKÁCIÓ (Katalógus összehasonlítás)
# Keressük azokat a várakozókat, amiknek már van egy ARANY párjuk
logger.info("🚀 2. Fázis: Duplikációk szűrése a katalógus alapján...")
dedup_query = text("""
UPDATE vehicle.vehicle_model_definitions AS pending
SET status = 'merged_duplicate',
updated_at = NOW()
FROM vehicle.vehicle_model_definitions AS gold
WHERE pending.status = 'awaiting_ai_synthesis'
AND gold.status = 'gold_enriched'
AND pending.make = gold.make
AND pending.normalized_name = gold.normalized_name
AND pending.year_from = gold.year_from
AND pending.fuel_type = gold.fuel_type
AND pending.market = gold.market
AND pending.id != gold.id
RETURNING pending.id;
""")
result = await db.execute(dedup_query)
logger.info(f"🗑️ {len(result.fetchall())} duplikált várakozót töröltem a sorból (Már van Arany párjuk).")
await db.commit()
logger.info("🏆 Optimalizálás befejezve. A sor megtisztítva!")
except Exception as e:
await db.rollback()
logger.error(f"❌ Hiba az optimalizálás során: {e}")
if __name__ == "__main__":
asyncio.run(optimize_queue())