82 lines
2.1 KiB
Go
82 lines
2.1 KiB
Go
package database
|
|
|
|
import (
|
|
"database/sql"
|
|
"errors"
|
|
"time"
|
|
|
|
"git.noroutes.net/NoRoutes/vibetunes/internal/idgen"
|
|
)
|
|
|
|
type MusicFolder struct {
|
|
ID string
|
|
Name string
|
|
Path string
|
|
Kind string
|
|
Enabled bool
|
|
CreatedAt time.Time
|
|
}
|
|
|
|
func CreateMusicFolder(db *sql.DB, name, path, kind string) (*MusicFolder, error) {
|
|
id := idgen.New("mf")
|
|
_, err := db.Exec(`INSERT INTO music_folders (id, name, path, kind) VALUES (?, ?, ?, ?)`, id, name, path, kind)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if _, err := db.Exec(`INSERT INTO scan_state (id, music_folder_id) VALUES (?, ?)`, idgen.New("sc"), id); err != nil {
|
|
return nil, err
|
|
}
|
|
return GetMusicFolder(db, id)
|
|
}
|
|
|
|
func GetMusicFolder(db *sql.DB, id string) (*MusicFolder, error) {
|
|
return scanFolder(db.QueryRow(`SELECT id, name, path, kind, enabled, created_at FROM music_folders WHERE id = ?`, id))
|
|
}
|
|
|
|
func scanFolder(row *sql.Row) (*MusicFolder, error) {
|
|
var f MusicFolder
|
|
var enabled int
|
|
var createdAt string
|
|
err := row.Scan(&f.ID, &f.Name, &f.Path, &f.Kind, &enabled, &createdAt)
|
|
if errors.Is(err, sql.ErrNoRows) {
|
|
return nil, ErrNotFound
|
|
}
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
f.Enabled = enabled != 0
|
|
f.CreatedAt, _ = parseTime(createdAt)
|
|
return &f, nil
|
|
}
|
|
|
|
func ListMusicFolders(db *sql.DB) ([]*MusicFolder, error) {
|
|
rows, err := db.Query(`SELECT id, name, path, kind, enabled, created_at FROM music_folders ORDER BY name COLLATE NOCASE`)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
var out []*MusicFolder
|
|
for rows.Next() {
|
|
var f MusicFolder
|
|
var enabled int
|
|
var createdAt string
|
|
if err := rows.Scan(&f.ID, &f.Name, &f.Path, &f.Kind, &enabled, &createdAt); err != nil {
|
|
return nil, err
|
|
}
|
|
f.Enabled = enabled != 0
|
|
f.CreatedAt, _ = parseTime(createdAt)
|
|
out = append(out, &f)
|
|
}
|
|
return out, rows.Err()
|
|
}
|
|
|
|
func SetMusicFolderEnabled(db *sql.DB, id string, enabled bool) error {
|
|
_, err := db.Exec(`UPDATE music_folders SET enabled = ? WHERE id = ?`, boolInt(enabled), id)
|
|
return err
|
|
}
|
|
|
|
func DeleteMusicFolder(db *sql.DB, id string) error {
|
|
_, err := db.Exec(`DELETE FROM music_folders WHERE id = ?`, id)
|
|
return err
|
|
}
|