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

45 lines
1.8 KiB
Go

package dto
import (
"quyun/v2/app/requests"
"quyun/v2/database/models"
)
// ContentListFilter defines list query filters for published contents within a tenant.
type ContentListFilter struct {
// Pagination controls paging parameters (page/limit).
requests.Pagination `json:",inline" query:",inline"`
// Keyword filters by title keyword (LIKE).
Keyword *string `json:"keyword,omitempty" query:"keyword"`
}
// ContentItem is a list item with price snapshot and access indicator for current user.
type ContentItem struct {
// Content is the content entity.
Content *models.Content `json:"content,omitempty"`
// Price is the current price settings for the content (may be nil if not set).
Price *models.ContentPrice `json:"price,omitempty"`
// HasAccess indicates whether current user can access main assets (free/owner/purchased).
HasAccess bool `json:"has_access"`
}
// ContentDetail is the detail payload with price snapshot and access indicator for current user.
type ContentDetail struct {
// Content is the content entity.
Content *models.Content `json:"content,omitempty"`
// Price is the current price settings for the content (may be nil if not set).
Price *models.ContentPrice `json:"price,omitempty"`
// HasAccess indicates whether current user can access main assets (free/owner/purchased).
HasAccess bool `json:"has_access"`
}
// ContentAssetsResponse returns assets for either preview or main role.
type ContentAssetsResponse struct {
// Content is the content entity.
Content *models.Content `json:"content,omitempty"`
// Assets is the list of playable assets for the requested role (preview/main).
Assets []*ContentPlayableAsset `json:"assets,omitempty"`
// PreviewSeconds indicates the max preview duration (only meaningful for preview response).
PreviewSeconds int32 `json:"preview_seconds,omitempty"`
}