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 media assets for the requested role (preview/main). Assets []*models.MediaAsset `json:"assets,omitempty"` // PreviewSeconds indicates the max preview duration (only meaningful for preview response). PreviewSeconds int32 `json:"preview_seconds,omitempty"` }