feat(pl): expose photoUrls on vehicle and personnel APIs

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
zlwuandCursor committed 2026-08-02 10:30:14 +08:00
1 parent 56b94e1c5b
commit 479851ba4c
3 files changed
+53

No files matched your search

+2
View File
@@ -414,6 +414,7 @@ def create_vehicle(
trailer_no=payload.trailer_no,
load_capacity=payload.load_capacity,
vehicle_status=payload.vehicle_status,
photo_urls=payload.photo_urls,
remark=payload.remark,
create_by=user.id,
create_dept_id=user.dept_id,
@@ -680,6 +681,7 @@ def create_personnel(
personnel_type=payload.personnel_type,
personnel_affiliation=payload.personnel_affiliation,
status=payload.status,
photo_urls=payload.photo_urls,
remark=payload.remark,
create_by=user.id,
create_dept_id=user.dept_id,
+12
View File
@@ -181,6 +181,9 @@ class VehicleBase(BaseModel):
default_driver_name: Optional[str] = Field(default=None, max_length=100, alias="defaultDriverName", description="默认司机姓名(只读兼容)")
load_capacity: Optional[Decimal] = Field(default=None, alias="loadCapacity", description="载重(吨)")
vehicle_status: str = Field(default="available", max_length=20, alias="vehicleStatus", description="车辆状态")
photo_urls: Optional[str] = Field(
default=None, max_length=2000, alias="photoUrls", description="车辆照片URL,逗号分隔(默认1张)"
)
remark: Optional[str] = None
@@ -198,6 +201,9 @@ class VehicleUpdate(BaseModel):
trailer_no: Optional[str] = Field(default=None, max_length=20, alias="trailerNo")
load_capacity: Optional[Decimal] = Field(default=None, alias="loadCapacity")
vehicle_status: Optional[str] = Field(default=None, max_length=20, alias="vehicleStatus")
photo_urls: Optional[str] = Field(
default=None, max_length=2000, alias="photoUrls", description="车辆照片URL,逗号分隔(默认1张)"
)
remark: Optional[str] = None
personnel_list: Optional[list[VehiclePersonnelRow]] = Field(default=None, alias="personnelList")
cert_list: Optional[list[CertRow]] = Field(default=None, alias="certList")
@@ -248,6 +254,9 @@ class PersonnelBase(BaseModel):
description="人员归属 self-山峡 carrier-非山峡",
)
status: str = Field(default="1", max_length=1, description="状态 1-在职 0-停用")
photo_urls: Optional[str] = Field(
default=None, max_length=2000, alias="photoUrls", description="人员照片URL,逗号分隔(默认1张)"
)
remark: Optional[str] = None
@@ -266,6 +275,9 @@ class PersonnelUpdate(BaseModel):
default=None, max_length=20, alias="personnelAffiliation"
)
status: Optional[str] = Field(default=None, max_length=1)
photo_urls: Optional[str] = Field(
default=None, max_length=2000, alias="photoUrls", description="人员照片URL,逗号分隔(默认1张)"
)
remark: Optional[str] = None
cert_list: Optional[list[CertRow]] = Field(default=None, alias="certList")
model_config = {"populate_by_name": True}
@@ -0,0 +1,39 @@
"""车辆/人员 Schema 接受 photoUrls。"""
from __future__ import annotations
from app.schemas.pl.base_data import PersonnelCreate, PersonnelUpdate, VehicleCreate, VehicleUpdate
def test_vehicle_create_accepts_photo_urls():
body = VehicleCreate.model_validate(
{
"vehicleType": "carrier",
"licensePlate": "皖A12345",
"vehicleStatus": "available",
"photoUrls": "pl/vehicle-photo/a.jpg",
}
)
assert body.photo_urls == "pl/vehicle-photo/a.jpg"
def test_vehicle_update_accepts_photo_urls():
body = VehicleUpdate.model_validate({"photoUrls": "pl/vehicle-photo/b.jpg"})
assert body.photo_urls == "pl/vehicle-photo/b.jpg"
def test_personnel_create_accepts_photo_urls():
body = PersonnelCreate.model_validate(
{
"personnelName": "张三",
"personnelType": "driver",
"personnelAffiliation": "self",
"status": "1",
"photoUrls": "pl/personnel-photo/c.jpg",
}
)
assert body.photo_urls == "pl/personnel-photo/c.jpg"
def test_personnel_update_accepts_photo_urls():
body = PersonnelUpdate.model_validate({"photoUrls": ""})
assert body.photo_urls == ""