from app.core.base_schema import CommonSchema """单株照片 —— Pydantic 校验/序列化模型。""" from datetime import datetime from pydantic import BaseModel, ConfigDict, Field class TreePhotoBaseSchema(BaseModel): model_config = ConfigDict(from_attributes=True) combination_id: int = Field(..., description="杂交组合") tree_id: int | None = Field(default=None, description="单株") evaluation_id: int | None = Field(default=None, description="所属鉴定") category: str | None = Field(default=None, description="所属标签页") photo_type: str | None = Field(default=None, description="照片类型") photo_url: str | None = Field(default=None, description="照片路径/URL") capture_date: str | None = Field(default=None, description="拍摄日期") remark: str | None = Field(default=None, description="备注") class TreePhotoCreateSchema(TreePhotoBaseSchema): pass class TreePhotoUpdateSchema(TreePhotoBaseSchema): combination_id: int | None = Field(default=None, description="杂交组合") tree_id: int | None = Field(default=None, description="单株") evaluation_id: int | None = Field(default=None, description="所属鉴定") category: str | None = Field(default=None, description="所属标签页") photo_type: str | None = Field(default=None, description="照片类型") photo_url: str | None = Field(default=None, description="照片路径/URL") capture_date: str | None = Field(default=None, description="拍摄日期") remark: str | None = Field(default=None, description="备注") class TreePhotoOutSchema(TreePhotoBaseSchema): id: int uuid: str combination_name: str | None = None # 由 Service 层联表填充 tree_name: str | None = None # 由 Service 层联表填充 evaluation_name: str | None = None # 由 Service 层联表填充 category: str | None = None photo_type: str | None = None photo_url: str | None = None capture_date: str | None = None remark: str | None = None created_time: datetime | None = None updated_time: datetime | None = None created_by: CommonSchema | None = None updated_by: CommonSchema | None = None class TreePhotoQueryParam(BaseModel): combination_id: int | None = Field(default=None, description="杂交组合", json_schema_extra={"q": "eq"}) tree_id: int | None = Field(default=None, description="单株", json_schema_extra={"q": "eq"}) evaluation_id: int | None = Field(default=None, description="所属鉴定", json_schema_extra={"q": "eq"}) category: str | None = Field(default=None, description="所属标签页", json_schema_extra={"q": "eq"}) photo_type: str | None = Field(default=None, description="照片类型", json_schema_extra={"q": "eq"})