package music import ( "arimelody.me/arimelody.me/music/model" "github.com/jmoiron/sqlx" ) // DATABASE func GetArtist(db *sqlx.DB, id string) (*model.Artist, error) { var artist = model.Artist{} err := db.Get(&artist, "SELECT * FROM artist WHERE id=$1", id) if err != nil { return nil, err } return &artist, nil } func GetAllArtists(db *sqlx.DB) ([]*model.Artist, error) { var artists = []*model.Artist{} err := db.Select(&artists, "SELECT * FROM artist") if err != nil { return nil, err } return artists, nil } func GetArtistsNotOnRelease(db *sqlx.DB, releaseID string) ([]*model.Artist, error) { var artists = []*model.Artist{} err := 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 GetArtistCredits(db *sqlx.DB, artistID string) ([]*model.Credit, error) { type DBCredit struct { Release string Artist string Role string Primary bool `db:"is_primary"` } var dbCredits []DBCredit err := db.Select(&dbCredits, "SELECT * FROM musiccredit WHERE artist=$1", artistID) if err != nil { return nil, err } var credits []*model.Credit for _, credit := range dbCredits { credits = append(credits, &model.Credit{ Release: model.Release{ ID: credit.Release }, Artist: model.Artist{ ID: credit.Artist }, Role: credit.Role, Primary: credit.Primary, }) } return credits, nil } func CreateArtist(db *sqlx.DB, artist *model.Artist) error { _, err := db.Exec( "INSERT INTO artist (id, name, website, avatar) "+ "VALUES ($1, $2, $3, $4)", artist.ID, artist.Name, artist.Website, artist.Avatar, ) if err != nil { return err } return nil } func UpdateArtist(db *sqlx.DB, artist *model.Artist) error { _, err := db.Exec( "UPDATE artist "+ "SET name=$2, website=$3, avatar=$4 "+ "WHERE id=$1", artist.ID, artist.Name, artist.Website, artist.Avatar, ) if err != nil { return err } return nil } func DeleteArtist(db *sqlx.DB, artist *model.Artist) error { _, err := db.Exec( "DELETE FROM artist "+ "WHERE id=$1", artist.ID, ) if err != nil { return err } return nil }