feat: 增加菜地图片

This commit is contained in:
2026-09-09 19:01:05 +08:00
parent 31af6e07e2
commit 8b563e8249
3 changed files with 22 additions and 28 deletions

31
.idea/workspace.xml generated
View File

@@ -5,30 +5,9 @@
</component> </component>
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="92592c29-2276-4c2c-bd45-9ab94e25491d" name="Changes" comment=""> <list default="true" id="92592c29-2276-4c2c-bd45-9ab94e25491d" name="Changes" comment="">
<change afterPath="$PROJECT_DIR$/.gitignore" afterDir="false" /> <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/inspectionProfiles/profiles_settings.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/schemas/patch.py" beforeDir="false" afterPath="$PROJECT_DIR$/schemas/patch.py" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/modules.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/service/patch_service.py" beforeDir="false" afterPath="$PROJECT_DIR$/service/patch_service.py" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/patch-service.iml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/vcs.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/config/database.py" afterDir="false" />
<change afterPath="$PROJECT_DIR$/config/rustfs.py" afterDir="false" />
<change afterPath="$PROJECT_DIR$/main.py" afterDir="false" />
<change afterPath="$PROJECT_DIR$/models/base.py" afterDir="false" />
<change afterPath="$PROJECT_DIR$/models/patch.py" afterDir="false" />
<change afterPath="$PROJECT_DIR$/requirements.txt" afterDir="false" />
<change afterPath="$PROJECT_DIR$/routers/__init__.py" afterDir="false" />
<change afterPath="$PROJECT_DIR$/routers/crop.py" afterDir="false" />
<change afterPath="$PROJECT_DIR$/routers/file.py" afterDir="false" />
<change afterPath="$PROJECT_DIR$/routers/patch.py" afterDir="false" />
<change afterPath="$PROJECT_DIR$/routers/record.py" afterDir="false" />
<change afterPath="$PROJECT_DIR$/schemas/patch.py" afterDir="false" />
<change afterPath="$PROJECT_DIR$/service/crop_service.py" afterDir="false" />
<change afterPath="$PROJECT_DIR$/service/file_service.py" afterDir="false" />
<change afterPath="$PROJECT_DIR$/service/patch_service.py" afterDir="false" />
<change afterPath="$PROJECT_DIR$/service/record_service.py" afterDir="false" />
<change afterPath="$PROJECT_DIR$/test_main.http" afterDir="false" />
<change afterPath="$PROJECT_DIR$/utils/common.py" afterDir="false" />
</list> </list>
<option name="SHOW_DIALOG" value="false" /> <option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" /> <option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -111,7 +90,7 @@
<option name="number" value="Default" /> <option name="number" value="Default" />
<option name="presentableId" value="Default" /> <option name="presentableId" value="Default" />
<updated>1788917189828</updated> <updated>1788917189828</updated>
<workItem from="1788917190899" duration="17315000" /> <workItem from="1788917190899" duration="18264000" />
</task> </task>
<servers /> <servers />
</component> </component>
@@ -119,6 +98,6 @@
<option name="version" value="3" /> <option name="version" value="3" />
</component> </component>
<component name="com.intellij.coverage.CoverageDataManagerImpl"> <component name="com.intellij.coverage.CoverageDataManagerImpl">
<SUITE FILE_PATH="coverage/patch_service$patch_service.coverage" NAME="patch-service Coverage Results" MODIFIED="1788950175309" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="" /> <SUITE FILE_PATH="coverage/patch_service$patch_service.coverage" NAME="patch-service Coverage Results" MODIFIED="1788951341519" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="" />
</component> </component>
</project> </project>

View File

@@ -29,6 +29,7 @@ class CropUpdate(BaseModel):
class CropResponse(CropCreate): class CropResponse(CropCreate):
id: int id: int
images: Optional[list[str]] = None
model_config = { model_config = {
"from_attributes": True "from_attributes": True

View File

@@ -21,13 +21,27 @@ def get_patches(db: Session) -> list[PatchResponse]:
crop = db.execute( crop = db.execute(
select(Crops).where(Crops.patch_id == p.id) select(Crops).where(Crops.patch_id == p.id)
).scalar_one_or_none() ).scalar_one_or_none()
data = PatchResponse.model_validate(p) data = PatchResponse.model_validate(p)
data.crop = CropResponse.from_orm(crop) if crop else None
if crop:
latest_record = db.execute(
select(Records)
.where(Records.crop_id == crop.id)
.order_by(Records.date.desc())
.limit(1)
).scalar_one_or_none()
crop_data = CropResponse.from_orm(crop)
crop_data.images = latest_record.images if latest_record else []
data.crop = crop_data
else:
data.crop = None
result.append(data) result.append(data)
return result return result
def get_patch(db: Session, patch_id: int) -> PatchResponse | None: def get_patch(db: Session, patch_id: int) -> PatchResponse | None:
patch = db.execute( patch = db.execute(
select(Patches).where(Patches.id == patch_id) select(Patches).where(Patches.id == patch_id)