Files
AutonetSellCar/backend/fetch_performance_check.py
AutonetSellCar Deploy 1f0dcb1ddb Initial commit: AutonetSellCar platform with deployment system
- Frontend: Next.js 14 with TypeScript
- Backend: FastAPI with SQLAlchemy
- Agent: Carmodoo sync agent
- Deployment: Docker Compose based staging/production setup
- Scripts: Automated deployment with rollback support

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-30 13:24:39 +09:00

108 lines
3.8 KiB
Python

"""
기존 차량의 성능점검표를 가져오는 스크립트
"""
import asyncio
import sys
sys.path.insert(0, '.')
from sqlalchemy.orm import Session
from app.database import SessionLocal, engine
from app.models import Car, CarPerformanceCheck
from app.api.carmodoo import carmodoo_client
async def fetch_and_save_performance_check(car_id: int, car_no: str):
"""특정 차량의 성능점검표를 가져와서 저장"""
db = SessionLocal()
try:
# 이미 있는지 확인
existing = db.query(CarPerformanceCheck).filter(
CarPerformanceCheck.car_id == car_id
).first()
if existing:
print(f"Car {car_id} already has performance check")
return False
# 카모두에서 성능점검표 가져오기
print(f"Fetching performance check for car_no: {car_no}")
result = await carmodoo_client.get_performance_check(car_no)
# raw_html 저장 (디버깅용)
if result.get("raw_html"):
with open(f"./debug_perf_check_{car_no}.html", "w", encoding="utf-8") as f:
f.write(result["raw_html"])
print(f" Raw HTML saved to debug_perf_check_{car_no}.html (length: {len(result['raw_html'])})")
if not result.get("found"):
print(f"Performance check not found for car_no: {car_no}")
return False
perf_data = result["data"]
print(f"Performance check found: {perf_data.get('check_number', 'N/A')}")
# CarPerformanceCheck 생성
performance_check = CarPerformanceCheck(
car_id=car_id,
check_number=perf_data.get("check_number"),
check_date=perf_data.get("check_date"),
valid_until=perf_data.get("valid_until"),
car_number=perf_data.get("car_number"),
first_registration=perf_data.get("first_registration"),
mileage=perf_data.get("mileage"),
mileage_status=perf_data.get("mileage_status"),
seize_count=perf_data.get("seize_count", 0),
collateral_count=perf_data.get("collateral_count", 0),
is_flood_damaged=perf_data.get("is_flood_damaged", False),
is_fire_damaged=perf_data.get("is_fire_damaged", False),
is_total_loss=perf_data.get("is_total_loss", False),
usage_history=perf_data.get("usage_history"),
is_rental_used=perf_data.get("is_rental_used", False),
engine_status=perf_data.get("engine_status"),
transmission_status=perf_data.get("transmission_status"),
power_delivery_status=perf_data.get("power_delivery_status"),
steering_status=perf_data.get("steering_status"),
brake_status=perf_data.get("brake_status"),
electrical_status=perf_data.get("electrical_status"),
fuel_system_status=perf_data.get("fuel_system_status"),
raw_data=perf_data,
raw_html=result.get("raw_html", "")[:50000],
report_image_url=perf_data.get("report_image_url"),
)
db.add(performance_check)
db.commit()
print(f"Performance check saved for car {car_id}")
return True
except Exception as e:
print(f"Error: {e}")
import traceback
traceback.print_exc()
db.rollback()
return False
finally:
db.close()
async def main():
# 모든 차량 조회
db = SessionLocal()
cars = db.query(Car).filter(
Car.source == "carmodoo",
Car.source_id.isnot(None)
).all()
db.close()
print(f"Found {len(cars)} cars from carmodoo")
for car in cars:
print(f"\n--- Processing Car ID: {car.id}, Source ID: {car.source_id} ---")
await fetch_and_save_performance_check(car.id, car.source_id)
await asyncio.sleep(1) # 서버 부하 방지
if __name__ == "__main__":
asyncio.run(main())