82 lines
3.2 KiB
Go
82 lines
3.2 KiB
Go
|
|
package music
|
||
|
|
|
||
|
|
import (
|
||
|
|
"arimelody-web/model"
|
||
|
|
"arimelody-web/errors"
|
||
|
|
)
|
||
|
|
|
||
|
|
|
||
|
|
func (s *MusicService) GetAllTracks() ([]*model.Track, error) {
|
||
|
|
return s.repo.GetAllTracks()
|
||
|
|
}
|
||
|
|
func (s *MusicService) GetTrackCount() (int, error) {
|
||
|
|
return s.repo.GetTrackCount()
|
||
|
|
}
|
||
|
|
func (s *MusicService) GetTrackByID(id string) (*model.Track, error) {
|
||
|
|
track, err := s.repo.GetTrackByID(id)
|
||
|
|
if err != nil { return nil, err }
|
||
|
|
if track == nil { return nil, errors.NewNotExistError("Track does not exist") }
|
||
|
|
return track, nil
|
||
|
|
}
|
||
|
|
func (s *MusicService) GetOrphanTracks() ([]*model.Track, error) {
|
||
|
|
return s.repo.GetOrphanTracks()
|
||
|
|
}
|
||
|
|
func (s *MusicService) GetTracksNotOnRelease(releaseID string) ([]*model.Track, error) {
|
||
|
|
return s.repo.GetTracksNotOnRelease(releaseID)
|
||
|
|
}
|
||
|
|
func (s *MusicService) GetTrackReleases(trackID string) ([]*model.Release, error) {
|
||
|
|
return s.repo.GetTrackReleases(trackID)
|
||
|
|
}
|
||
|
|
func (s *MusicService) GetTrackFullReleases(trackID string) ([]*model.Release, error) {
|
||
|
|
releases, err := s.GetTrackReleases(trackID)
|
||
|
|
if err != nil { return nil, err }
|
||
|
|
for _, release := range releases {
|
||
|
|
if err := s.fillRelease(release); err != nil { return nil, err }
|
||
|
|
}
|
||
|
|
return releases, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
func (s *MusicService) CreateTrack(title string, description string, lyrics string, previewURL string) (string, error) {
|
||
|
|
if len(title) == 0 { return "", errors.NewValidationError("Track title cannot be empty") }
|
||
|
|
id, err := s.repo.CreateTrack(title, description, lyrics, previewURL)
|
||
|
|
if err != nil { return "", err }
|
||
|
|
s.log.Printf("Created track '%s' (%s)", title, id)
|
||
|
|
return id, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
func (s *MusicService) UpdateTrack(track *model.Track) error {
|
||
|
|
if len(track.Title) == 0 { return errors.NewValidationError("Track title cannot be empty") }
|
||
|
|
if err := s.repo.UpdateTrack(track); err != nil { return err }
|
||
|
|
s.log.Printf("Updated track '%s' (%s)", track.Title, track.ID)
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
func (s *MusicService) UpdateTrackTitle(id string, title string) error {
|
||
|
|
if len(title) == 0 { return errors.NewValidationError("Track title cannot be empty") }
|
||
|
|
if err := s.repo.UpdateTrackTitle(id, title); err != nil { return err }
|
||
|
|
s.log.Printf("Updated track %s title to '%s'", id, title)
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
func (s *MusicService) UpdateTrackDescription(id string, description string) error {
|
||
|
|
if err := s.repo.UpdateTrackDescription(id, description); err != nil { return err }
|
||
|
|
s.log.Printf("Updated track %s description to '%s'", id, description)
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
func (s *MusicService) UpdateTrackLyrics(id string, lyrics string) error {
|
||
|
|
if err := s.repo.UpdateTrackLyrics(id, lyrics); err != nil { return err }
|
||
|
|
s.log.Printf("Updated track %s lyrics to '%s'", id, lyrics)
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
func (s *MusicService) UpdateTrackPreviewURL(id string, previewURL string) error {
|
||
|
|
if err := s.repo.UpdateTrackPreviewURL(id, previewURL); err != nil { return err }
|
||
|
|
s.log.Printf("Updated track %s preview URL to '%s'", id, previewURL)
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
|
||
|
|
func (s *MusicService) DeleteTrack(id string) error {
|
||
|
|
deletedID, err := s.repo.DeleteTrack(id)
|
||
|
|
if err != nil { return err }
|
||
|
|
if deletedID == "" { return errors.NewNotExistError("Track does not exist") }
|
||
|
|
s.log.Printf("Deleted track %s", id)
|
||
|
|
return nil
|
||
|
|
}
|