199 lines
5.2 KiB
Python
199 lines
5.2 KiB
Python
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
|