Files
ai_dianshang/server/internal/service/livestream.go

145 lines
4.0 KiB
Go
Raw Permalink Normal View History

2025-11-28 15:18:10 +08:00
package service
import (
"dianshang/internal/model"
"dianshang/internal/repository"
"errors"
)
type LiveStreamService interface {
GetLiveStreamList(page, pageSize int, title, platform string, status *int) ([]model.LiveStream, int64, error)
GetLiveStreamByID(id uint) (*model.LiveStream, error)
GetActiveLiveStreams() ([]model.LiveStream, error)
CreateLiveStream(stream *model.LiveStream) error
UpdateLiveStream(id uint, stream *model.LiveStream) error
UpdateLiveStreamStatus(id uint, status int) error
DeleteLiveStream(id uint) error
BatchDeleteLiveStreams(ids []uint) error
IncrementViewCount(id uint) error
}
type liveStreamService struct {
liveStreamRepo repository.LiveStreamRepository
}
func NewLiveStreamService(liveStreamRepo repository.LiveStreamRepository) LiveStreamService {
return &liveStreamService{
liveStreamRepo: liveStreamRepo,
}
}
// GetLiveStreamList 获取投流源列表
func (s *liveStreamService) GetLiveStreamList(page, pageSize int, title, platform string, status *int) ([]model.LiveStream, int64, error) {
if page < 1 {
page = 1
}
if pageSize < 1 {
pageSize = 20
}
return s.liveStreamRepo.GetList(page, pageSize, title, platform, status)
}
// GetLiveStreamByID 获取投流源详情
func (s *liveStreamService) GetLiveStreamByID(id uint) (*model.LiveStream, error) {
if id == 0 {
return nil, errors.New("无效的投流源ID")
}
return s.liveStreamRepo.GetByID(id)
}
// GetActiveLiveStreams 获取所有启用的投流源
func (s *liveStreamService) GetActiveLiveStreams() ([]model.LiveStream, error) {
return s.liveStreamRepo.GetActiveLiveStreams()
}
// CreateLiveStream 创建投流源
func (s *liveStreamService) CreateLiveStream(stream *model.LiveStream) error {
if stream.Title == "" {
return errors.New("投流源标题不能为空")
}
if stream.Platform == "" {
return errors.New("平台名称不能为空")
}
if stream.StreamURL == "" {
return errors.New("投流URL不能为空")
}
// 检查该平台是否已有投流源
existingStreams, _, err := s.liveStreamRepo.GetList(1, 1, "", stream.Platform, nil)
if err != nil {
return errors.New("检查平台投流源失败")
}
if len(existingStreams) > 0 {
return errors.New("该平台已存在投流源,一个平台只能设置一个投流源")
}
return s.liveStreamRepo.Create(stream)
}
// UpdateLiveStream 更新投流源
func (s *liveStreamService) UpdateLiveStream(id uint, stream *model.LiveStream) error {
if id == 0 {
return errors.New("无效的投流源ID")
}
// 检查投流源是否存在
existing, err := s.liveStreamRepo.GetByID(id)
if err != nil {
return errors.New("投流源不存在")
}
// 如果修改了平台,检查新平台是否已有其他投流源
if stream.Platform != "" && stream.Platform != existing.Platform {
existingStreams, _, err := s.liveStreamRepo.GetList(1, 1, "", stream.Platform, nil)
if err != nil {
return errors.New("检查平台投流源失败")
}
if len(existingStreams) > 0 {
return errors.New("该平台已存在投流源,一个平台只能设置一个投流源")
}
}
return s.liveStreamRepo.Update(id, stream)
}
// UpdateLiveStreamStatus 更新投流源状态
func (s *liveStreamService) UpdateLiveStreamStatus(id uint, status int) error {
if id == 0 {
return errors.New("无效的投流源ID")
}
if status != 0 && status != 1 {
return errors.New("无效的状态值")
}
return s.liveStreamRepo.UpdateStatus(id, status)
}
// DeleteLiveStream 删除投流源
func (s *liveStreamService) DeleteLiveStream(id uint) error {
if id == 0 {
return errors.New("无效的投流源ID")
}
return s.liveStreamRepo.Delete(id)
}
// BatchDeleteLiveStreams 批量删除投流源
func (s *liveStreamService) BatchDeleteLiveStreams(ids []uint) error {
if len(ids) == 0 {
return errors.New("请选择要删除的投流源")
}
return s.liveStreamRepo.BatchDelete(ids)
}
// IncrementViewCount 增加观看次数
func (s *liveStreamService) IncrementViewCount(id uint) error {
if id == 0 {
return errors.New("无效的投流源ID")
}
return s.liveStreamRepo.IncrementViewCount(id)
}