57 lines
1.5 KiB
Go
57 lines
1.5 KiB
Go
package domain
|
|
|
|
import (
|
|
"errors"
|
|
)
|
|
|
|
var (
|
|
ErrSoftwareNotFound = errors.New("software not found")
|
|
ErrNoReleasesFound = errors.New("no releases found for software")
|
|
ErrReleaseNotFound = errors.New("release not found for software and version")
|
|
)
|
|
|
|
type DownloadServiceInterface interface {
|
|
GetLatestRelease(softwareName string) (*Release, error)
|
|
GetSpecificRelease(softwareName string, version string) (*Release, error)
|
|
}
|
|
|
|
type DownloadService struct {
|
|
softwareRepository SoftwareRepositoryInterface
|
|
releaseRepository ReleaseRepositoryInterface
|
|
}
|
|
|
|
func NewDownloadService(softwareRepository SoftwareRepositoryInterface, releaseRepository ReleaseRepositoryInterface) *DownloadService {
|
|
return &DownloadService{
|
|
softwareRepository: softwareRepository,
|
|
releaseRepository: releaseRepository,
|
|
}
|
|
}
|
|
|
|
func (s *DownloadService) GetLatestRelease(softwareName string) (*Release, error) {
|
|
software, err := s.softwareRepository.GetByName(softwareName)
|
|
if err != nil {
|
|
return nil, ErrSoftwareNotFound
|
|
}
|
|
|
|
release, err := s.releaseRepository.FindLatestBySoftwareID(software.ID)
|
|
if err != nil {
|
|
return nil, ErrNoReleasesFound
|
|
}
|
|
|
|
return release, nil
|
|
}
|
|
|
|
func (s *DownloadService) GetSpecificRelease(softwareName string, version string) (*Release, error) {
|
|
software, err := s.softwareRepository.GetByName(softwareName)
|
|
if err != nil {
|
|
return nil, ErrSoftwareNotFound
|
|
}
|
|
|
|
release, err := s.releaseRepository.FindBySoftwareIDAndVersion(software.ID, version)
|
|
if err != nil {
|
|
return nil, ErrReleaseNotFound
|
|
}
|
|
|
|
return release, nil
|
|
}
|