quintodrome/persistence/library_repository.go

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

84 lines
2.1 KiB
Go
Raw Normal View History

2024-05-07 07:28:44 -08:00
package persistence
import (
"context"
2024-05-07 07:29:45 -08:00
"time"
2024-05-07 07:28:44 -08:00
2024-05-07 07:29:45 -08:00
. "github.com/Masterminds/squirrel"
2024-05-07 07:52:13 -08:00
"github.com/navidrome/navidrome/conf"
2024-05-07 07:28:44 -08:00
"github.com/navidrome/navidrome/model"
"github.com/pocketbase/dbx"
)
type libraryRepository struct {
2024-05-07 07:29:45 -08:00
sqlRepository
2024-05-07 07:28:44 -08:00
}
2024-05-07 07:29:45 -08:00
func NewLibraryRepository(ctx context.Context, db dbx.Builder) model.LibraryRepository {
r := &libraryRepository{}
r.ctx = ctx
r.db = db
2024-09-09 15:45:02 -08:00
r.registerModel(&model.Library{}, nil)
2024-05-07 07:29:45 -08:00
return r
2024-05-07 07:28:44 -08:00
}
2024-05-07 07:29:45 -08:00
func (r *libraryRepository) Get(id int) (*model.Library, error) {
sq := r.newSelect().Columns("*").Where(Eq{"id": id})
var res model.Library
err := r.queryOne(sq, &res)
return &res, err
2024-05-07 07:28:44 -08:00
}
2024-05-07 07:29:45 -08:00
func (r *libraryRepository) Put(l *model.Library) error {
cols := map[string]any{
2024-05-07 07:52:13 -08:00
"name": l.Name,
"path": l.Path,
"remote_path": l.RemotePath,
"updated_at": time.Now(),
2024-05-07 07:29:45 -08:00
}
if l.ID != 0 {
cols["id"] = l.ID
}
sq := Insert(r.tableName).SetMap(cols).
2024-05-07 07:52:13 -08:00
Suffix(`on conflict(id) do update set name = excluded.name, path = excluded.path,
remote_path = excluded.remote_path, updated_at = excluded.updated_at`)
_, err := r.executeSQL(sq)
return err
}
const hardCodedMusicFolderID = 1
// TODO Remove this method when we have a proper UI to add libraries
func (r *libraryRepository) StoreMusicFolder() error {
sq := Update(r.tableName).Set("path", conf.Server.MusicFolder).Set("updated_at", time.Now()).
Where(Eq{"id": hardCodedMusicFolderID})
_, err := r.executeSQL(sq)
return err
}
func (r *libraryRepository) AddArtist(id int, artistID string) error {
sq := Insert("library_artist").Columns("library_id", "artist_id").Values(id, artistID).
Suffix(`on conflict(library_id, artist_id) do nothing`)
_, err := r.executeSQL(sq)
if err != nil {
return err
}
return nil
}
func (r *libraryRepository) UpdateLastScan(id int, t time.Time) error {
sq := Update(r.tableName).Set("last_scan_at", t).Where(Eq{"id": id})
2024-05-07 07:29:45 -08:00
_, err := r.executeSQL(sq)
return err
2024-05-07 07:28:44 -08:00
}
2024-05-07 07:29:45 -08:00
func (r *libraryRepository) GetAll(ops ...model.QueryOptions) (model.Libraries, error) {
sq := r.newSelect(ops...).Columns("*")
res := model.Libraries{}
err := r.queryAll(sq, &res)
return res, err
2024-05-07 07:28:44 -08:00
}
var _ model.LibraryRepository = (*libraryRepository)(nil)