Add SOLD OUT badge and improve deployment docs

- Add SOLD OUT overlay on car detail page image
- Add SOLD OUT badge next to car name
- Add Sold Out status in Admin Cars detail view
- Add soldout field to Car TypeScript interface
- Create PRODUCTION_VALUES.md for deployment reference
- Update CLAUDE.md with CRITICAL deployment section
- Update TROUBLESHOOTING.md with recurring errors

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

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
AutonetSellCar Deploy
2026-01-03 09:05:16 +09:00
parent 2da464694b
commit b1afea79d9
8 changed files with 593 additions and 25 deletions

View File

@@ -4,7 +4,7 @@ from typing import List
from datetime import datetime, timedelta
from ..database import get_db
from ..models import VehicleRequest, RequestVehicle, PurchasedVehicle, User, DealerInfo, SystemSettings
from ..models import VehicleRequest, RequestVehicle, PurchasedVehicle, User, DealerInfo, SystemSettings, Car
from ..schemas import (
VehicleRequestCreate, VehicleRequestResponse,
RequestVehicleCreate, RequestVehicleResponse, RequestVehicleApprove,
@@ -100,9 +100,21 @@ def get_my_requests(
else:
approved_vehicles = []
# Enrich approved vehicles with latest soldout status from cars table
enriched_vehicles = []
for v in approved_vehicles:
vehicle_response = RequestVehicleResponse.model_validate(v)
# Get latest soldout status from cars table
if v.car_id:
car = db.query(Car).filter(Car.id == v.car_id).first()
if car:
# Add soldout status to car_data
vehicle_response.car_data = {**vehicle_response.car_data, "soldout": car.soldout}
enriched_vehicles.append(vehicle_response)
result.append(VehicleRequestWithVehicles(
request=VehicleRequestResponse.model_validate(req),
approved_vehicles=[RequestVehicleResponse.model_validate(v) for v in approved_vehicles]
approved_vehicles=enriched_vehicles
))
return result
@@ -189,9 +201,30 @@ def admin_get_request_detail(
if not request:
raise HTTPException(status_code=404, detail="Request not found")
# Import CarPerformanceCheck for PDF status
from ..models import CarPerformanceCheck
# Enrich with PDF status and soldout
enriched_vehicles = []
for v in request.recommended_vehicles:
vehicle_response = RequestVehicleResponse.model_validate(v)
# Get PDF status and soldout from car
if v.car_id:
car = db.query(Car).filter(Car.id == v.car_id).first()
perf_check = db.query(CarPerformanceCheck).filter(CarPerformanceCheck.car_id == v.car_id).first()
vehicle_response.car_data = {
**vehicle_response.car_data,
"soldout": car.soldout if car else False,
"has_pdf": bool(perf_check and perf_check.pdf_path),
"check_num": perf_check.check_number if perf_check else None,
}
enriched_vehicles.append(vehicle_response)
return VehicleRequestWithVehicles(
request=VehicleRequestResponse.model_validate(request),
approved_vehicles=[RequestVehicleResponse.model_validate(v) for v in request.recommended_vehicles]
approved_vehicles=enriched_vehicles
)
@@ -202,7 +235,7 @@ def admin_add_vehicle(
current_user: User = Depends(get_current_user),
db: Session = Depends(get_db)
):
"""Admin: Add a vehicle to a request"""
"""Admin: Add a vehicle to a request (also imports to cars table)"""
if not current_user.is_admin:
raise HTTPException(status_code=403, detail="Admin access required")
@@ -210,9 +243,51 @@ def admin_add_vehicle(
if not request:
raise HTTPException(status_code=404, detail="Request not found")
# Extract car data
car_data = vehicle_data.car_data
source_id = str(car_data.get("id", ""))
# Check if car already exists in cars table
existing_car = None
if source_id:
existing_car = db.query(Car).filter(
Car.source == "carmodoo",
Car.source_id == source_id
).first()
car_id = None
if existing_car:
car_id = existing_car.id
elif source_id:
# Create new car record from car_data
new_car = Car(
source="carmodoo",
source_id=source_id,
car_name=car_data.get("car_name", ""),
year=car_data.get("year"),
mileage=car_data.get("mileage"),
price_krw=car_data.get("original_price"),
fuel=car_data.get("fuel"),
transmission=car_data.get("transmission"),
color=car_data.get("color"),
displacement=car_data.get("displacement"),
margin_krw=car_data.get("korea_margin"),
margin_mn=car_data.get("mongolia_margin"),
check_num=car_data.get("check_num"),
is_displayed=True, # Displayed so user can view recommended car
status="active"
)
db.add(new_car)
db.flush()
car_id = new_car.id
# Update car_data with local car_id for frontend
car_data["local_car_id"] = car_id
vehicle = RequestVehicle(
request_id=request_id,
car_data=vehicle_data.car_data,
car_id=car_id,
car_data=car_data,
is_approved=vehicle_data.is_approved,
approved_at=datetime.utcnow() if vehicle_data.is_approved else None
)