ашчуы

This commit is contained in:
xds
2026-02-20 10:28:56 +03:00
parent e1d941a2cd
commit 9e0c522b5f
3 changed files with 17 additions and 2 deletions

View File

@@ -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:

View File

@@ -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):

View File

@@ -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 = []