added background scan
This commit is contained in:
parent
3707111538
commit
9452aaf8d4
0
docker-compose.yml
Normal file
0
docker-compose.yml
Normal file
15
go.mod
Normal file
15
go.mod
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
module git.m3d.pw/majomi/mmm
|
||||||
|
|
||||||
|
go 1.22.4
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/dhowden/tag v0.0.0-20240417053706-3d75831295e8
|
||||||
|
github.com/jackc/pgx/v5 v5.6.0
|
||||||
|
)
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/jackc/pgpassfile v1.0.0 // indirect
|
||||||
|
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect
|
||||||
|
golang.org/x/crypto v0.17.0 // indirect
|
||||||
|
golang.org/x/text v0.14.0 // indirect
|
||||||
|
)
|
30
go.sum
Normal file
30
go.sum
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
|
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||||
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
|
github.com/dhowden/tag v0.0.0-20240417053706-3d75831295e8 h1:OtSeLS5y0Uy01jaKK4mA/WVIYtpzVm63vLVAPzJXigg=
|
||||||
|
github.com/dhowden/tag v0.0.0-20240417053706-3d75831295e8/go.mod h1:apkPC/CR3s48O2D7Y++n1XWEpgPNNCjXYga3PPbJe2E=
|
||||||
|
github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=
|
||||||
|
github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
|
||||||
|
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk=
|
||||||
|
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM=
|
||||||
|
github.com/jackc/pgx/v5 v5.6.0 h1:SWJzexBzPL5jb0GEsrPMLIsi/3jOo7RHlzTjcAeDrPY=
|
||||||
|
github.com/jackc/pgx/v5 v5.6.0/go.mod h1:DNZ/vlrUnhWCoFGxHAG8U2ljioxukquj7utPDgtQdTw=
|
||||||
|
github.com/jackc/puddle/v2 v2.2.1 h1:RhxXJtFG022u4ibrCSMSiu5aOq1i77R3OHKNJj77OAk=
|
||||||
|
github.com/jackc/puddle/v2 v2.2.1/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4=
|
||||||
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
|
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||||
|
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
|
github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk=
|
||||||
|
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
||||||
|
golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k=
|
||||||
|
golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
|
||||||
|
golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o=
|
||||||
|
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
|
||||||
|
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
||||||
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
|
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
|
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||||
|
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
32
internal/db/db.go
Normal file
32
internal/db/db.go
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
// Code generated by sqlc. DO NOT EDIT.
|
||||||
|
// versions:
|
||||||
|
// sqlc v1.26.0
|
||||||
|
|
||||||
|
package db
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/jackc/pgx/v5"
|
||||||
|
"github.com/jackc/pgx/v5/pgconn"
|
||||||
|
)
|
||||||
|
|
||||||
|
type DBTX interface {
|
||||||
|
Exec(context.Context, string, ...interface{}) (pgconn.CommandTag, error)
|
||||||
|
Query(context.Context, string, ...interface{}) (pgx.Rows, error)
|
||||||
|
QueryRow(context.Context, string, ...interface{}) pgx.Row
|
||||||
|
}
|
||||||
|
|
||||||
|
func New(db DBTX) *Queries {
|
||||||
|
return &Queries{db: db}
|
||||||
|
}
|
||||||
|
|
||||||
|
type Queries struct {
|
||||||
|
db DBTX
|
||||||
|
}
|
||||||
|
|
||||||
|
func (q *Queries) WithTx(tx pgx.Tx) *Queries {
|
||||||
|
return &Queries{
|
||||||
|
db: tx,
|
||||||
|
}
|
||||||
|
}
|
0
internal/db/migrations/20240630143204_init.down.sql
Normal file
0
internal/db/migrations/20240630143204_init.down.sql
Normal file
26
internal/db/migrations/20240630143204_init.up.sql
Normal file
26
internal/db/migrations/20240630143204_init.up.sql
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
CREATE TABLE IF NOT EXISTS track
|
||||||
|
(
|
||||||
|
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
||||||
|
path TEXT UNIQUE NOT NULL,
|
||||||
|
album_artist TEXT NOT NULL,
|
||||||
|
title TEXT NOT NULL,
|
||||||
|
album TEXT NOT NULL,
|
||||||
|
disc INTEGER[][],
|
||||||
|
year INTEGER NOT NULL,
|
||||||
|
artist TEXT NOT NULL,
|
||||||
|
genre TEXT NOT NULL,
|
||||||
|
lyrics TEXT NOT NULL,
|
||||||
|
composer TEXT NOT NULL
|
||||||
|
);
|
||||||
|
--
|
||||||
|
-- CREATE TABLE IF NOT EXISTS album
|
||||||
|
-- (
|
||||||
|
-- id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
||||||
|
-- path TEXT UNIQUE
|
||||||
|
-- );
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS artist
|
||||||
|
(
|
||||||
|
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
||||||
|
name TEXT UNIQUE
|
||||||
|
);
|
33
internal/db/models.go
Normal file
33
internal/db/models.go
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
// Code generated by sqlc. DO NOT EDIT.
|
||||||
|
// versions:
|
||||||
|
// sqlc v1.26.0
|
||||||
|
|
||||||
|
package db
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/jackc/pgx/v5/pgtype"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Album struct {
|
||||||
|
ID int64
|
||||||
|
Path pgtype.Text
|
||||||
|
}
|
||||||
|
|
||||||
|
type Artist struct {
|
||||||
|
ID int64
|
||||||
|
Name pgtype.Text
|
||||||
|
}
|
||||||
|
|
||||||
|
type Track struct {
|
||||||
|
ID int64
|
||||||
|
Path string
|
||||||
|
AlbumArtist string
|
||||||
|
Title string
|
||||||
|
Album string
|
||||||
|
Disc [][]int32
|
||||||
|
Year int32
|
||||||
|
Artist string
|
||||||
|
Genre string
|
||||||
|
Lyrics string
|
||||||
|
Composer string
|
||||||
|
}
|
18
internal/db/querier.go
Normal file
18
internal/db/querier.go
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
// Code generated by sqlc. DO NOT EDIT.
|
||||||
|
// versions:
|
||||||
|
// sqlc v1.26.0
|
||||||
|
|
||||||
|
package db
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Querier interface {
|
||||||
|
AddTrack(ctx context.Context, arg AddTrackParams) (Track, error)
|
||||||
|
Exists(ctx context.Context, path string) (bool, error)
|
||||||
|
GetAlbumTracks(ctx context.Context, album string) ([]Track, error)
|
||||||
|
GetTrackByID(ctx context.Context, id int64) (Track, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ Querier = (*Queries)(nil)
|
25
internal/db/queries/track.sql
Normal file
25
internal/db/queries/track.sql
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
-- name: GetTrackByID :one
|
||||||
|
SELECT *
|
||||||
|
FROM track
|
||||||
|
WHERE id = $1
|
||||||
|
LIMIT 1;
|
||||||
|
|
||||||
|
-- name: AddTrack :one
|
||||||
|
INSERT INTO track (path, album_artist, title, album, disc, year, artist, genre, lyrics, composer)
|
||||||
|
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)
|
||||||
|
ON CONFLICT DO NOTHING
|
||||||
|
RETURNING *;
|
||||||
|
|
||||||
|
INSERT INTO artist(name)
|
||||||
|
VALUES ($1);
|
||||||
|
|
||||||
|
-- name: GetAlbumTracks :many
|
||||||
|
SELECT *
|
||||||
|
FROM track
|
||||||
|
WHERE album = $1
|
||||||
|
ORDER BY track.title;
|
||||||
|
|
||||||
|
-- name: Exists :one
|
||||||
|
SELECT EXISTS (SELECT 1
|
||||||
|
FROM track
|
||||||
|
WHERE path = $1) as exists;
|
138
internal/db/track.sql.go
Normal file
138
internal/db/track.sql.go
Normal file
@ -0,0 +1,138 @@
|
|||||||
|
// Code generated by sqlc. DO NOT EDIT.
|
||||||
|
// versions:
|
||||||
|
// sqlc v1.26.0
|
||||||
|
// source: track.sql
|
||||||
|
|
||||||
|
package db
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
)
|
||||||
|
|
||||||
|
const addTrack = `-- name: AddTrack :one
|
||||||
|
INSERT INTO track (path, album_artist, title, album, disc, year, artist, genre, lyrics, composer)
|
||||||
|
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)
|
||||||
|
ON CONFLICT DO NOTHING
|
||||||
|
RETURNING id, path, album_artist, title, album, disc, year, artist, genre, lyrics, composer
|
||||||
|
`
|
||||||
|
|
||||||
|
type AddTrackParams struct {
|
||||||
|
Path string
|
||||||
|
AlbumArtist string
|
||||||
|
Title string
|
||||||
|
Album string
|
||||||
|
Disc [][]int32
|
||||||
|
Year int32
|
||||||
|
Artist string
|
||||||
|
Genre string
|
||||||
|
Lyrics string
|
||||||
|
Composer string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (q *Queries) AddTrack(ctx context.Context, arg AddTrackParams) (Track, error) {
|
||||||
|
row := q.db.QueryRow(ctx, addTrack,
|
||||||
|
arg.Path,
|
||||||
|
arg.AlbumArtist,
|
||||||
|
arg.Title,
|
||||||
|
arg.Album,
|
||||||
|
arg.Disc,
|
||||||
|
arg.Year,
|
||||||
|
arg.Artist,
|
||||||
|
arg.Genre,
|
||||||
|
arg.Lyrics,
|
||||||
|
arg.Composer,
|
||||||
|
)
|
||||||
|
var i Track
|
||||||
|
err := row.Scan(
|
||||||
|
&i.ID,
|
||||||
|
&i.Path,
|
||||||
|
&i.AlbumArtist,
|
||||||
|
&i.Title,
|
||||||
|
&i.Album,
|
||||||
|
&i.Disc,
|
||||||
|
&i.Year,
|
||||||
|
&i.Artist,
|
||||||
|
&i.Genre,
|
||||||
|
&i.Lyrics,
|
||||||
|
&i.Composer,
|
||||||
|
)
|
||||||
|
return i, err
|
||||||
|
}
|
||||||
|
|
||||||
|
const exists = `-- name: Exists :one
|
||||||
|
SELECT EXISTS (SELECT 1
|
||||||
|
FROM track
|
||||||
|
WHERE path = $1) as exists
|
||||||
|
`
|
||||||
|
|
||||||
|
func (q *Queries) Exists(ctx context.Context, path string) (bool, error) {
|
||||||
|
row := q.db.QueryRow(ctx, exists, path)
|
||||||
|
var exists bool
|
||||||
|
err := row.Scan(&exists)
|
||||||
|
return exists, err
|
||||||
|
}
|
||||||
|
|
||||||
|
const getAlbumTracks = `-- name: GetAlbumTracks :many
|
||||||
|
SELECT id, path, album_artist, title, album, disc, year, artist, genre, lyrics, composer
|
||||||
|
FROM track
|
||||||
|
WHERE album = $1
|
||||||
|
ORDER BY track.title
|
||||||
|
`
|
||||||
|
|
||||||
|
func (q *Queries) GetAlbumTracks(ctx context.Context, album string) ([]Track, error) {
|
||||||
|
rows, err := q.db.Query(ctx, getAlbumTracks, album)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer rows.Close()
|
||||||
|
var items []Track
|
||||||
|
for rows.Next() {
|
||||||
|
var i Track
|
||||||
|
if err := rows.Scan(
|
||||||
|
&i.ID,
|
||||||
|
&i.Path,
|
||||||
|
&i.AlbumArtist,
|
||||||
|
&i.Title,
|
||||||
|
&i.Album,
|
||||||
|
&i.Disc,
|
||||||
|
&i.Year,
|
||||||
|
&i.Artist,
|
||||||
|
&i.Genre,
|
||||||
|
&i.Lyrics,
|
||||||
|
&i.Composer,
|
||||||
|
); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
items = append(items, i)
|
||||||
|
}
|
||||||
|
if err := rows.Err(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return items, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
const getTrackByID = `-- name: GetTrackByID :one
|
||||||
|
SELECT id, path, album_artist, title, album, disc, year, artist, genre, lyrics, composer
|
||||||
|
FROM track
|
||||||
|
WHERE id = $1
|
||||||
|
LIMIT 1
|
||||||
|
`
|
||||||
|
|
||||||
|
func (q *Queries) GetTrackByID(ctx context.Context, id int64) (Track, error) {
|
||||||
|
row := q.db.QueryRow(ctx, getTrackByID, id)
|
||||||
|
var i Track
|
||||||
|
err := row.Scan(
|
||||||
|
&i.ID,
|
||||||
|
&i.Path,
|
||||||
|
&i.AlbumArtist,
|
||||||
|
&i.Title,
|
||||||
|
&i.Album,
|
||||||
|
&i.Disc,
|
||||||
|
&i.Year,
|
||||||
|
&i.Artist,
|
||||||
|
&i.Genre,
|
||||||
|
&i.Lyrics,
|
||||||
|
&i.Composer,
|
||||||
|
)
|
||||||
|
return i, err
|
||||||
|
}
|
11
sqlc.yaml
Normal file
11
sqlc.yaml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
version: "2"
|
||||||
|
sql:
|
||||||
|
- engine: "postgresql"
|
||||||
|
queries: "internal/db/queries"
|
||||||
|
schema: "internal/db/migrations"
|
||||||
|
gen:
|
||||||
|
go:
|
||||||
|
package: "db"
|
||||||
|
out: "internal/db"
|
||||||
|
sql_package: "pgx/v5"
|
||||||
|
emit_interface: true
|
Loading…
Reference in New Issue
Block a user