Files
quyun-v2/backend/app/http/tenant/dto/content_admin_publish.go
2025-12-25 14:29:16 +08:00

56 lines
3.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package dto
import (
"quyun/v2/database/models"
"quyun/v2/pkg/consts"
)
// ContentPublishForm 租户管理员提交“内容发布”表单(创建内容 + 绑定资源 + 定价)。
// 说明:
// - 内容类型支持组合:文字/音频/视频/多图可同时存在;
// - 文字内容通过 Detail 是否为空来判断;
// - 音频/视频/多图通过对应资源列表是否为空来判断(资源需为 ready 且属于当前租户)。
type ContentPublishForm struct {
// Title 标题:用于列表展示与搜索;必填。
Title string `json:"title,omitempty"`
// Summary 简介:用于列表/卡片展示的短文本;可选,建议 <= 256 字符。
Summary string `json:"summary,omitempty"`
// Detail 详细:用于详情页的长文本;可选;当非空时视为“文字内容”类型存在。
Detail string `json:"detail,omitempty"`
// Tags 标签:用于分类/检索;字符串数组;会做 trim/去重;可为空。
Tags []string `json:"tags,omitempty"`
// CoverAssetIDs 展示图(封面图)资源 ID 列表1-3 张;每个资源必须为 image/main/ready。
CoverAssetIDs []int64 `json:"cover_asset_ids,omitempty"`
// AudioAssetIDs 音频资源 ID 列表:可为空;每个资源必须为 audio/main/ready。
AudioAssetIDs []int64 `json:"audio_asset_ids,omitempty"`
// VideoAssetIDs 视频资源 ID 列表:可为空;每个资源必须为 video/main/ready。
VideoAssetIDs []int64 `json:"video_asset_ids,omitempty"`
// ImageAssetIDs 多图内容资源 ID 列表:可为空;每个资源必须为 image/main/ready数量 >= 2 时视为“多图内容”类型存在。
ImageAssetIDs []int64 `json:"image_asset_ids,omitempty"`
// PriceAmount 价格单位为分0 表示免费;必填(前端可默认填 0
PriceAmount int64 `json:"price_amount,omitempty"`
// Currency 币种:当前固定为 CNY可不传后端默认 CNY
Currency consts.Currency `json:"currency,omitempty"`
// Visibility 可见性:控制“详情页”可见范围;默认 tenant_only。
Visibility consts.ContentVisibility `json:"visibility,omitempty"`
// PreviewSeconds 试看秒数:仅对 preview 资源生效;默认 60必须为正整数。
PreviewSeconds *int32 `json:"preview_seconds,omitempty"`
}
// ContentPublishResponse 内容发布结果(便于前端一次性拿到核心信息)。
type ContentPublishResponse struct {
// Content 内容主体(包含标题/简介/详细/状态等)。
Content *models.Content `json:"content"`
// Price 定价信息(单位分)。
Price *models.ContentPrice `json:"price"`
// CoverAssets 封面图绑定结果role=cover
CoverAssets []*models.ContentAsset `json:"cover_assets,omitempty"`
// MainAssets 主资源绑定结果role=main可能包含音频/视频/图片)。
MainAssets []*models.ContentAsset `json:"main_assets,omitempty"`
// ContentTypes 内容类型列表text/audio/video/image/multi_image用于前端展示
ContentTypes []string `json:"content_types,omitempty"`
}