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
154
repository/music/artist_postgres.go
Normal file
154
repository/music/artist_postgres.go
Normal file
|
|
@ -0,0 +1,154 @@
|
|||
package music
|
||||
|
||||
import (
|
||||
"arimelody-web/model"
|
||||
)
|
||||
|
||||
func (repo *MusicRepositoryPostgres) GetAllArtists() ([]*model.Artist, error) {
|
||||
var artists = []*model.Artist{}
|
||||
|
||||
err := repo.db.Select(&artists, "SELECT * FROM artist")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return artists, nil
|
||||
}
|
||||
func (repo *MusicRepositoryPostgres) GetArtistCount() (int, error) {
|
||||
var count int
|
||||
err := repo.db.Get(&count, "SELECT count(*) FROM artist")
|
||||
return count, err
|
||||
}
|
||||
|
||||
func (repo *MusicRepositoryPostgres) GetArtistByID(id string) (*model.Artist, error) {
|
||||
var artist = model.Artist{}
|
||||
|
||||
err := repo.db.Get(&artist, "SELECT * FROM artist WHERE id=$1", id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &artist, nil
|
||||
}
|
||||
|
||||
func (repo *MusicRepositoryPostgres) GetArtistsNotOnRelease(releaseID string) ([]*model.Artist, error) {
|
||||
var artists = []*model.Artist{}
|
||||
|
||||
err := repo.db.Select(&artists,
|
||||
"SELECT * FROM artist "+
|
||||
"WHERE id NOT IN "+
|
||||
"(SELECT artist FROM musiccredit WHERE release=$1)",
|
||||
releaseID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return artists, nil
|
||||
}
|
||||
|
||||
func (repo *MusicRepositoryPostgres) GetArtistCredits(artistID string, showHidden bool) ([]*model.Credit, error) {
|
||||
var query string = "SELECT release.id,title,artwork,release_date,artist.id,name,website,avatar,role,is_primary "+
|
||||
"FROM musiccredit "+
|
||||
"JOIN musicrelease AS release ON release=release.id "+
|
||||
"JOIN artist ON artist=artist.id "+
|
||||
"WHERE artist=$1 "
|
||||
if !showHidden { query += "AND visible=true " }
|
||||
query += "ORDER BY release_date DESC"
|
||||
rows, err := repo.db.Query(query, artistID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
type NamePrimary struct {
|
||||
Name string `json:"name"`
|
||||
Primary bool `json:"primary" db:"is_primary"`
|
||||
}
|
||||
var credits []*model.Credit
|
||||
for rows.Next() {
|
||||
credit := &model.Credit{
|
||||
Release: &model.Release{},
|
||||
Artist: &model.Artist{},
|
||||
}
|
||||
err = rows.Scan(
|
||||
&credit.Release.ID,
|
||||
&credit.Release.Title,
|
||||
&credit.Release.Artwork,
|
||||
&credit.Release.ReleaseDate,
|
||||
&credit.Artist.ID,
|
||||
&credit.Artist.Name,
|
||||
&credit.Artist.Website,
|
||||
&credit.Artist.Avatar,
|
||||
&credit.Role,
|
||||
&credit.Primary,
|
||||
)
|
||||
|
||||
otherArtists := []NamePrimary{}
|
||||
err = repo.db.Select(&otherArtists,
|
||||
"SELECT name,is_primary FROM artist "+
|
||||
"JOIN musiccredit ON artist=id "+
|
||||
"WHERE release=$1",
|
||||
credit.Release.ID)
|
||||
for _, otherCredit := range otherArtists {
|
||||
credit.Release.Credits = append(credit.Release.Credits, &model.Credit{
|
||||
Artist: &model.Artist{
|
||||
Name: otherCredit.Name,
|
||||
},
|
||||
Primary: otherCredit.Primary,
|
||||
})
|
||||
}
|
||||
|
||||
credits = append(credits, credit)
|
||||
}
|
||||
|
||||
return credits, nil
|
||||
}
|
||||
|
||||
func (repo *MusicRepositoryPostgres) CreateArtist(
|
||||
id string,
|
||||
name string,
|
||||
website string,
|
||||
avatar string,
|
||||
) error {
|
||||
_, err := repo.db.Exec(
|
||||
"INSERT INTO artist (id, name, website, avatar) "+
|
||||
"VALUES ($1, $2, $3, $4)",
|
||||
id, name, website, avatar,
|
||||
)
|
||||
return err
|
||||
}
|
||||
|
||||
func (repo *MusicRepositoryPostgres) UpdateArtist(artist *model.Artist) error {
|
||||
_, err := repo.db.Exec(
|
||||
"UPDATE artist "+
|
||||
"SET name=$2, website=$3, avatar=$4 "+
|
||||
"WHERE id=$1",
|
||||
artist.ID,
|
||||
artist.Name,
|
||||
artist.Website,
|
||||
artist.Avatar,
|
||||
)
|
||||
return err
|
||||
}
|
||||
func (repo *MusicRepositoryPostgres) UpdateArtistID(oldID string, newID string) error {
|
||||
_, err := repo.db.Exec("UPDATE artist SET id=$2 WHERE id=$1", oldID, newID)
|
||||
return err
|
||||
}
|
||||
func (repo *MusicRepositoryPostgres) UpdateArtistName(id string, name string) error {
|
||||
_, err := repo.db.Exec("UPDATE artist SET name=$2 WHERE id=$1", id, name)
|
||||
return err
|
||||
}
|
||||
func (repo *MusicRepositoryPostgres) UpdateArtistWebsite(id string, website string) error {
|
||||
_, err := repo.db.Exec("UPDATE artist SET website=$2 WHERE id=$1", id, website)
|
||||
return err
|
||||
}
|
||||
func (repo *MusicRepositoryPostgres) UpdateArtistAvatar(id string, avatar string) error {
|
||||
_, err := repo.db.Exec("UPDATE artist SET avatar=$2 WHERE id=$1", id, avatar)
|
||||
return err
|
||||
}
|
||||
|
||||
func (repo *MusicRepositoryPostgres) DeleteArtist(id string) (string, error) {
|
||||
var deletedID string
|
||||
err := repo.db.Get(&deletedID, "DELETE FROM artist WHERE id=$1", id)
|
||||
return deletedID, err
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue