138 lines
3.8 KiB
Go
138 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
|
||
|
|
}
|