from pydantic import BaseModel from datetime import datetime from typing import Optional, List, Any # ==================== Image Schemas ==================== class ImageResponse(BaseModel): id: int image_url: str caption: Optional[str] = None class Config: from_attributes = True # ==================== Solution Schemas ==================== class SolutionBase(BaseModel): title_ko: str title_en: Optional[str] = None title_ja: Optional[str] = None title_zh: Optional[str] = None subtitle_ko: Optional[str] = None subtitle_en: Optional[str] = None subtitle_ja: Optional[str] = None subtitle_zh: Optional[str] = None description_ko: Optional[str] = None description_en: Optional[str] = None description_ja: Optional[str] = None description_zh: Optional[str] = None features_ko: Optional[str] = None features_en: Optional[str] = None features_ja: Optional[str] = None features_zh: Optional[str] = None icon: Optional[str] = None color: Optional[str] = None main_image: Optional[str] = None is_active: bool = True display_order: int = 0 class SolutionCreate(SolutionBase): pass class SolutionUpdate(BaseModel): title_ko: Optional[str] = None title_en: Optional[str] = None title_ja: Optional[str] = None title_zh: Optional[str] = None subtitle_ko: Optional[str] = None subtitle_en: Optional[str] = None subtitle_ja: Optional[str] = None subtitle_zh: Optional[str] = None description_ko: Optional[str] = None description_en: Optional[str] = None description_ja: Optional[str] = None description_zh: Optional[str] = None features_ko: Optional[str] = None features_en: Optional[str] = None features_ja: Optional[str] = None features_zh: Optional[str] = None icon: Optional[str] = None color: Optional[str] = None main_image: Optional[str] = None is_active: Optional[bool] = None display_order: Optional[int] = None class SolutionImageResponse(BaseModel): id: int image_url: str caption_ko: Optional[str] = None caption_en: Optional[str] = None caption_ja: Optional[str] = None caption_zh: Optional[str] = None display_order: int = 0 class Config: from_attributes = True class SolutionResponse(SolutionBase): id: int created_at: datetime updated_at: datetime images: List[SolutionImageResponse] = [] class Config: from_attributes = True class SolutionLocalizedResponse(BaseModel): id: int title: str subtitle: Optional[str] description: Optional[str] features: List[str] icon: Optional[str] color: Optional[str] main_image: Optional[str] images: List[Any] = [] class Config: from_attributes = True # ==================== Product Schemas ==================== class ProductBase(BaseModel): name_ko: str name_en: Optional[str] = None name_ja: Optional[str] = None name_zh: Optional[str] = None category_ko: Optional[str] = None category_en: Optional[str] = None category_ja: Optional[str] = None category_zh: Optional[str] = None description_ko: Optional[str] = None description_en: Optional[str] = None description_ja: Optional[str] = None description_zh: Optional[str] = None detail_ko: Optional[str] = None detail_en: Optional[str] = None detail_ja: Optional[str] = None detail_zh: Optional[str] = None specifications: Optional[str] = None icon: Optional[str] = None main_image: Optional[str] = None is_active: bool = True display_order: int = 0 class ProductCreate(ProductBase): pass class ProductUpdate(BaseModel): name_ko: Optional[str] = None name_en: Optional[str] = None name_ja: Optional[str] = None name_zh: Optional[str] = None category_ko: Optional[str] = None category_en: Optional[str] = None category_ja: Optional[str] = None category_zh: Optional[str] = None description_ko: Optional[str] = None description_en: Optional[str] = None description_ja: Optional[str] = None description_zh: Optional[str] = None detail_ko: Optional[str] = None detail_en: Optional[str] = None detail_ja: Optional[str] = None detail_zh: Optional[str] = None specifications: Optional[str] = None icon: Optional[str] = None main_image: Optional[str] = None is_active: Optional[bool] = None display_order: Optional[int] = None class ProductImageResponse(BaseModel): id: int image_url: str caption_ko: Optional[str] = None caption_en: Optional[str] = None caption_ja: Optional[str] = None caption_zh: Optional[str] = None display_order: int = 0 class Config: from_attributes = True class ProductResponse(ProductBase): id: int created_at: datetime updated_at: datetime images: List[ProductImageResponse] = [] class Config: from_attributes = True class ProductLocalizedResponse(BaseModel): id: int name: str category: Optional[str] description: Optional[str] detail: Optional[str] specifications: Optional[str] icon: Optional[str] main_image: Optional[str] images: List[Any] = [] class Config: from_attributes = True