feat(E): add MediaAsset catalog — model, CRUD API, MediaBrowser UI
Migration 040: media_assets table with RLS (tenant_isolation + admin_bypass). domains/media/: MediaAsset model, schemas, service, router with ZIP-download. publish_asset Celery task in rendering/tasks.py. core/storage.py: download_bytes() method for MinIO + LocalStorage. frontend: MediaBrowser.tsx (grid/list, multi-select, zip-download, pagination) + api/media.ts. Route /media (AdminRoute) + sidebar link with Image icon for admin+pm. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
import uuid
|
||||
from datetime import datetime
|
||||
from pydantic import BaseModel
|
||||
from app.domains.media.models import MediaAssetType
|
||||
|
||||
|
||||
class MediaAssetOut(BaseModel):
|
||||
id: uuid.UUID
|
||||
tenant_id: uuid.UUID | None
|
||||
product_id: uuid.UUID | None
|
||||
cad_file_id: uuid.UUID | None
|
||||
order_line_id: uuid.UUID | None
|
||||
workflow_run_id: uuid.UUID | None
|
||||
asset_type: MediaAssetType
|
||||
storage_key: str
|
||||
file_size_bytes: int | None
|
||||
mime_type: str | None
|
||||
width: int | None
|
||||
height: int | None
|
||||
duration_s: float | None
|
||||
render_config: dict | None
|
||||
is_archived: bool
|
||||
created_at: datetime
|
||||
download_url: str | None = None
|
||||
|
||||
model_config = {"from_attributes": True}
|
||||
Reference in New Issue
Block a user