- 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>
111 lines
4.2 KiB
Python
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")
|