- 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>
123 lines
3.3 KiB
Python
123 lines
3.3 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
|
|
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_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
|