ашчуы
This commit is contained in:
@@ -91,6 +91,18 @@ async def update_environment(
|
|||||||
update_data = env_update.model_dump(exclude_unset=True)
|
update_data = env_update.model_dump(exclude_unset=True)
|
||||||
if not update_data:
|
if not update_data:
|
||||||
return env
|
return env
|
||||||
|
|
||||||
|
# Verify assets exist if provided
|
||||||
|
if "asset_ids" in update_data:
|
||||||
|
if update_data["asset_ids"] is None:
|
||||||
|
del update_data["asset_ids"]
|
||||||
|
elif update_data["asset_ids"]:
|
||||||
|
# Verify all assets exist using batch check
|
||||||
|
assets = await dao.assets.get_assets_by_ids(update_data["asset_ids"])
|
||||||
|
if len(assets) != len(update_data["asset_ids"]):
|
||||||
|
found_ids = {a.id for a in assets}
|
||||||
|
missing_ids = [aid for aid in update_data["asset_ids"] if aid not in found_ids]
|
||||||
|
raise HTTPException(status_code=400, detail=f"Some assets not found: {missing_ids}")
|
||||||
|
|
||||||
success = await dao.environments.update_env(env_id, update_data)
|
success = await dao.environments.update_env(env_id, update_data)
|
||||||
if not success:
|
if not success:
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ class EnvironmentCreate(BaseModel):
|
|||||||
class EnvironmentUpdate(BaseModel):
|
class EnvironmentUpdate(BaseModel):
|
||||||
name: Optional[str] = Field(None, min_length=1)
|
name: Optional[str] = Field(None, min_length=1)
|
||||||
description: Optional[str] = None
|
description: Optional[str] = None
|
||||||
|
asset_ids: Optional[List[str]] = None
|
||||||
|
|
||||||
|
|
||||||
class AssetToEnvironment(BaseModel):
|
class AssetToEnvironment(BaseModel):
|
||||||
|
|||||||
@@ -102,7 +102,7 @@ class AssetsRepo:
|
|||||||
|
|
||||||
return assets
|
return assets
|
||||||
|
|
||||||
async def get_asset(self, asset_id: str, with_data: bool = True) -> Asset:
|
async def get_asset(self, asset_id: str, with_data: bool = True) -> Optional[Asset]:
|
||||||
projection = None
|
projection = None
|
||||||
if not with_data:
|
if not with_data:
|
||||||
projection = {"data": 0, "thumbnail": 0}
|
projection = {"data": 0, "thumbnail": 0}
|
||||||
@@ -182,7 +182,9 @@ class AssetsRepo:
|
|||||||
return await self.collection.count_documents(filter)
|
return await self.collection.count_documents(filter)
|
||||||
|
|
||||||
async def get_assets_by_ids(self, asset_ids: List[str]) -> List[Asset]:
|
async def get_assets_by_ids(self, asset_ids: List[str]) -> List[Asset]:
|
||||||
object_ids = [ObjectId(asset_id) for asset_id in asset_ids]
|
object_ids = [ObjectId(asset_id) for asset_id in asset_ids if ObjectId.is_valid(asset_id)]
|
||||||
|
if not object_ids:
|
||||||
|
return []
|
||||||
res = self.collection.find({"_id": {"$in": object_ids}}, {"data": 0}) # Exclude data but maybe allow thumbnail if small?
|
res = self.collection.find({"_id": {"$in": object_ids}}, {"data": 0}) # Exclude data but maybe allow thumbnail if small?
|
||||||
# Original excluded thumbnail too.
|
# Original excluded thumbnail too.
|
||||||
assets = []
|
assets = []
|
||||||
|
|||||||
Reference in New Issue
Block a user