package repository import ( "dianshang/internal/model" "time" "gorm.io/gorm" ) type LiveStreamRepository interface { GetList(page, pageSize int, title, platform string, status *int) ([]model.LiveStream, int64, error) GetByID(id uint) (*model.LiveStream, error) GetActiveLiveStreams() ([]model.LiveStream, error) Create(stream *model.LiveStream) error Update(id uint, stream *model.LiveStream) error UpdateStatus(id uint, status int) error Delete(id uint) error BatchDelete(ids []uint) error IncrementViewCount(id uint) error } type liveStreamRepository struct { db *gorm.DB } func NewLiveStreamRepository(db *gorm.DB) LiveStreamRepository { return &liveStreamRepository{db: db} } // GetList 获取投流源列表 func (r *liveStreamRepository) GetList(page, pageSize int, title, platform string, status *int) ([]model.LiveStream, int64, error) { var streams []model.LiveStream var total int64 query := r.db.Model(&model.LiveStream{}) // 标题筛选 if title != "" { query = query.Where("title LIKE ?", "%"+title+"%") } // 平台筛选 if platform != "" { query = query.Where("platform = ?", platform) } // 状态筛选 if status != nil { query = query.Where("status = ?", *status) } // 统计总数 if err := query.Count(&total).Error; err != nil { return nil, 0, err } // 分页查询,按排序和创建时间排序 offset := (page - 1) * pageSize if err := query.Order("sort DESC, created_at DESC"). Limit(pageSize). Offset(offset). Find(&streams).Error; err != nil { return nil, 0, err } return streams, total, nil } // GetByID 根据ID获取投流源详情 func (r *liveStreamRepository) GetByID(id uint) (*model.LiveStream, error) { var stream model.LiveStream if err := r.db.First(&stream, id).Error; err != nil { return nil, err } return &stream, nil } // GetActiveLiveStreams 获取所有启用且在有效期内的投流源 func (r *liveStreamRepository) GetActiveLiveStreams() ([]model.LiveStream, error) { var streams []model.LiveStream now := time.Now() query := r.db.Where("status = ?", 1) // 查询有效时间范围内的投流源 query = query.Where("(start_time IS NULL OR start_time <= ?) AND (end_time IS NULL OR end_time >= ?)", now, now) if err := query.Order("sort DESC, created_at DESC").Find(&streams).Error; err != nil { return nil, err } return streams, nil } // Create 创建投流源 func (r *liveStreamRepository) Create(stream *model.LiveStream) error { return r.db.Create(stream).Error } // Update 更新投流源 func (r *liveStreamRepository) Update(id uint, stream *model.LiveStream) error { return r.db.Model(&model.LiveStream{}).Where("id = ?", id).Updates(stream).Error } // UpdateStatus 更新投流源状态 func (r *liveStreamRepository) UpdateStatus(id uint, status int) error { return r.db.Model(&model.LiveStream{}).Where("id = ?", id).Update("status", status).Error } // Delete 删除投流源 func (r *liveStreamRepository) Delete(id uint) error { return r.db.Delete(&model.LiveStream{}, id).Error } // BatchDelete 批量删除投流源 func (r *liveStreamRepository) BatchDelete(ids []uint) error { return r.db.Delete(&model.LiveStream{}, ids).Error } // IncrementViewCount 增加观看次数 func (r *liveStreamRepository) IncrementViewCount(id uint) error { return r.db.Model(&model.LiveStream{}).Where("id = ?", id). UpdateColumn("view_count", gorm.Expr("view_count + ?", 1)).Error }