Files
quyun-v2/backend/app/http/v1/dto/content.go

151 lines
4.9 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/app/requests"
type ContentListFilter struct {
requests.Pagination
// Keyword 关键词搜索(匹配标题/摘要/描述)。
Keyword *string `query:"keyword"`
// Genre 内容类型/分类筛选。
Genre *string `query:"genre"`
// TenantID 租户ID筛选内容所属店铺
TenantID *int64 `query:"tenantId"`
// Sort 排序规则latest/hot/price_asc
Sort *string `query:"sort"`
// IsPinned 置顶内容筛选true 仅返回置顶)。
IsPinned *bool `query:"is_pinned"`
// PriceType 价格类型筛选free/paid
PriceType *string `query:"price_type"`
}
type ContentItem struct {
// ID 内容唯一ID。
ID int64 `json:"id"`
// TenantID 内容所属租户ID。
TenantID int64 `json:"tenant_id"`
// UserID 内容作者用户ID与 author_id 同义,便于后台展示)。
UserID int64 `json:"user_id"`
// Title 内容标题。
Title string `json:"title"`
// Cover 封面URL无封面时为空
Cover string `json:"cover"`
// Genre 内容分类/风格标签。
Genre string `json:"genre"`
// Type 内容媒体类型video/audio/article
Type string `json:"type"`
// Status 内容状态(如 published/unpublished
Status string `json:"status"`
// Visibility 内容可见性(如 public/tenant_only/private
Visibility string `json:"visibility"`
// Price 价格(单位元,免费为 0
Price float64 `json:"price"`
// AuthorID 作者用户ID。
AuthorID int64 `json:"author_id"`
// AuthorName 作者展示名(优先昵称)。
AuthorName string `json:"author_name"`
// AuthorAvatar 作者头像URL。
AuthorAvatar string `json:"author_avatar"`
// AuthorIsFollowing 当前用户是否关注作者(未登录默认 false
AuthorIsFollowing bool `json:"author_is_following"`
// Views 浏览量统计。
Views int `json:"views"`
// Likes 点赞数统计。
Likes int `json:"likes"`
// CreatedAt 创建时间RFC3339 格式)。
CreatedAt string `json:"created_at"`
// PublishedAt 发布时间,未发布为空。
PublishedAt string `json:"published_at"`
// IsPurchased 是否已购买(用于内容列表快速判断)。
IsPurchased bool `json:"is_purchased"`
}
type ContentDetail struct {
ContentItem
// Description 内容描述(用于详情页摘要)。
Description string `json:"description"`
// Body 详细正文/图文内容(文章类可为空)。
Body string `json:"body"`
// MediaUrls 关联媒体资源(音频/视频/预览)。
MediaUrls []MediaURL `json:"media_urls"`
// Meta 内容元信息(曲风/调性/节拍等)。
Meta Meta `json:"meta"`
// IsLiked 当前用户是否点赞。
IsLiked bool `json:"is_liked"`
// IsFavorited 当前用户是否收藏。
IsFavorited bool `json:"is_favorited"`
}
type MediaURL struct {
// Type 媒体类型audio/video/image/preview
Type string `json:"type"`
// URL 媒体资源地址。
URL string `json:"url"`
// Duration 媒体时长(秒),无时长则为 0。
Duration int `json:"duration"`
}
type Meta struct {
// Role 内容角色/定位(如 demo/主稿)。
Role string `json:"role"`
// Key 音乐调性或主音。
Key string `json:"key"`
// Beat 节拍信息(如 4/4
Beat string `json:"beat"`
}
type Comment struct {
// ID 评论ID。
ID int64 `json:"id"`
// Content 评论内容。
Content string `json:"content"`
// UserID 评论用户ID。
UserID int64 `json:"user_id"`
// UserNickname 评论用户昵称。
UserNickname string `json:"user_nickname"`
// UserAvatar 评论用户头像。
UserAvatar string `json:"user_avatar"`
// CreateTime 评论创建时间RFC3339
CreateTime string `json:"create_time"`
// Likes 评论点赞数。
Likes int `json:"likes"`
// IsLiked 当前用户是否点赞该评论。
IsLiked bool `json:"is_liked"`
// ReplyTo 回复的评论ID0 表示一级评论)。
ReplyTo int64 `json:"reply_to"`
}
type CommentCreateForm struct {
// Content 评论正文,不能为空。
Content string `json:"content"`
// ReplyTo 被回复评论ID0 表示一级评论)。
ReplyTo int64 `json:"reply_to"`
}
type Topic struct {
// ID 专题ID。
ID int64 `json:"id"`
// Title 专题标题。
Title string `json:"title"`
// Cover 专题封面图。
Cover string `json:"cover"`
// Tag 专题标签(用于筛选/展示)。
Tag string `json:"tag"`
// Count 专题内内容数量。
Count int `json:"count"`
}
type ContentPrice struct {
// Currency 币种CNY 等)。
Currency string `json:"currency"`
// PriceAmount 原价金额(单位元)。
PriceAmount float64 `json:"price_amount"`
// DiscountType 折扣类型amount/percent
DiscountType string `json:"discount_type"`
// DiscountValue 折扣值amount=元percent=百分比)。
DiscountValue float64 `json:"discount_value"`
// DiscountStartAt 折扣开始时间RFC3339
DiscountStartAt string `json:"discount_start_at"`
// DiscountEndAt 折扣结束时间RFC3339
DiscountEndAt string `json:"discount_end_at"`
}