Files
xevion.dev/.sqlx/query-9d0e8c98364de65920482389d7f1699ae4710394ed27b472d4e33190cdc0bd19.json
Xevion e83133cfcc feat: add media upload pipeline with multipart support, blurhash generation, and R2 storage
- Add project_media table with image/video variants, ordering, and metadata
- Implement multipart upload handlers with 50MB limit
- Generate blurhash placeholders and resize images to thumb/medium/full variants
- Update ProjectCard to use media carousel instead of mock gradients
- Add MediaManager component for drag-drop upload and reordering
2026-01-14 22:34:15 -06:00

105 lines
2.3 KiB
JSON

{
"db_name": "PostgreSQL",
"query": "\n SELECT \n id,\n project_id,\n display_order,\n media_type as \"media_type: MediaType\",\n original_filename,\n r2_base_path,\n variants,\n width,\n height,\n size_bytes,\n blurhash,\n metadata,\n created_at\n FROM project_media\n WHERE id = $1\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "id",
"type_info": "Uuid"
},
{
"ordinal": 1,
"name": "project_id",
"type_info": "Uuid"
},
{
"ordinal": 2,
"name": "display_order",
"type_info": "Int4"
},
{
"ordinal": 3,
"name": "media_type: MediaType",
"type_info": {
"Custom": {
"name": "media_type",
"kind": {
"Enum": [
"image",
"video"
]
}
}
}
},
{
"ordinal": 4,
"name": "original_filename",
"type_info": "Text"
},
{
"ordinal": 5,
"name": "r2_base_path",
"type_info": "Text"
},
{
"ordinal": 6,
"name": "variants",
"type_info": "Jsonb"
},
{
"ordinal": 7,
"name": "width",
"type_info": "Int4"
},
{
"ordinal": 8,
"name": "height",
"type_info": "Int4"
},
{
"ordinal": 9,
"name": "size_bytes",
"type_info": "Int8"
},
{
"ordinal": 10,
"name": "blurhash",
"type_info": "Text"
},
{
"ordinal": 11,
"name": "metadata",
"type_info": "Jsonb"
},
{
"ordinal": 12,
"name": "created_at",
"type_info": "Timestamptz"
}
],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": [
false,
false,
false,
false,
false,
false,
false,
true,
true,
false,
true,
true,
false
]
},
"hash": "9d0e8c98364de65920482389d7f1699ae4710394ed27b472d4e33190cdc0bd19"
}