feat(phase7.2): media browser with server-side filters + pagination
- Migration 052: indexes on media_assets(asset_type, created_at) and products(category_key, lagertyp) for efficient filter queries - GET /api/media/assets: JOINs media_assets→products→order_lines, filters by asset_type / category_key / render_status / q (ILIKE), paginated (page/page_size), returns total+pages count - New schemas: MediaAssetBrowseItem, MediaAssetBrowseResponse - frontend/src/api/media.ts: getMediaAssets(filters), typed interfaces - MediaBrowser.tsx: rewritten with sticky filter bar (debounced search, type/category/status dropdowns), responsive grid, image previews, download buttons, pagination footer with page size selector - Renamed legacy function to listMediaAssets for backward compat Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -25,3 +25,31 @@ class MediaAssetOut(BaseModel):
|
||||
thumbnail_url: str | None = None
|
||||
|
||||
model_config = {"from_attributes": True}
|
||||
|
||||
|
||||
class MediaAssetBrowseItem(BaseModel):
|
||||
"""Enriched asset item for the media browser endpoint."""
|
||||
id: uuid.UUID
|
||||
asset_type: MediaAssetType
|
||||
file_path: str
|
||||
file_size_bytes: int | None
|
||||
mime_type: str | None
|
||||
created_at: datetime
|
||||
order_line_id: uuid.UUID | None
|
||||
product_id: uuid.UUID | None
|
||||
product_name: str | None
|
||||
product_pim_id: str | None
|
||||
category_key: str | None
|
||||
render_status: str | None
|
||||
download_url: str | None = None
|
||||
thumbnail_url: str | None = None
|
||||
|
||||
model_config = {"from_attributes": True}
|
||||
|
||||
|
||||
class MediaAssetBrowseResponse(BaseModel):
|
||||
items: list[MediaAssetBrowseItem]
|
||||
total: int
|
||||
page: int
|
||||
page_size: int
|
||||
pages: int
|
||||
|
||||
Reference in New Issue
Block a user