Compare commits

..

2 Commits

3 changed files with 36 additions and 5 deletions
+2 -3
View File
@@ -69,8 +69,7 @@ def upgrade() -> None:
sa.Column( sa.Column(
"visibility", "visibility",
postgresql.ENUM( postgresql.ENUM(
"public", "private", "friends_only", name="world_visibility", "public", "private", "friends_only", name="world_visibility"
create_type=False,
), ),
nullable=True, nullable=True,
), ),
@@ -90,7 +89,7 @@ def upgrade() -> None:
"asset_type", "asset_type",
postgresql.ENUM( postgresql.ENUM(
"image", "audio", "video", "document", "model_3d", "other", "image", "audio", "video", "document", "model_3d", "other",
name="asset_type", create_type=False, name="asset_type",
), ),
nullable=False, nullable=False,
), ),
+32
View File
@@ -3,6 +3,10 @@ from sqlalchemy.dialects.postgresql import ENUM
from sqlalchemy.orm import relationship from sqlalchemy.orm import relationship
from sqlalchemy.sql import func from sqlalchemy.sql import func
import enum import enum
import json
from typing import Optional, List
from pydantic import BaseModel as PydanticBaseModel
from app.database import Base from app.database import Base
@@ -38,3 +42,31 @@ class Asset(Base):
owner = relationship("User", back_populates="assets") owner = relationship("User", back_populates="assets")
world = relationship("World", back_populates="assets") world = relationship("World", back_populates="assets")
class GLTFMetadata(PydanticBaseModel):
"""Pydantic schema for glTF asset metadata."""
mesh_count: Optional[int] = None
vertex_count: Optional[int] = None
has_animation: bool = False
texture_refs: Optional[List[str]] = None
tags: Optional[List[str]] = None
model_config = {"from_attributes": True}
def parse_metadata_json(metadata_text: Optional[str]) -> dict:
"""Parse the metadata_json text field into a dict, handling None gracefully."""
if not metadata_text:
return {}
try:
return json.loads(metadata_text)
except (json.JSONDecodeError, TypeError):
return {}
def serialize_metadata(metadata: dict) -> Optional[str]:
"""Serialize metadata dict to JSON string for storage."""
if not metadata:
return None
return json.dumps(metadata)
+2 -2
View File
@@ -8,7 +8,7 @@ services:
POSTGRES_PASSWORD: agp_password POSTGRES_PASSWORD: agp_password
POSTGRES_DB: agp_db POSTGRES_DB: agp_db
ports: ports:
- "${POSTGRES_HOST_PORT:-5432}:5432" - "5432:5432"
volumes: volumes:
- postgres_data:/var/lib/postgresql/data - postgres_data:/var/lib/postgresql/data
healthcheck: healthcheck:
@@ -20,7 +20,7 @@ services:
redis: redis:
image: redis:7-alpine image: redis:7-alpine
ports: ports:
- "${REDIS_HOST_PORT:-6379}:6379" - "6379:6379"
volumes: volumes:
- redis_data:/data - redis_data:/data
healthcheck: healthcheck: