arimelody-web/repository/music/track_postgres.go

137 lines
3.8 KiB
Go

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
}