Files
AutonetSellCar/backend/app/schemas/vehicle_request.py
AutonetSellCar Deploy b0a78abeb3 Add directly purchased cars to My Requests page
- Add new /my-vehicles API endpoint returning both recommended and direct purchases
- Add DirectPurchasedCarResponse and MyVehiclesResponse schemas
- Update frontend to display directly purchased cars (from banners with 1CC)
- Show separate collapsible section for direct purchases

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

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

144 lines
4.0 KiB
Python

from pydantic import BaseModel
from typing import Optional, List, Any
from datetime import datetime
# Vehicle Request Schemas
class VehicleRequestCreate(BaseModel):
maker_code: str
maker_name: Optional[str] = None
model_code: str
model_name: Optional[str] = None
grade_code: Optional[str] = None
grade_name: Optional[str] = None
year_from: Optional[int] = None
year_to: Optional[int] = None
mileage_min: Optional[int] = None
mileage_max: Optional[int] = None
fuel: Optional[str] = None
displacement_min: Optional[int] = None
displacement_max: Optional[int] = None
class VehicleRequestResponse(BaseModel):
id: int
user_id: int
user_email: Optional[str] = None # 관리자용
user_name: Optional[str] = None # 관리자용
maker_code: Optional[str]
maker_name: Optional[str]
model_code: Optional[str]
model_name: Optional[str]
grade_code: Optional[str]
grade_name: Optional[str]
year_from: Optional[int]
year_to: Optional[int]
mileage_min: Optional[int]
mileage_max: Optional[int]
fuel: Optional[str]
displacement_min: Optional[int]
displacement_max: Optional[int]
status: str
admin_reviewed_at: Optional[datetime]
created_at: datetime
class Config:
from_attributes = True
# Request Vehicle (Admin recommended) Schemas
class RequestVehicleCreate(BaseModel):
request_id: int
car_data: dict
is_approved: bool = False
class RequestVehicleResponse(BaseModel):
id: int
request_id: int
car_id: Optional[int] = None # Reference to cars table
car_data: dict
is_approved: bool
approved_at: Optional[datetime]
created_at: datetime
class Config:
from_attributes = True
class RequestVehicleApprove(BaseModel):
vehicle_ids: List[int]
# Purchased Vehicle Schemas
class PurchasedVehicleCreate(BaseModel):
car_name: str
car_data: Optional[dict] = None
car_image: Optional[str] = None
vehicle_price_krw: int
domestic_cost_krw: int
shipping_cost_usd: int
total_cost_krw: int
car_type: str # small, compact
selected_dealer_id: Optional[int] = None # Selected dealer for commission split
class PurchasedVehicleResponse(BaseModel):
id: int
user_id: int
car_name: Optional[str]
car_data: Optional[dict]
car_image: Optional[str]
vehicle_price_krw: Optional[int]
domestic_cost_krw: Optional[int]
shipping_cost_usd: Optional[int]
total_cost_krw: Optional[int]
car_type: Optional[str]
selected_dealer_id: Optional[int] = None
dealer_commission_krw: Optional[int] = 0
platform_commission_krw: Optional[int] = 0
commission_paid: bool = False
commission_paid_at: Optional[datetime] = None
shipping_status: int
status_updated_at: Optional[datetime]
current_location: Optional[str]
estimated_arrival: Optional[datetime]
purchased_at: datetime
delivered_at: Optional[datetime]
class Config:
from_attributes = True
class PurchasedVehicleUpdateStatus(BaseModel):
shipping_status: int # 1-7: 구매완료, 인천항, 텐진항, 자먼우드, 울란바토르, 통관, 배송완료
current_location: Optional[str] = None
estimated_arrival: Optional[datetime] = None
# List response with request and approved vehicles
class VehicleRequestWithVehicles(BaseModel):
request: VehicleRequestResponse
approved_vehicles: List[RequestVehicleResponse]
class Config:
from_attributes = True
# Directly purchased car (from CarView - when user pays 1CC on banner car)
class DirectPurchasedCarResponse(BaseModel):
id: int # CarView id
car_id: int
car_data: dict # Car details for display
cc_paid: float
purchased_at: datetime
class Config:
from_attributes = True
# Full response including both recommended and directly purchased cars
class MyVehiclesResponse(BaseModel):
vehicle_requests: List[VehicleRequestWithVehicles]
direct_purchases: List[DirectPurchasedCarResponse] # Cars purchased directly from banner