from pydantic import BaseModel from typing import Optional class PatchCreate(BaseModel): name: str location: Optional[str] = None status: Optional[str] = "" class PatchUpdate(BaseModel): name: Optional[str] = None location: Optional[str] = None status: Optional[str] = None class CropCreate(BaseModel): patch_id: int name: str variety: Optional[str] = None date: Optional[str] = None class CropUpdate(BaseModel): name: Optional[str] = None variety: Optional[str] = None date: Optional[str] = None class CropResponse(CropCreate): id: int images: Optional[list[str]] = None model_config = { "from_attributes": True } @classmethod def from_orm(cls, obj): return cls( id=obj.id, patch_id=obj.patch_id, name=obj.name, variety=obj.variety, date=obj.date.strftime("%Y-%m-%d") if obj.date else None, ) class PatchResponse(PatchCreate): id: int crop: Optional[CropResponse] = None model_config = {"from_attributes": True} class RecordCreate(BaseModel): crop_id: int type: Optional[str] = None date: Optional[str] = None content: Optional[str] = None images: Optional[list[str]] = None videos: Optional[list[str]] = None stage: Optional[str] = None class RecordUpdate(BaseModel): type: Optional[str] = None date: Optional[str] = None content: Optional[str] = None images: Optional[list[str]] = None videos: Optional[list[str]] = None stage: Optional[str] = None class RecordResponse(RecordCreate): id: int model_config = { "from_attributes": True } @classmethod def from_orm(cls, obj): return cls( id=obj.id, crop_id=obj.crop_id, type=obj.type, date=obj.date.strftime("%Y-%m-%d") if obj.date else None, content=obj.content, images=obj.images, videos=obj.videos, stage=obj.stage, )