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
135
repository/music/artist_memory.go
Normal file
135
repository/music/artist_memory.go
Normal file
|
|
@ -0,0 +1,135 @@
|
|||
package music
|
||||
|
||||
import (
|
||||
"arimelody-web/errors"
|
||||
"arimelody-web/model"
|
||||
"slices"
|
||||
)
|
||||
|
||||
func (repo *MusicRepositoryMemory) GetAllArtists() ([]*model.Artist, error) {
|
||||
return repo.artists, nil
|
||||
}
|
||||
func (repo *MusicRepositoryMemory) GetArtistCount() (int, error) {
|
||||
return len(repo.artists), nil
|
||||
}
|
||||
|
||||
func (repo *MusicRepositoryMemory) GetArtistByID(id string) (*model.Artist, error) {
|
||||
index := slices.IndexFunc(repo.artists, func(artist *model.Artist) bool {
|
||||
return artist.ID == id
|
||||
})
|
||||
if index == -1 { return nil, nil }
|
||||
return repo.artists[index], nil
|
||||
}
|
||||
|
||||
func (repo *MusicRepositoryMemory) GetArtistsNotOnRelease(releaseID string) ([]*model.Artist, error) {
|
||||
release, err := repo.GetReleaseByID(releaseID)
|
||||
if err != nil { return nil, err }
|
||||
artists, err := repo.GetAllArtists()
|
||||
if err != nil { return nil, err }
|
||||
|
||||
artistsNotOnRelease := []*model.Artist{}
|
||||
for _, artist := range artists {
|
||||
if !slices.ContainsFunc(release.Credits, func(credit *model.Credit) bool {
|
||||
return credit.Artist.ID == artist.ID
|
||||
}) {
|
||||
artistsNotOnRelease = append(artistsNotOnRelease, artist)
|
||||
}
|
||||
}
|
||||
|
||||
return artistsNotOnRelease, nil
|
||||
}
|
||||
|
||||
func (repo *MusicRepositoryMemory) GetArtistCredits(artistID string, showHidden bool) ([]*model.Credit, error) {
|
||||
releases, err := repo.GetAllReleases(!showHidden, 0)
|
||||
if err != nil { return nil, err }
|
||||
|
||||
credits := []*model.Credit{}
|
||||
for _, release := range releases {
|
||||
credits = append(credits, slices.DeleteFunc(
|
||||
release.Credits,
|
||||
func(credit *model.Credit) bool {
|
||||
return credit.Artist.ID != artistID
|
||||
},
|
||||
)...)
|
||||
}
|
||||
|
||||
return credits, nil
|
||||
}
|
||||
|
||||
func (repo *MusicRepositoryMemory) CreateArtist(
|
||||
id string,
|
||||
name string,
|
||||
website string,
|
||||
avatar string,
|
||||
) error {
|
||||
if artist, err := repo.GetArtistByID(id); err != nil {
|
||||
if !errors.IsNotExistError(err) { return err }
|
||||
} else {
|
||||
if artist != nil { return errors.NewValidationError("Artist with this ID already exists") }
|
||||
}
|
||||
|
||||
repo.artists = append(repo.artists, &model.Artist{
|
||||
ID: id,
|
||||
Name: name,
|
||||
Website: website,
|
||||
Avatar: avatar,
|
||||
})
|
||||
return nil
|
||||
}
|
||||
|
||||
func (repo *MusicRepositoryMemory) UpdateArtist(artist *model.Artist) error {
|
||||
repoArtist, err := repo.GetArtistByID(artist.ID)
|
||||
if err != nil { return err }
|
||||
if repoArtist == nil { return errors.NewNotExistError("Artist does not exist") }
|
||||
|
||||
repoArtist.Name = artist.Name
|
||||
repoArtist.Website = artist.Website
|
||||
repoArtist.Avatar = artist.Avatar
|
||||
return nil
|
||||
}
|
||||
func (repo *MusicRepositoryMemory) UpdateArtistID(oldID string, newID string) error {
|
||||
artist, err := repo.GetArtistByID(oldID)
|
||||
if err != nil { return err }
|
||||
if artist == nil { return errors.NewNotExistError("Artist does not exist") }
|
||||
|
||||
artist.ID = newID
|
||||
return nil
|
||||
}
|
||||
func (repo *MusicRepositoryMemory) UpdateArtistName(id string, name string) error {
|
||||
artist, err := repo.GetArtistByID(id)
|
||||
if err != nil { return err }
|
||||
if artist == nil { return errors.NewNotExistError("Artist does not exist") }
|
||||
|
||||
artist.Name = name
|
||||
return nil
|
||||
}
|
||||
func (repo *MusicRepositoryMemory) UpdateArtistWebsite(id string, website string) error {
|
||||
artist, err := repo.GetArtistByID(id)
|
||||
if err != nil { return err }
|
||||
if artist == nil { return errors.NewNotExistError("Artist does not exist") }
|
||||
|
||||
artist.Website = website
|
||||
return nil
|
||||
}
|
||||
func (repo *MusicRepositoryMemory) UpdateArtistAvatar(id string, avatar string) error {
|
||||
artist, err := repo.GetArtistByID(id)
|
||||
if err != nil { return err }
|
||||
if artist == nil { return errors.NewNotExistError("Artist does not exist") }
|
||||
|
||||
artist.Avatar = avatar
|
||||
return nil
|
||||
}
|
||||
|
||||
func (repo *MusicRepositoryMemory) DeleteArtist(id string) (string, error) {
|
||||
var deletedID string
|
||||
newArtists := []*model.Artist{}
|
||||
for _, artist := range repo.artists {
|
||||
if artist.ID == id {
|
||||
deletedID = id
|
||||
continue
|
||||
}
|
||||
newArtists = append(newArtists, artist)
|
||||
}
|
||||
repo.artists = newArtists
|
||||
return deletedID, nil
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue