145 lines
4.0 KiB
Go
145 lines
4.0 KiB
Go
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)
|
|
}
|