- 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>
92 lines
3.7 KiB
Python
92 lines
3.7 KiB
Python
"""성능점검표 가져오기 스크립트"""
|
|
import asyncio
|
|
import sys
|
|
import os
|
|
os.chdir(os.path.dirname(os.path.abspath(__file__)))
|
|
sys.path.insert(0, '.')
|
|
|
|
from app.api.carmodoo import carmodoo_client
|
|
from app.database import SessionLocal
|
|
from app.models import Car, CarPerformanceCheck
|
|
|
|
async def fetch_and_save():
|
|
db = SessionLocal()
|
|
|
|
try:
|
|
# 1. 최근 차량 중 성능점검표 없는 것 확인
|
|
cars = db.query(Car).order_by(Car.id.desc()).limit(5).all()
|
|
print("Recent cars:")
|
|
for c in cars:
|
|
perf = db.query(CarPerformanceCheck).filter(CarPerformanceCheck.car_id == c.id).first()
|
|
print(f" ID {c.id}: {c.source_id} - has_perf: {perf is not None}")
|
|
|
|
# K5 차량 (ID 6) 처리
|
|
car = db.query(Car).filter(Car.id == 6).first()
|
|
if not car:
|
|
print("Car ID 4 not found")
|
|
return
|
|
|
|
print(f"Car: {car.car_name}, source_id: {car.source_id}")
|
|
|
|
# 2. 기존 성능점검표 삭제
|
|
existing = db.query(CarPerformanceCheck).filter(CarPerformanceCheck.car_id == 4).first()
|
|
if existing:
|
|
db.delete(existing)
|
|
db.commit()
|
|
print("Deleted existing performance check")
|
|
|
|
# 3. 카모두에서 성능점검표 가져오기
|
|
print(f"Fetching performance check for car_no: {car.source_id}")
|
|
result = await carmodoo_client.get_performance_check(car.source_id)
|
|
|
|
print(f"Result found: {result.get('found')}")
|
|
print(f"Check number: {result.get('check_num')}")
|
|
|
|
if result.get('found') and result.get('data'):
|
|
perf_data = result['data']
|
|
print(f"Performance check data keys: {perf_data.keys()}")
|
|
|
|
# 4. DB에 저장
|
|
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", ""),
|
|
)
|
|
db.add(performance_check)
|
|
db.commit()
|
|
print(f"Saved performance check: {perf_data.get('check_number')}")
|
|
else:
|
|
print("No performance check data found from Carmodoo")
|
|
print(f"Full result: {result}")
|
|
|
|
except Exception as e:
|
|
print(f"Error: {e}")
|
|
import traceback
|
|
traceback.print_exc()
|
|
finally:
|
|
db.close()
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(fetch_and_save())
|