Files
AutonetSellCar/backend/app/models/vehicle_request.py
AutonetSellCar Deploy 80d2e82922 Add car_id column to RequestVehicle model
- Add car_id foreign key to link recommended vehicles to cars table
- Add car relationship for easier access

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 12:40:40 +09:00

111 lines
4.2 KiB
Python

from sqlalchemy import Column, Integer, String, Boolean, DateTime, ForeignKey, Text, JSON, Float
from sqlalchemy.orm import relationship
from sqlalchemy.sql import func
from ..database import Base
class VehicleRequest(Base):
"""Track vehicle search requests from users"""
__tablename__ = "vehicle_requests"
id = Column(Integer, primary_key=True, index=True)
user_id = Column(Integer, ForeignKey("users.id"), nullable=False)
# Search criteria
maker_code = Column(String(50))
maker_name = Column(String(100))
model_code = Column(String(50))
model_name = Column(String(100))
grade_code = Column(String(50))
grade_name = Column(String(100))
year_from = Column(Integer)
year_to = Column(Integer)
mileage_min = Column(Integer)
mileage_max = Column(Integer)
fuel = Column(String(50)) # 연료 타입 (휘발유, 경유, 하이브리드, LPG, 전기)
displacement_min = Column(Integer) # 최소 배기량 (cc)
displacement_max = Column(Integer) # 최대 배기량 (cc)
# CC payment for request submission
cc_paid = Column(Float, default=1.0) # CC paid for this request (1 CC)
# Status: pending, reviewed, completed
status = Column(String(20), default="pending")
admin_reviewed_at = Column(DateTime(timezone=True))
admin_notes = Column(Text)
created_at = Column(DateTime(timezone=True), server_default=func.now())
updated_at = Column(DateTime(timezone=True), onupdate=func.now())
# Relationships
user = relationship("User", backref="vehicle_requests")
recommended_vehicles = relationship("RequestVehicle", back_populates="request", cascade="all, delete-orphan")
class RequestVehicle(Base):
"""Vehicles recommended by admin for a user's request"""
__tablename__ = "request_vehicles"
id = Column(Integer, primary_key=True, index=True)
request_id = Column(Integer, ForeignKey("vehicle_requests.id"), nullable=False)
# Reference to imported car in cars table
car_id = Column(Integer, ForeignKey("cars.id"), nullable=True)
# Car data from Carmodoo (stored as JSON for backup/display)
car_data = Column(JSON, nullable=False)
# Admin approval
is_approved = Column(Boolean, default=False)
approved_at = Column(DateTime(timezone=True))
created_at = Column(DateTime(timezone=True), server_default=func.now())
# Relationships
request = relationship("VehicleRequest", back_populates="recommended_vehicles")
car = relationship("Car", backref="request_vehicles")
class PurchasedVehicle(Base):
"""Track purchased vehicles and their shipping status"""
__tablename__ = "purchased_vehicles"
id = Column(Integer, primary_key=True, index=True)
user_id = Column(Integer, ForeignKey("users.id"), nullable=False)
# Vehicle info
car_name = Column(String(200))
car_data = Column(JSON) # Full car details
car_image = Column(String(500)) # Main image URL
# Price info
vehicle_price_krw = Column(Integer)
domestic_cost_krw = Column(Integer)
shipping_cost_usd = Column(Integer)
total_cost_krw = Column(Integer)
car_type = Column(String(20)) # small, compact
# Dealer selection and commission (50/50 split of Mongolia margin)
selected_dealer_id = Column(Integer, ForeignKey("dealer_info.id"), nullable=True)
dealer_commission_krw = Column(Integer, default=0) # 50% of Mongolia margin
platform_commission_krw = Column(Integer, default=0) # 50% of Mongolia margin
commission_paid = Column(Boolean, default=False) # Whether commission has been paid
commission_paid_at = Column(DateTime(timezone=True))
# Shipping status: 1-5
# 1: Purchased, 2: Incheon Port, 3: In Transit, 4: Customs, 5: Delivered
shipping_status = Column(Integer, default=1)
status_updated_at = Column(DateTime(timezone=True))
# Location info
current_location = Column(String(200))
estimated_arrival = Column(DateTime(timezone=True))
# Timestamps
purchased_at = Column(DateTime(timezone=True), server_default=func.now())
delivered_at = Column(DateTime(timezone=True))
# Relationships
user = relationship("User", backref="purchased_vehicles")
selected_dealer = relationship("DealerInfo", backref="purchased_vehicles")