Files
metabuilder/dbal/shared/api/schema/entities/packages/media.yaml
2025-12-30 21:27:22 +00:00

206 lines
3.9 KiB
YAML

entity: MediaAsset
version: "1.0"
description: "Media file asset (images, videos, audio, documents)"
package: media_center
fields:
id:
type: cuid
primary: true
generated: true
description: "Unique media asset identifier"
tenantId:
type: uuid
required: true
index: true
description: "Tenant this asset belongs to"
userId:
type: uuid
required: true
index: true
description: "User who uploaded the asset"
filename:
type: string
required: true
description: "Stored filename"
originalName:
type: string
required: true
description: "Original upload filename"
mimeType:
type: string
required: true
index: true
description: "MIME type (image/png, video/mp4, etc.)"
size:
type: bigint
required: true
description: "File size in bytes"
path:
type: string
required: true
description: "Storage path"
thumbnailPath:
type: string
nullable: true
description: "Thumbnail image path"
width:
type: integer
nullable: true
description: "Image/video width"
height:
type: integer
nullable: true
description: "Image/video height"
duration:
type: integer
nullable: true
description: "Audio/video duration in seconds"
metadata:
type: json
nullable: true
description: "Additional metadata (EXIF, tags, etc.)"
createdAt:
type: bigint
required: true
description: "Upload timestamp"
indexes:
- fields: [tenantId, userId]
name: tenant_user
- fields: [tenantId, mimeType]
name: tenant_type
acl:
create:
user: true
read:
self: true
row_level: "userId = $user.id"
admin: true
update:
self: true
row_level: "userId = $user.id"
delete:
self: true
row_level: "userId = $user.id"
admin: true
---
entity: MediaJob
version: "1.0"
description: "Background media processing job"
package: media_center
fields:
id:
type: cuid
primary: true
generated: true
description: "Unique job identifier"
tenantId:
type: uuid
required: true
index: true
description: "Tenant this job belongs to"
userId:
type: uuid
required: true
index: true
description: "User who initiated the job"
type:
type: enum
required: true
values: [transcode, thumbnail, convert, compress, analyze]
description: "Job type"
status:
type: enum
required: true
values: [pending, processing, completed, failed, cancelled]
default: pending
index: true
description: "Job status"
priority:
type: integer
default: 0
description: "Job priority (higher = more urgent)"
inputPath:
type: string
required: true
description: "Input file path"
outputPath:
type: string
nullable: true
description: "Output file path"
params:
type: json
required: true
description: "Job-specific parameters"
progress:
type: integer
default: 0
description: "Progress percentage 0-100"
error:
type: string
nullable: true
description: "Error message if failed"
startedAt:
type: bigint
nullable: true
description: "Processing start timestamp"
completedAt:
type: bigint
nullable: true
description: "Completion timestamp"
createdAt:
type: bigint
required: true
description: "Creation timestamp"
indexes:
- fields: [status, priority]
name: queue_order
- fields: [tenantId, userId]
name: tenant_user
acl:
create:
user: true
system: true
read:
self: true
row_level: "userId = $user.id"
admin: true
update:
system: true
admin: true
delete:
admin: true