package music import ( "fmt" "github.com/jmoiron/sqlx" ) type Credit struct { artist *Artist role string primary bool } // GETTERS func (credit Credit) GetArtist() Artist { return *credit.artist } func (credit Credit) GetRole() string { return credit.role } func (credit Credit) IsPrimary() bool { return credit.primary } // SETTERS func (credit Credit) SetArtist(artist *Artist) error { // TODO: update DB credit.artist = artist return nil } func (credit Credit) SetRole(role string) error { // TODO: update DB credit.role = role return nil } func (credit Credit) SetPrimary(primary bool) error { // TODO: update DB credit.primary = primary return nil } // DATABASE func PullReleaseCredits(db *sqlx.DB, releaseID string) ([]Credit, error) { var credits = []Credit{} credit_rows, err := db.Query("SELECT artist, role, is_primary FROM musiccredits WHERE release=$1", releaseID) if err != nil { return []Credit{}, err } for credit_rows.Next() { var artistID string var credit = Credit{} err = credit_rows.Scan( &artistID, &credit.role, &credit.primary, ) if err != nil { fmt.Printf("Error while pulling credit for release %s: %s\n", releaseID, err) continue } credit.artist = GetArtist(artistID) if credit.artist == nil { // this should absolutely not happen ever due to foreign key // constraints, but it doesn't hurt to be sure! fmt.Printf("Error while pulling credit for release %s: Artist %s does not exist\n", releaseID, artistID) continue } credits = append(credits, credit) } return credits, nil }