feat: enrich content item fields
This commit is contained in:
@@ -13,20 +13,31 @@ type ContentListFilter struct {
|
||||
}
|
||||
|
||||
type ContentItem struct {
|
||||
ID int64 `json:"id"`
|
||||
Title string `json:"title"`
|
||||
Cover string `json:"cover"`
|
||||
Genre string `json:"genre"`
|
||||
Type string `json:"type"` // video, audio, article
|
||||
Price float64 `json:"price"`
|
||||
AuthorID int64 `json:"author_id"`
|
||||
AuthorName string `json:"author_name"`
|
||||
AuthorAvatar string `json:"author_avatar"`
|
||||
AuthorIsFollowing bool `json:"author_is_following"`
|
||||
Views int `json:"views"`
|
||||
Likes int `json:"likes"`
|
||||
CreatedAt string `json:"created_at"`
|
||||
IsPurchased bool `json:"is_purchased"`
|
||||
ID int64 `json:"id"`
|
||||
// TenantID 内容所属租户ID。
|
||||
TenantID int64 `json:"tenant_id"`
|
||||
// UserID 内容作者用户ID(与 author_id 同义,便于后台展示)。
|
||||
UserID int64 `json:"user_id"`
|
||||
Title string `json:"title"`
|
||||
Cover string `json:"cover"`
|
||||
Genre string `json:"genre"`
|
||||
Type string `json:"type"` // video, audio, article
|
||||
// Status 内容状态(如 published/unpublished)。
|
||||
Status string `json:"status"`
|
||||
// Visibility 内容可见性(如 public/tenant_only/private)。
|
||||
Visibility string `json:"visibility"`
|
||||
Price float64 `json:"price"`
|
||||
AuthorID int64 `json:"author_id"`
|
||||
AuthorName string `json:"author_name"`
|
||||
// AuthorAvatar 作者头像URL。
|
||||
AuthorAvatar string `json:"author_avatar"`
|
||||
AuthorIsFollowing bool `json:"author_is_following"`
|
||||
Views int `json:"views"`
|
||||
Likes int `json:"likes"`
|
||||
CreatedAt string `json:"created_at"`
|
||||
// PublishedAt 发布时间,未发布为空。
|
||||
PublishedAt string `json:"published_at"`
|
||||
IsPurchased bool `json:"is_purchased"`
|
||||
}
|
||||
|
||||
type ContentDetail struct {
|
||||
|
||||
@@ -479,8 +479,12 @@ func (s *content) ListTopics(ctx context.Context) ([]content_dto.Topic, error) {
|
||||
func (s *content) toContentItemDTO(item *models.Content, price float64, authorIsFollowing bool) content_dto.ContentItem {
|
||||
dto := content_dto.ContentItem{
|
||||
ID: item.ID,
|
||||
TenantID: item.TenantID,
|
||||
UserID: item.UserID,
|
||||
Title: item.Title,
|
||||
Genre: item.Genre,
|
||||
Status: string(item.Status),
|
||||
Visibility: string(item.Visibility),
|
||||
AuthorID: item.UserID,
|
||||
Views: int(item.Views),
|
||||
Likes: int(item.Likes),
|
||||
@@ -488,6 +492,9 @@ func (s *content) toContentItemDTO(item *models.Content, price float64, authorIs
|
||||
Price: price,
|
||||
AuthorIsFollowing: authorIsFollowing,
|
||||
}
|
||||
if !item.PublishedAt.IsZero() {
|
||||
dto.PublishedAt = item.PublishedAt.Format("2006-01-02")
|
||||
}
|
||||
if item.Author != nil {
|
||||
dto.AuthorName = item.Author.Nickname
|
||||
dto.AuthorAvatar = item.Author.Avatar
|
||||
|
||||
@@ -705,14 +705,21 @@ func (s *super) toSuperContentTenant(tenant *models.Tenant) *super_dto.SuperCont
|
||||
func (s *super) toSuperContentDTO(item *models.Content, price *models.ContentPrice) *v1_dto.ContentItem {
|
||||
dto := &v1_dto.ContentItem{
|
||||
ID: item.ID,
|
||||
TenantID: item.TenantID,
|
||||
UserID: item.UserID,
|
||||
Title: item.Title,
|
||||
Genre: item.Genre,
|
||||
Status: string(item.Status),
|
||||
Visibility: string(item.Visibility),
|
||||
AuthorID: item.UserID,
|
||||
Views: int(item.Views),
|
||||
Likes: int(item.Likes),
|
||||
CreatedAt: item.CreatedAt.Format("2006-01-02"),
|
||||
IsPurchased: false,
|
||||
}
|
||||
if !item.PublishedAt.IsZero() {
|
||||
dto.PublishedAt = item.PublishedAt.Format("2006-01-02")
|
||||
}
|
||||
if price != nil {
|
||||
dto.Price = float64(price.PriceAmount) / 100.0
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user