feat: 订阅列表和免费列表
This commit is contained in:
@@ -16,18 +16,44 @@ const MaxFreeSubscription = 2
|
||||
|
||||
// GetUserSubscription 获取用户订阅列表
|
||||
func (s *SubscriptionService) GetUserSubscription(userId string, info common.PageInfo) ([]radio.RadioSubscription, int64, error) {
|
||||
db := global.DB.Model(&radio.RadioSubscription{}).Where("user_id = ?", userId)
|
||||
var list []radio.RadioSubscription
|
||||
var subscriptions []radio.RadioSubscription
|
||||
var total int64
|
||||
|
||||
err := db.Count(&total).Error
|
||||
db := global.DB // 替换为你实际的 GORM 变量
|
||||
// 2. 统计该用户订阅的总数 (Status=1 表示订阅中)
|
||||
err := db.Model(&radio.RadioSubscription{}).
|
||||
Where("user_id = ? AND status = 1", userId).
|
||||
Count(&total).Error
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
// 3. 执行分页关联查询
|
||||
err = db.Model(&radio.RadioSubscription{}).
|
||||
Where("user_id = ? AND status = 1", userId).
|
||||
Limit(info.PageSize).
|
||||
Offset((info.Current-1)*info.PageSize).
|
||||
Order("created_at DESC").
|
||||
// 级联加载频道及其封面
|
||||
Preload("Channel").
|
||||
Preload("Channel.Cover").
|
||||
// 关键:子查询过滤——只预加载每个频道 ID 最大的那一条节目
|
||||
Preload("Channel.Programs", func(db *gorm.DB) *gorm.DB {
|
||||
// 子查询:找到每个频道下 ID 最大的节目(通常 ID 越大代表越新,也可以用 CreatedAt)
|
||||
subQuery := db.Table("sundynix_radio_program").
|
||||
Select("id").
|
||||
Where("status = 1"). // 只找上架的
|
||||
Where("created_at = (SELECT MAX(created_at) FROM sundynix_radio_program AS rp WHERE rp.channel_id = sundynix_radio_program.channel_id AND rp.status = 1)")
|
||||
|
||||
offset := (info.Current - 1) * info.PageSize
|
||||
err = db.Offset(offset).Limit(info.PageSize).Order("created_at DESC").Find(&list).Error
|
||||
return list, total, err
|
||||
// 嵌套预加载:节目里的音频和封面也一并带出来
|
||||
return db.Where("id IN (?)", subQuery).
|
||||
Preload("Cover").
|
||||
Preload("Audio")
|
||||
}).
|
||||
Find(&subscriptions).Error
|
||||
|
||||
if err != nil {
|
||||
return nil, total, err
|
||||
}
|
||||
return subscriptions, total, err
|
||||
}
|
||||
|
||||
// GetUserSubscriptionHistory 获取用户历史订阅过的频道ID列表
|
||||
|
||||
Reference in New Issue
Block a user