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 }