feat: Introduce MediaAssetVariant for better asset management

- Added MediaAssetVariant enum with values 'main' and 'preview'.
- Updated media asset service logic to utilize MediaAssetVariant for variant handling.
- Refactored database models and queries to include variant and source_asset_id fields.
- Enhanced validation for asset variants in upload and processing functions.
- Updated Swagger documentation to reflect new variant structure and descriptions.
- Implemented necessary database migrations to support the new variant constraints.
This commit is contained in:
2025-12-22 19:27:31 +08:00
parent d04e2ee693
commit 2cc823d3a8
14 changed files with 439 additions and 171 deletions

View File

@@ -2793,6 +2793,17 @@ const docTemplate = `{
"MediaAssetTypeImage"
]
},
"consts.MediaAssetVariant": {
"type": "string",
"enum": [
"main",
"preview"
],
"x-enum-varnames": [
"MediaAssetVariantMain",
"MediaAssetVariantPreview"
]
},
"consts.OrderStatus": {
"type": "string",
"enum": [
@@ -3056,7 +3067,11 @@ const docTemplate = `{
},
"variant": {
"description": "Variant indicates whether this asset is a main or preview product.\nAllowed: main/preview; default is main.",
"type": "string"
"allOf": [
{
"$ref": "#/definitions/consts.MediaAssetVariant"
}
]
}
}
},
@@ -4061,6 +4076,10 @@ const docTemplate = `{
"description": "存储提供方:例如 s3/minio/oss便于多存储扩展",
"type": "string"
},
"source_asset_id": {
"description": "派生来源资源IDpreview 产物可指向对应 main 资源;用于建立 preview/main 的 1:1 追溯关系",
"type": "integer"
},
"status": {
"description": "处理状态uploaded/processing/ready/failed/deletedready 才可被内容引用对外提供",
"allOf": [
@@ -4088,6 +4107,14 @@ const docTemplate = `{
"user_id": {
"description": "用户ID资源上传者用于审计与权限控制",
"type": "integer"
},
"variant": {
"description": "产物类型main/preview用于强制试看资源必须绑定独立产物避免用正片绕过",
"allOf": [
{
"$ref": "#/definitions/consts.MediaAssetVariant"
}
]
}
}
},

View File

@@ -2787,6 +2787,17 @@
"MediaAssetTypeImage"
]
},
"consts.MediaAssetVariant": {
"type": "string",
"enum": [
"main",
"preview"
],
"x-enum-varnames": [
"MediaAssetVariantMain",
"MediaAssetVariantPreview"
]
},
"consts.OrderStatus": {
"type": "string",
"enum": [
@@ -3050,7 +3061,11 @@
},
"variant": {
"description": "Variant indicates whether this asset is a main or preview product.\nAllowed: main/preview; default is main.",
"type": "string"
"allOf": [
{
"$ref": "#/definitions/consts.MediaAssetVariant"
}
]
}
}
},
@@ -4055,6 +4070,10 @@
"description": "存储提供方:例如 s3/minio/oss便于多存储扩展",
"type": "string"
},
"source_asset_id": {
"description": "派生来源资源IDpreview 产物可指向对应 main 资源;用于建立 preview/main 的 1:1 追溯关系",
"type": "integer"
},
"status": {
"description": "处理状态uploaded/processing/ready/failed/deletedready 才可被内容引用对外提供",
"allOf": [
@@ -4082,6 +4101,14 @@
"user_id": {
"description": "用户ID资源上传者用于审计与权限控制",
"type": "integer"
},
"variant": {
"description": "产物类型main/preview用于强制试看资源必须绑定独立产物避免用正片绕过",
"allOf": [
{
"$ref": "#/definitions/consts.MediaAssetVariant"
}
]
}
}
},

View File

@@ -84,6 +84,14 @@ definitions:
- MediaAssetTypeVideo
- MediaAssetTypeAudio
- MediaAssetTypeImage
consts.MediaAssetVariant:
enum:
- main
- preview
type: string
x-enum-varnames:
- MediaAssetVariantMain
- MediaAssetVariantPreview
consts.OrderStatus:
enum:
- created
@@ -299,10 +307,11 @@ definitions:
Used to decide processing pipeline and validation rules; required.
type: string
variant:
allOf:
- $ref: '#/definitions/consts.MediaAssetVariant'
description: |-
Variant indicates whether this asset is a main or preview product.
Allowed: main/preview; default is main.
type: string
type: object
dto.AdminMediaAssetUploadInitResponse:
properties:
@@ -976,6 +985,9 @@ definitions:
provider:
description: 存储提供方:例如 s3/minio/oss便于多存储扩展
type: string
source_asset_id:
description: 派生来源资源IDpreview 产物可指向对应 main 资源;用于建立 preview/main 的 1:1 追溯关系
type: integer
status:
allOf:
- $ref: '#/definitions/consts.MediaAssetStatus'
@@ -993,6 +1005,10 @@ definitions:
user_id:
description: 用户ID资源上传者用于审计与权限控制
type: integer
variant:
allOf:
- $ref: '#/definitions/consts.MediaAssetVariant'
description: 产物类型main/preview用于强制试看资源必须绑定独立产物避免用正片绕过
type: object
models.Order:
properties: