HEAVY: finish music service migration, tidy up services, more tests
This commit is contained in:
parent
9e311df462
commit
90a671982c
47 changed files with 2698 additions and 902 deletions
123
repository/music/track_memory.go
Normal file
123
repository/music/track_memory.go
Normal file
|
|
@ -0,0 +1,123 @@
|
|||
package music
|
||||
|
||||
import (
|
||||
"arimelody-web/errors"
|
||||
"arimelody-web/model"
|
||||
"slices"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
func (repo *MusicRepositoryMemory) GetAllTracks() ([]*model.Track, error) {
|
||||
return repo.tracks, nil
|
||||
}
|
||||
func (repo *MusicRepositoryMemory) GetTrackCount() (int, error) {
|
||||
return len(repo.tracks), nil
|
||||
}
|
||||
|
||||
func (repo *MusicRepositoryMemory) GetTrackByID(id string) (*model.Track, error) {
|
||||
index := slices.IndexFunc(repo.tracks, func(track *model.Track) bool {
|
||||
return track.ID == id
|
||||
})
|
||||
if index == -1 { return nil, nil }
|
||||
return repo.tracks[index], nil
|
||||
}
|
||||
|
||||
func (repo *MusicRepositoryMemory) GetOrphanTracks() ([]*model.Track, error) {
|
||||
return slices.DeleteFunc(repo.tracks, func(track *model.Track) bool {
|
||||
return slices.ContainsFunc(repo.releases, func(release *model.Release) bool {
|
||||
return slices.ContainsFunc(release.Tracks, func(releaseTrack *model.Track) bool {
|
||||
return releaseTrack.ID == track.ID
|
||||
})
|
||||
})
|
||||
}), nil
|
||||
}
|
||||
|
||||
func (repo *MusicRepositoryMemory) GetTracksNotOnRelease(releaseID string) ([]*model.Track, error) {
|
||||
release, err := repo.GetReleaseByID(releaseID)
|
||||
if err != nil { return nil, err }
|
||||
|
||||
return slices.DeleteFunc(repo.tracks, func(track *model.Track) bool {
|
||||
return slices.ContainsFunc(release.Tracks, func(releaseTrack *model.Track) bool {
|
||||
return releaseTrack.ID == track.ID
|
||||
})
|
||||
}), nil
|
||||
}
|
||||
|
||||
func (repo *MusicRepositoryMemory) GetTrackReleases(trackID string) ([]*model.Release, error) {
|
||||
return slices.DeleteFunc(repo.releases, func(release *model.Release) bool {
|
||||
return !slices.ContainsFunc(release.Tracks, func(track *model.Track) bool {
|
||||
return track.ID == trackID
|
||||
})
|
||||
}), nil
|
||||
}
|
||||
|
||||
func (repo *MusicRepositoryMemory) CreateTrack(
|
||||
title string,
|
||||
description string,
|
||||
lyrics string,
|
||||
previewURL string,
|
||||
) (string, error) {
|
||||
id := strconv.Itoa(len(repo.tracks))
|
||||
repo.tracks = append(repo.tracks, &model.Track{
|
||||
ID: id,
|
||||
Title: title,
|
||||
Description: description,
|
||||
Lyrics: lyrics,
|
||||
PreviewURL: previewURL,
|
||||
})
|
||||
return id, nil
|
||||
}
|
||||
|
||||
func (repo *MusicRepositoryMemory) UpdateTrack(track *model.Track) error {
|
||||
repoTrack, err := repo.GetTrackByID(track.ID)
|
||||
if err != nil { return err }
|
||||
if repoTrack == nil { return errors.NewNotExistError("Track does not exist") }
|
||||
|
||||
repoTrack.Title = track.Title
|
||||
repoTrack.Description = track.Description
|
||||
repoTrack.Lyrics = track.Lyrics
|
||||
repoTrack.PreviewURL = track.PreviewURL
|
||||
return nil
|
||||
}
|
||||
func (repo *MusicRepositoryMemory) UpdateTrackTitle(id string, title string) error {
|
||||
repoTrack, err := repo.GetTrackByID(id)
|
||||
if err != nil { return err }
|
||||
if repoTrack == nil { return errors.NewNotExistError("Track does not exist") }
|
||||
repoTrack.Title = title
|
||||
return nil
|
||||
}
|
||||
func (repo *MusicRepositoryMemory) UpdateTrackDescription(id string, description string) error {
|
||||
repoTrack, err := repo.GetTrackByID(id)
|
||||
if err != nil { return err }
|
||||
if repoTrack == nil { return errors.NewNotExistError("Track does not exist") }
|
||||
repoTrack.Description = description
|
||||
return nil
|
||||
}
|
||||
func (repo *MusicRepositoryMemory) UpdateTrackLyrics(id string, lyrics string) error {
|
||||
repoTrack, err := repo.GetTrackByID(id)
|
||||
if err != nil { return err }
|
||||
if repoTrack == nil { return errors.NewNotExistError("Track does not exist") }
|
||||
repoTrack.Lyrics = lyrics
|
||||
return nil
|
||||
}
|
||||
func (repo *MusicRepositoryMemory) UpdateTrackPreviewURL(id string, previewURL string) error {
|
||||
repoTrack, err := repo.GetTrackByID(id)
|
||||
if err != nil { return err }
|
||||
if repoTrack == nil { return errors.NewNotExistError("Track does not exist") }
|
||||
repoTrack.PreviewURL = previewURL
|
||||
return nil
|
||||
}
|
||||
|
||||
func (repo *MusicRepositoryMemory) DeleteTrack(id string) (string, error) {
|
||||
var deletedID string
|
||||
newTracks := []*model.Track{}
|
||||
for _, track := range repo.tracks {
|
||||
if track.ID == id {
|
||||
deletedID = id
|
||||
continue
|
||||
}
|
||||
newTracks = append(newTracks, track)
|
||||
}
|
||||
repo.tracks = newTracks
|
||||
return deletedID, nil
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue