from pydantic import BaseModel from datetime import datetime from typing import Optional, List class MemberLevelBase(BaseModel): level: int name: str description: Optional[str] = None annual_fee: float = 0.0 discount_price: float = 0.0 # 独立站部署节点数 deployment_nodes: int = 1 # 邮件营销推送数量 email_marketing_limit: int = 10000 # 产品SKU数 product_sku_limit: int = 100 # 每个SKU可加图片数量 sku_image_limit: int = 10 # 图片大小限制 image_size_limit: int = 5 # 每个SKU可加视频数量 sku_video_limit: int = 1 # 图片空间大小 image_storage_limit: int = 5 # 模板选择权限 template_access: bool = False # GEO,SEO 关键词营销 geo_seo_access: bool = False # 社交平台自动化营销 social_automation_access: bool = False # 定制化需求开发 custom_development_access: bool = False class MemberLevelCreate(MemberLevelBase): pass class MemberLevelUpdate(BaseModel): name: Optional[str] = None description: Optional[str] = None annual_fee: Optional[float] = None discount_price: Optional[float] = None # 独立站部署节点数 deployment_nodes: Optional[int] = None # 邮件营销推送数量 email_marketing_limit: Optional[int] = None # 产品SKU数 product_sku_limit: Optional[int] = None # 每个SKU可加图片数量 sku_image_limit: Optional[int] = None # 图片大小限制 image_size_limit: Optional[int] = None # 每个SKU可加视频数量 sku_video_limit: Optional[int] = None # 图片空间大小 image_storage_limit: Optional[int] = None # 模板选择权限 template_access: Optional[bool] = None # GEO,SEO 关键词营销 geo_seo_access: Optional[bool] = None # 社交平台自动化营销 social_automation_access: Optional[bool] = None # 定制化需求开发 custom_development_access: Optional[bool] = None class MemberLevelResponse(MemberLevelBase): id: int created_at: datetime updated_at: Optional[datetime] = None class Config: from_attributes = True # 公开会员等级数据(简化版,用于首页展示) class PublicMemberLevel(BaseModel): level: int name: str description: Optional[str] = None annual_fee: float discount_price: float deployment_nodes: int email_marketing_limit: int product_sku_limit: int sku_image_limit: int image_size_limit: int sku_video_limit: int image_storage_limit: int template_access: bool geo_seo_access: bool social_automation_access: bool custom_development_access: bool # 公开会员等级响应 class PublicMemberLevelResponse(BaseModel): member_levels: List[PublicMemberLevel] max_benefit_count: int