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

@@ -9,9 +9,19 @@ SET variant = 'main'
WHERE variant IS NULL OR variant = '';
-- 约束:只允许 main/preview
ALTER TABLE media_assets
ADD CONSTRAINT IF NOT EXISTS ck_media_assets_variant
CHECK (variant IN ('main', 'preview'));
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1
FROM pg_constraint
WHERE conname = 'ck_media_assets_variant'
) THEN
ALTER TABLE media_assets
ADD CONSTRAINT ck_media_assets_variant
CHECK (variant IN ('main', 'preview'));
END IF;
END
$$;
COMMENT ON COLUMN media_assets.variant IS '产物类型main/preview用于强制试看资源必须绑定独立产物避免用正片绕过';
@@ -24,4 +34,3 @@ DROP INDEX IF EXISTS ix_media_assets_tenant_variant;
ALTER TABLE media_assets DROP CONSTRAINT IF EXISTS ck_media_assets_variant;
ALTER TABLE media_assets DROP COLUMN IF EXISTS variant;
-- +goose StatementEnd