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