feat: 添加内容创建时间字段,优化内容列表和详情视图,更新价格获取逻辑

This commit is contained in:
2026-01-05 19:22:04 +08:00
parent 454f6809b0
commit 1d53d9560e
4 changed files with 127 additions and 79 deletions

View File

@@ -71,10 +71,24 @@ func (s *content) List(ctx context.Context, filter *content_dto.ContentListFilte
return nil, errorx.ErrDatabaseError.WithCause(err)
}
// Fetch Prices
priceMap := make(map[int64]float64)
if len(list) > 0 {
ids := make([]int64, len(list))
for i, item := range list {
ids[i] = item.ID
}
pTbl, pQ := models.ContentPriceQuery.QueryContext(ctx)
prices, _ := pQ.Where(pTbl.ContentID.In(ids...)).Find()
for _, p := range prices {
priceMap[p.ContentID] = float64(p.PriceAmount) / 100.0
}
}
// Convert to DTO
data := make([]content_dto.ContentItem, len(list))
for i, item := range list {
data[i] = s.toContentItemDTO(item)
data[i] = s.toContentItemDTO(item, priceMap[item.ID])
}
return &requests.Pager{
@@ -110,6 +124,13 @@ func (s *content) Get(ctx context.Context, userID int64, id string) (*content_dt
return nil, errorx.ErrDatabaseError.WithCause(err)
}
// Fetch Price
var price float64
cp, err := models.ContentPriceQuery.WithContext(ctx).Where(models.ContentPriceQuery.ContentID.Eq(cid)).First()
if err == nil {
price = float64(cp.PriceAmount) / 100.0
}
// Interaction & Access status
isLiked := false
isFavorited := false
@@ -159,7 +180,7 @@ func (s *content) Get(ctx context.Context, userID int64, id string) (*content_dt
}
detail := &content_dto.ContentDetail{
ContentItem: s.toContentItemDTO(&item),
ContentItem: s.toContentItemDTO(&item, price),
Description: item.Description,
Body: item.Body,
MediaUrls: s.toMediaURLs(accessibleAssets),
@@ -335,7 +356,7 @@ func (s *content) GetLibrary(ctx context.Context, userID int64) ([]user_dto.Cont
var data []user_dto.ContentItem
for _, item := range list {
dto := s.toContentItemDTO(item)
dto := s.toContentItemDTO(item, 0)
dto.IsPurchased = true
data = append(data, dto)
}
@@ -420,7 +441,7 @@ func (s *content) ListTopics(ctx context.Context) ([]content_dto.Topic, error) {
// Helpers
func (s *content) toContentItemDTO(item *models.Content) content_dto.ContentItem {
func (s *content) toContentItemDTO(item *models.Content, price float64) content_dto.ContentItem {
dto := content_dto.ContentItem{
ID: cast.ToString(item.ID),
Title: item.Title,
@@ -428,6 +449,7 @@ func (s *content) toContentItemDTO(item *models.Content) content_dto.ContentItem
AuthorID: cast.ToString(item.UserID),
Views: int(item.Views),
Likes: int(item.Likes),
Price: price,
}
if item.Author != nil {
dto.AuthorName = item.Author.Nickname
@@ -600,7 +622,7 @@ func (s *content) getInteractList(ctx context.Context, userID int64, typ string)
var data []user_dto.ContentItem
for _, item := range list {
data = append(data, s.toContentItemDTO(item))
data = append(data, s.toContentItemDTO(item, 0))
}
return data, nil
}