Feature: Russian language support & Vehicle Requests improvements
- Add Russian language support (title_ru, subtitle_ru) for hero banners - Add fuel/transmission translations for Mongolian (경유→Дизель, 오토→Автомат) - Improve Vehicle Requests admin page: - Display real request ID and user email - Show detailed request info (maker, grade, year, fuel, mileage) - Replace modal search with Cars page integration - Add "Add to Request" flow in Cars page for vehicle recommendations - Fix image URL handling in FilmStripSlider and car detail page 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -23,23 +23,24 @@ ALLOWED_EXTENSIONS = {".jpg", ".jpeg", ".png", ".gif", ".webp"}
|
||||
|
||||
|
||||
def get_localized_field(obj, field: str, lang: str) -> Optional[str]:
|
||||
"""Get localized field value with fallback to Korean then English"""
|
||||
"""Get localized field value with fallback to English"""
|
||||
# 1. 선택된 언어의 필드
|
||||
localized = getattr(obj, f"{field}_{lang}", None)
|
||||
if localized:
|
||||
return localized
|
||||
# Fallback to Korean
|
||||
ko_value = getattr(obj, f"{field}_ko", None)
|
||||
if ko_value:
|
||||
return ko_value
|
||||
# Fallback to English
|
||||
return getattr(obj, f"{field}_en", None)
|
||||
# 2. 영어 폴백
|
||||
en_value = getattr(obj, f"{field}_en", None)
|
||||
if en_value:
|
||||
return en_value
|
||||
# 3. 한국어 폴백 (마지막 수단)
|
||||
return getattr(obj, f"{field}_ko", None)
|
||||
|
||||
|
||||
# ==================== Public Endpoints ====================
|
||||
|
||||
@router.get("/", response_model=List[HeroBannerLocalizedResponse])
|
||||
def get_hero_banners(
|
||||
lang: str = Query("ko", regex="^(ko|en|mn)$"),
|
||||
lang: str = Query("ko", regex="^(ko|en|mn|ru)$"),
|
||||
db: Session = Depends(get_db)
|
||||
):
|
||||
"""활성 히어로 배너 목록 조회 (Public)"""
|
||||
|
||||
@@ -143,7 +143,36 @@ def admin_get_all_requests(
|
||||
query = query.filter(VehicleRequest.status == status)
|
||||
|
||||
requests = query.order_by(VehicleRequest.created_at.desc()).all()
|
||||
return requests
|
||||
|
||||
# User 정보 추가
|
||||
result = []
|
||||
for req in requests:
|
||||
user = db.query(User).filter(User.id == req.user_id).first()
|
||||
req_dict = {
|
||||
"id": req.id,
|
||||
"user_id": req.user_id,
|
||||
"user_email": user.email if user else None,
|
||||
"user_name": user.name if user else None,
|
||||
"maker_code": req.maker_code,
|
||||
"maker_name": req.maker_name,
|
||||
"model_code": req.model_code,
|
||||
"model_name": req.model_name,
|
||||
"grade_code": req.grade_code,
|
||||
"grade_name": req.grade_name,
|
||||
"year_from": req.year_from,
|
||||
"year_to": req.year_to,
|
||||
"mileage_min": req.mileage_min,
|
||||
"mileage_max": req.mileage_max,
|
||||
"fuel": req.fuel,
|
||||
"displacement_min": req.displacement_min,
|
||||
"displacement_max": req.displacement_max,
|
||||
"status": req.status,
|
||||
"admin_reviewed_at": req.admin_reviewed_at,
|
||||
"created_at": req.created_at,
|
||||
}
|
||||
result.append(req_dict)
|
||||
|
||||
return result
|
||||
|
||||
|
||||
@router.get("/admin/{request_id}", response_model=VehicleRequestWithVehicles)
|
||||
|
||||
Reference in New Issue
Block a user