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) }