web
This commit is contained in:
124
server/internal/repository/livestream.go
Normal file
124
server/internal/repository/livestream.go
Normal file
@@ -0,0 +1,124 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user