diff --git a/backend/app/models/asset.py b/backend/app/models/asset.py index 2955515..e8af2b2 100644 --- a/backend/app/models/asset.py +++ b/backend/app/models/asset.py @@ -3,6 +3,8 @@ from sqlalchemy.dialects.postgresql import ENUM from sqlalchemy.orm import relationship from sqlalchemy.sql import func import enum +import json +from typing import Any, Optional from app.database import Base @@ -38,3 +40,32 @@ class Asset(Base): owner = relationship("User", back_populates="assets") world = relationship("World", back_populates="assets") + + # ------------------------------------------------------------------ + # Computed properties + # ------------------------------------------------------------------ + + @property + def has_gltf_metadata(self) -> bool: + """Return True when metadata_json contains glTF-specific keys. + + glTF metadata is considered present when the stored JSON contains at + least one of the keys that *extract_gltf_metadata* produces + (mesh_count, vertex_count, has_animation, texture_refs, + bounding_box_min, bounding_box_max). + """ + if not self.metadata_json: + return False + try: + data: dict[str, Any] = json.loads(self.metadata_json) + except (json.JSONDecodeError, TypeError): + return False + gltf_keys = { + "mesh_count", + "vertex_count", + "has_animation", + "texture_refs", + "bounding_box_min", + "bounding_box_max", + } + return bool(gltf_keys & data.keys())