Files
小鱼开发 ada29a48a8 feat: 空镜素材分类&数据入库
- 素材表统一为 mjk_broll_ 前缀(mjk_broll_categories/materials/tags)
- 新增 218 条分类 seed + 2495 条素材 seed(含 ffprobe 时长)
- 新增 Alembic 迁移: rename mjk_* to mjk_broll_*
2026-05-15 15:49:29 +08:00

60 lines
1.6 KiB
Python

"""
素材主表模型
============
空镜视频片段的元数据中心,一行代表一个素材。
素材直接挂载在三级分类(mjk_broll_categories.level=3)下,
匹配时通过 category_id 精确关联到具体场景分类。
"""
from sqlalchemy import BigInteger, ForeignKey, String
from sqlalchemy.orm import Mapped, mapped_column
from app.models.base import BaseModelBigInt
class BrollMaterial(BaseModelBigInt):
"""空镜素材主表"""
__tablename__ = "mjk_broll_materials"
category_id: Mapped[int] = mapped_column(
BigInteger,
ForeignKey("mjk_broll_categories.id"),
nullable=False,
comment="所属三级分类ID,关联 mjk_broll_categories",
)
title: Mapped[str] = mapped_column(
String(256),
nullable=False,
comment="素材标题/文件名,运营后台识别用",
)
url: Mapped[str] = mapped_column(
String(1024),
nullable=False,
comment="七牛云 CDN 访问地址,FFmpeg合成和前端播放直接使用",
)
duration: Mapped[float] = mapped_column(
default=0,
nullable=False,
comment="视频时长(秒),FFmpeg probe 提取,入库时必须大于0",
)
usage_count: Mapped[int] = mapped_column(
BigInteger,
default=0,
nullable=False,
comment="累计使用次数,驱动加权随机算法",
)
status: Mapped[str] = mapped_column(
String(16),
default="active",
nullable=False,
comment="状态:active(可用)/ disabled(下架)/ deleted(软删除)",
)