Files
AutonetSellCar/backend/app/schemas/hero_banner.py
AutonetSellCar Deploy 1d8e4435b3 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>
2025-12-30 18:56:28 +09:00

106 lines
2.7 KiB
Python

from pydantic import BaseModel, HttpUrl
from typing import Optional
from datetime import datetime
# ==================== Hero Banner Settings ====================
class HeroBannerSettingsBase(BaseModel):
slide_interval: int = 3000
animation_type: str = "film-strip"
image_width: int = 500
image_height: int = 300
auto_play: bool = True
class HeroBannerSettingsUpdate(BaseModel):
slide_interval: Optional[int] = None
animation_type: Optional[str] = None
image_width: Optional[int] = None
image_height: Optional[int] = None
auto_play: Optional[bool] = None
class HeroBannerSettingsResponse(HeroBannerSettingsBase):
id: int
created_at: datetime
updated_at: datetime
class Config:
from_attributes = True
# ==================== Hero Banner ====================
class HeroBannerBase(BaseModel):
title_ko: Optional[str] = None
title_en: Optional[str] = None
title_mn: Optional[str] = None
title_ru: Optional[str] = None # 러시아어
subtitle_ko: Optional[str] = None
subtitle_en: Optional[str] = None
subtitle_mn: Optional[str] = None
subtitle_ru: Optional[str] = None # 러시아어
image_url: str
link_url: Optional[str] = None
car_id: Optional[int] = None
is_active: bool = True
display_order: int = 0
class HeroBannerCreate(HeroBannerBase):
pass
class HeroBannerUpdate(BaseModel):
title_ko: Optional[str] = None
title_en: Optional[str] = None
title_mn: Optional[str] = None
title_ru: Optional[str] = None # 러시아어
subtitle_ko: Optional[str] = None
subtitle_en: Optional[str] = None
subtitle_mn: Optional[str] = None
subtitle_ru: Optional[str] = None # 러시아어
image_url: Optional[str] = None
link_url: Optional[str] = None
car_id: Optional[int] = None
is_active: Optional[bool] = None
display_order: Optional[int] = None
class HeroBannerResponse(HeroBannerBase):
id: int
created_at: datetime
updated_at: datetime
class Config:
from_attributes = True
class HeroBannerListResponse(BaseModel):
id: int
title_ko: Optional[str] = None
title_en: Optional[str] = None
image_url: str
link_url: Optional[str] = None
car_id: Optional[int] = None
is_active: bool
display_order: int
created_at: datetime
class Config:
from_attributes = True
# 다국어 지원 응답 (Public API용)
class HeroBannerLocalizedResponse(BaseModel):
id: int
title: Optional[str] = None
subtitle: Optional[str] = None
image_url: str
link_url: Optional[str] = None
car_id: Optional[int] = None
class Config:
from_attributes = True