package music import ( "arimelody-web/model" ) func (repo *MusicRepositoryPostgres) GetAllTracks() ([]*model.Track, error) { var tracks = []*model.Track{} err := repo.db.Select(&tracks, "SELECT * FROM musictrack") if err != nil { return nil, err } return tracks, nil } func (repo *MusicRepositoryPostgres) GetTrackCount() (int, error) { var count int err := repo.db.Get(&count, "SELECT count(*) FROM musictrack") return count, err } func (repo *MusicRepositoryPostgres) GetTrackByID(id string) (*model.Track, error) { var track = model.Track{} stmt, _ := repo.db.Preparex("SELECT * FROM musictrack WHERE id=$1") err := stmt.Get(&track, id) if err != nil { return nil, err } return &track, nil } func (repo *MusicRepositoryPostgres) GetOrphanTracks() ([]*model.Track, error) { var tracks = []*model.Track{} err := repo.db.Select(&tracks, "SELECT * FROM musictrack WHERE id NOT IN (SELECT track FROM musicreleasetrack)") if err != nil { return nil, err } return tracks, nil } func (repo *MusicRepositoryPostgres) GetTracksNotOnRelease(releaseID string) ([]*model.Track, error) { var tracks = []*model.Track{} err := repo.db.Select(&tracks, "SELECT * FROM musictrack "+ "WHERE id NOT IN "+ "(SELECT track FROM musicreleasetrack WHERE release=$1)", releaseID) if err != nil { return nil, err } return tracks, nil } func (repo *MusicRepositoryPostgres) GetTrackReleases(trackID string) ([]*model.Release, error) { var releases = []*model.Release{} err := repo.db.Select(&releases, "SELECT id,title,type,release_date,artwork,buylink "+ "FROM musicrelease "+ "JOIN musicreleasetrack ON release=id "+ "WHERE track=$1 "+ "ORDER BY release_date", trackID, ) if err != nil { return nil, err } return releases, nil } func (repo *MusicRepositoryPostgres) CreateTrack( title string, description string, lyrics string, previewURL string, ) (string, error) { var trackID string err := repo.db.QueryRow( "INSERT INTO musictrack (title, description, lyrics, preview_url) "+ "VALUES ($1, $2, $3, $4) "+ "RETURNING id", title, description, lyrics, previewURL, ).Scan(&trackID) if err != nil { return "", err } return trackID, nil } func (repo *MusicRepositoryPostgres) UpdateTrack(track *model.Track) error { _, err := repo.db.Exec( "UPDATE musictrack "+ "SET title=$2, description=$3, lyrics=$4, preview_url=$5 "+ "WHERE id=$1", track.ID, track.Title, track.Description, track.Lyrics, track.PreviewURL, ) if err != nil { return err } return nil } func (repo *MusicRepositoryPostgres) UpdateTrackTitle(id string, title string) error { _, err := repo.db.Exec("UPDATE musictrack SET title=$2 WHERE id=$1", id, title) return err } func (repo *MusicRepositoryPostgres) UpdateTrackDescription(id string, description string) error { _, err := repo.db.Exec("UPDATE musictrack SET description=$2 WHERE id=$1", id, description) return err } func (repo *MusicRepositoryPostgres) UpdateTrackLyrics(id string, lyrics string) error { _, err := repo.db.Exec("UPDATE musictrack SET lyrics=$2 WHERE id=$1", id, lyrics) return err } func (repo *MusicRepositoryPostgres) UpdateTrackPreviewURL(id string, previewURL string) error { _, err := repo.db.Exec("UPDATE musictrack SET preview_url=$2 WHERE id=$1", id, previewURL) return err } func (repo *MusicRepositoryPostgres) DeleteTrack(id string) (string, error) { var deletedID string err := repo.db.Get(&deletedID, "DELETE FROM musictrack WHERE id=$1 RETURNING id", id) return deletedID, err }