125 lines
3.4 KiB
Go
125 lines
3.4 KiB
Go
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
|
|
}
|