From 2b368a71ee0a713a3bcb524ccfa4634e7dff3d6f Mon Sep 17 00:00:00 2001 From: Logan Jones Date: Fri, 11 Apr 2025 21:26:41 -0500 Subject: [PATCH 01/10] started schema --- backend/database/sql/DB_SCHEMA.md | 11 +++++++++++ backend/database/sql/schemas/artists.sql | 0 backend/database/sql/schemas/audio_files.sql | 0 backend/database/sql/schemas/recordings.sql | 0 backend/database/sql/schemas/release_groups.sql | 0 5 files changed, 11 insertions(+) create mode 100644 backend/database/sql/DB_SCHEMA.md create mode 100644 backend/database/sql/schemas/artists.sql create mode 100644 backend/database/sql/schemas/audio_files.sql create mode 100644 backend/database/sql/schemas/recordings.sql create mode 100644 backend/database/sql/schemas/release_groups.sql diff --git a/backend/database/sql/DB_SCHEMA.md b/backend/database/sql/DB_SCHEMA.md new file mode 100644 index 0000000..bd47024 --- /dev/null +++ b/backend/database/sql/DB_SCHEMA.md @@ -0,0 +1,11 @@ +# YellowJacket Database Schema + +## Tables + +### `audio_files` + +References to all audio files that YellowJacket is aware of + +#### Fields +- UUID (PK) +- diff --git a/backend/database/sql/schemas/artists.sql b/backend/database/sql/schemas/artists.sql new file mode 100644 index 0000000..e69de29 diff --git a/backend/database/sql/schemas/audio_files.sql b/backend/database/sql/schemas/audio_files.sql new file mode 100644 index 0000000..e69de29 diff --git a/backend/database/sql/schemas/recordings.sql b/backend/database/sql/schemas/recordings.sql new file mode 100644 index 0000000..e69de29 diff --git a/backend/database/sql/schemas/release_groups.sql b/backend/database/sql/schemas/release_groups.sql new file mode 100644 index 0000000..e69de29 From 3c193209b99e3470add004139e897649b33618ea Mon Sep 17 00:00:00 2001 From: Logan Jones Date: Sat, 12 Apr 2025 23:25:19 -0500 Subject: [PATCH 02/10] db schemas beginning --- .gitignore | 1 + backend/database/sql/DB_SCHEMA.md | 11 ----------- backend/database/sql/schemas/artists.sql | 4 ++++ backend/database/sql/schemas/audio_files.sql | 6 ++++++ backend/database/sql/schemas/file_types.sql | 4 ++++ backend/database/sql/schemas/recordings.sql | 5 +++++ backend/database/sql/schemas/release_groups.sql | 4 ++++ 7 files changed, 24 insertions(+), 11 deletions(-) delete mode 100644 backend/database/sql/DB_SCHEMA.md create mode 100644 backend/database/sql/schemas/file_types.sql diff --git a/.gitignore b/.gitignore index 3a5fbab..a197d70 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ frontend/dist node_modules build test_data +test.db diff --git a/backend/database/sql/DB_SCHEMA.md b/backend/database/sql/DB_SCHEMA.md deleted file mode 100644 index bd47024..0000000 --- a/backend/database/sql/DB_SCHEMA.md +++ /dev/null @@ -1,11 +0,0 @@ -# YellowJacket Database Schema - -## Tables - -### `audio_files` - -References to all audio files that YellowJacket is aware of - -#### Fields -- UUID (PK) -- diff --git a/backend/database/sql/schemas/artists.sql b/backend/database/sql/schemas/artists.sql index e69de29..04948f9 100644 --- a/backend/database/sql/schemas/artists.sql +++ b/backend/database/sql/schemas/artists.sql @@ -0,0 +1,4 @@ +CREATE TABLE artists ( + id INTEGER PRIMARY KEY, + name text NOT NULL +); diff --git a/backend/database/sql/schemas/audio_files.sql b/backend/database/sql/schemas/audio_files.sql index e69de29..aefa2bd 100644 --- a/backend/database/sql/schemas/audio_files.sql +++ b/backend/database/sql/schemas/audio_files.sql @@ -0,0 +1,6 @@ +CREATE TABLE audio_files ( + id uuid PRIMARY KEY, + file_path text NOT NULL, + file_type text NOT NULL, + length_seconds int NOT NULL +); diff --git a/backend/database/sql/schemas/file_types.sql b/backend/database/sql/schemas/file_types.sql new file mode 100644 index 0000000..b303c72 --- /dev/null +++ b/backend/database/sql/schemas/file_types.sql @@ -0,0 +1,4 @@ +CREATE TABLE file_types ( + id INTEGER PRIMARY KEY, + extension text NOT NULL +); diff --git a/backend/database/sql/schemas/recordings.sql b/backend/database/sql/schemas/recordings.sql index e69de29..a4e222a 100644 --- a/backend/database/sql/schemas/recordings.sql +++ b/backend/database/sql/schemas/recordings.sql @@ -0,0 +1,5 @@ +CREATE TABLE recordings ( + id INTEGER PRIMARY KEY, + name text NOT NULL +); + diff --git a/backend/database/sql/schemas/release_groups.sql b/backend/database/sql/schemas/release_groups.sql index e69de29..ae6f6b7 100644 --- a/backend/database/sql/schemas/release_groups.sql +++ b/backend/database/sql/schemas/release_groups.sql @@ -0,0 +1,4 @@ +CREATE TABLE release_groups ( + id INTEGER PRIMARY KEY, + name text NOT NULL +); From 0bbd1b2bcae67da755c392710c078334ca3d2569 Mon Sep 17 00:00:00 2001 From: Logan Jones Date: Sun, 13 Apr 2025 18:15:22 -0500 Subject: [PATCH 03/10] first db schema gen --- Makefile | 3 ++ backend/database/database.go | 2 + backend/database/sql/queries/recordings.sql | 3 ++ .../database/sql/schemas/artist_credit.sql | 4 ++ .../sql/schemas/artist_credit_artist.sql | 5 ++ backend/database/sql/schemas/artists.sql | 2 +- backend/database/sql/schemas/audio_files.sql | 9 ++-- backend/database/sql/schemas/cover_art.sql | 6 +++ backend/database/sql/schemas/file_types.sql | 2 +- backend/database/sql/schemas/recordings.sql | 5 +- .../sql/schemas/release_group_recordings.sql | 6 +++ .../database/sql/schemas/release_groups.sql | 5 +- backend/database/sql/sqlcgen/db.go | 31 ++++++++++++ backend/database/sql/sqlcgen/models.go | 50 +++++++++++++++++++ .../database/sql/sqlcgen/recordings.sql.go | 22 ++++++++ backend/database/sqlc.yaml | 4 +- 16 files changed, 147 insertions(+), 12 deletions(-) create mode 100644 backend/database/sql/queries/recordings.sql create mode 100644 backend/database/sql/schemas/artist_credit.sql create mode 100644 backend/database/sql/schemas/artist_credit_artist.sql create mode 100644 backend/database/sql/schemas/cover_art.sql create mode 100644 backend/database/sql/schemas/release_group_recordings.sql create mode 100644 backend/database/sql/sqlcgen/db.go create mode 100644 backend/database/sql/sqlcgen/models.go create mode 100644 backend/database/sql/sqlcgen/recordings.sql.go diff --git a/Makefile b/Makefile index 51f4a62..8bbe474 100644 --- a/Makefile +++ b/Makefile @@ -3,3 +3,6 @@ dev: build: wails build + +generate: + go generate ./... diff --git a/backend/database/database.go b/backend/database/database.go index 02c43f3..90e8d75 100644 --- a/backend/database/database.go +++ b/backend/database/database.go @@ -1,5 +1,7 @@ package database +//go:generate sqlc generate + type DB struct{} func NewDB() (*DB, error) { diff --git a/backend/database/sql/queries/recordings.sql b/backend/database/sql/queries/recordings.sql new file mode 100644 index 0000000..f39da8d --- /dev/null +++ b/backend/database/sql/queries/recordings.sql @@ -0,0 +1,3 @@ +-- name: GetAuthor :one +SELECT * FROM recordings +WHERE id = ? LIMIT 1; diff --git a/backend/database/sql/schemas/artist_credit.sql b/backend/database/sql/schemas/artist_credit.sql new file mode 100644 index 0000000..16203e2 --- /dev/null +++ b/backend/database/sql/schemas/artist_credit.sql @@ -0,0 +1,4 @@ +CREATE TABLE artist_credit ( + id int PRIMARY KEY, + text string NOT NULL +); diff --git a/backend/database/sql/schemas/artist_credit_artist.sql b/backend/database/sql/schemas/artist_credit_artist.sql new file mode 100644 index 0000000..a1d6c8b --- /dev/null +++ b/backend/database/sql/schemas/artist_credit_artist.sql @@ -0,0 +1,5 @@ +CREATE TABLE artist_credit_artist ( + id int PRIMARY KEY, + FOREIGN KEY(artist_id) REFERENCES artists(id), + FOREIGN KEY(credit_id) REFERENCES artist_credit(id) +); diff --git a/backend/database/sql/schemas/artists.sql b/backend/database/sql/schemas/artists.sql index 04948f9..a905903 100644 --- a/backend/database/sql/schemas/artists.sql +++ b/backend/database/sql/schemas/artists.sql @@ -1,4 +1,4 @@ CREATE TABLE artists ( - id INTEGER PRIMARY KEY, + id int PRIMARY KEY, name text NOT NULL ); diff --git a/backend/database/sql/schemas/audio_files.sql b/backend/database/sql/schemas/audio_files.sql index aefa2bd..91a21fd 100644 --- a/backend/database/sql/schemas/audio_files.sql +++ b/backend/database/sql/schemas/audio_files.sql @@ -1,6 +1,7 @@ CREATE TABLE audio_files ( - id uuid PRIMARY KEY, - file_path text NOT NULL, - file_type text NOT NULL, - length_seconds int NOT NULL + id int PRIMARY KEY, + file_path text NOT NULL UNIQUE, + length_milliseconds int NOT NULL, + FOREIGN KEY(file_type_id) REFERENCES file_types(id), + FOREIGN KEY(recording_id) REFERENCES recordings(id) ); diff --git a/backend/database/sql/schemas/cover_art.sql b/backend/database/sql/schemas/cover_art.sql new file mode 100644 index 0000000..e4e8540 --- /dev/null +++ b/backend/database/sql/schemas/cover_art.sql @@ -0,0 +1,6 @@ +CREATE TABLE cover_art ( + id int PRIMARY KEY, + is_embedded bool NOT NULL DEFAULT(false), + file_path text NOT NULL, + FOREIGN KEY(file_type_id) REFERENCES file_types(id) +); diff --git a/backend/database/sql/schemas/file_types.sql b/backend/database/sql/schemas/file_types.sql index b303c72..135f528 100644 --- a/backend/database/sql/schemas/file_types.sql +++ b/backend/database/sql/schemas/file_types.sql @@ -1,4 +1,4 @@ CREATE TABLE file_types ( id INTEGER PRIMARY KEY, - extension text NOT NULL + extension text NOT NULL UNIQUE ); diff --git a/backend/database/sql/schemas/recordings.sql b/backend/database/sql/schemas/recordings.sql index a4e222a..b13ca7f 100644 --- a/backend/database/sql/schemas/recordings.sql +++ b/backend/database/sql/schemas/recordings.sql @@ -1,5 +1,6 @@ CREATE TABLE recordings ( - id INTEGER PRIMARY KEY, - name text NOT NULL + id int PRIMARY KEY, + name text NOT NULL, + FOREIGN KEY(artist_credit_id) REFERENCES artist_credit(id) ); diff --git a/backend/database/sql/schemas/release_group_recordings.sql b/backend/database/sql/schemas/release_group_recordings.sql new file mode 100644 index 0000000..5064e17 --- /dev/null +++ b/backend/database/sql/schemas/release_group_recordings.sql @@ -0,0 +1,6 @@ +CREATE TABLE release_group_recordings ( + id int PRIMARY KEY, + FOREIGN KEY(release_group_id) REFERENCES release_groups(id), + FOREIGN KEY(recording_id) REFERENCES recordings(id) +); + diff --git a/backend/database/sql/schemas/release_groups.sql b/backend/database/sql/schemas/release_groups.sql index ae6f6b7..36b8e67 100644 --- a/backend/database/sql/schemas/release_groups.sql +++ b/backend/database/sql/schemas/release_groups.sql @@ -1,4 +1,5 @@ CREATE TABLE release_groups ( - id INTEGER PRIMARY KEY, - name text NOT NULL + id int PRIMARY KEY, + name text NOT NULL, + FOREIGN KEY(cover_art_id) REFERENCES cover_art(id) ); diff --git a/backend/database/sql/sqlcgen/db.go b/backend/database/sql/sqlcgen/db.go new file mode 100644 index 0000000..b72fec4 --- /dev/null +++ b/backend/database/sql/sqlcgen/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.28.0 + +package sqlcgen + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/backend/database/sql/sqlcgen/models.go b/backend/database/sql/sqlcgen/models.go new file mode 100644 index 0000000..066687b --- /dev/null +++ b/backend/database/sql/sqlcgen/models.go @@ -0,0 +1,50 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.28.0 + +package sqlcgen + +type Artist struct { + ID int64 + Name string +} + +type ArtistCredit struct { + ID int64 + Text interface{} +} + +type ArtistCreditArtist struct { + ID int64 +} + +type AudioFile struct { + ID int64 + FilePath string + LengthMilliseconds int64 +} + +type CoverArt struct { + ID int64 + IsEmbedded bool + FilePath string +} + +type FileType struct { + ID int64 + Extension string +} + +type Recording struct { + ID int64 + Name string +} + +type ReleaseGroup struct { + ID int64 + Name string +} + +type ReleaseGroupRecording struct { + ID int64 +} diff --git a/backend/database/sql/sqlcgen/recordings.sql.go b/backend/database/sql/sqlcgen/recordings.sql.go new file mode 100644 index 0000000..cacc377 --- /dev/null +++ b/backend/database/sql/sqlcgen/recordings.sql.go @@ -0,0 +1,22 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.28.0 +// source: recordings.sql + +package sqlcgen + +import ( + "context" +) + +const getAuthor = `-- name: GetAuthor :one +SELECT id, name FROM recordings +WHERE id = ? LIMIT 1 +` + +func (q *Queries) GetAuthor(ctx context.Context, id int64) (Recording, error) { + row := q.db.QueryRowContext(ctx, getAuthor, id) + var i Recording + err := row.Scan(&i.ID, &i.Name) + return i, err +} diff --git a/backend/database/sqlc.yaml b/backend/database/sqlc.yaml index bb168b2..7baeb76 100644 --- a/backend/database/sqlc.yaml +++ b/backend/database/sqlc.yaml @@ -6,5 +6,5 @@ sql: schema: "./sql/schemas" gen: go: - package: "sql" - out: "sql" + package: "sqlcgen" + out: "./sql/sqlcgen" From a77ff4e8a17ae6c65aca12020aa932a2583c31ac Mon Sep 17 00:00:00 2001 From: Logan Jones Date: Mon, 14 Apr 2025 16:49:25 -0500 Subject: [PATCH 04/10] added sqlc generation with go generate and sqlite driver --- backend/database/database.go | 23 +++++++++++++++---- go.mod | 14 ++++++++++-- go.sum | 44 ++++++++++++++++++++++++++++++++++-- 3 files changed, 73 insertions(+), 8 deletions(-) diff --git a/backend/database/database.go b/backend/database/database.go index 90e8d75..0ac7dd6 100644 --- a/backend/database/database.go +++ b/backend/database/database.go @@ -1,9 +1,24 @@ package database -//go:generate sqlc generate +import ( + "database/sql" + "fmt" -type DB struct{} + _ "modernc.org/sqlite" +) -func NewDB() (*DB, error) { - return &DB{}, nil +//go:generate sqlc vet && sqlc generate + +type DB struct{ + db *sql.DB +} + +func NewDB(sqliteDBFilePath string) (*DB, error) { + db, err := sql.Open("sqlite", ":memory:") + if err != nil { + return nil, fmt.Errorf("could not connect to sqlite database: %w", err) + } + return &DB{ + db: db, + }, nil } diff --git a/go.mod b/go.mod index 711baa3..f797ce8 100644 --- a/go.mod +++ b/go.mod @@ -1,15 +1,19 @@ module yellowjacket -go 1.23 +go 1.23.0 + +toolchain go1.24.2 require ( github.com/BurntSushi/toml v1.5.0 github.com/gopxl/beep v1.4.1 github.com/wailsapp/wails/v2 v2.10.1 + modernc.org/sqlite v1.37.0 ) require ( github.com/bep/debounce v1.2.1 // indirect + github.com/dustin/go-humanize v1.0.1 // indirect github.com/ebitengine/oto/v3 v3.1.0 // indirect github.com/ebitengine/purego v0.7.1 // indirect github.com/go-ole/go-ole v1.3.0 // indirect @@ -25,8 +29,10 @@ require ( github.com/leaanthony/u v1.1.1 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect + github.com/ncruces/go-strftime v0.1.9 // indirect github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect github.com/pkg/errors v0.9.1 // indirect + github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/rivo/uniseg v0.4.7 // indirect github.com/samber/lo v1.49.1 // indirect github.com/tkrajina/go-reflector v0.5.8 // indirect @@ -35,9 +41,13 @@ require ( github.com/wailsapp/go-webview2 v1.0.19 // indirect github.com/wailsapp/mimetype v1.4.1 // indirect golang.org/x/crypto v0.33.0 // indirect + golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 // indirect golang.org/x/net v0.35.0 // indirect - golang.org/x/sys v0.30.0 // indirect + golang.org/x/sys v0.31.0 // indirect golang.org/x/text v0.22.0 // indirect + modernc.org/libc v1.62.1 // indirect + modernc.org/mathutil v1.7.1 // indirect + modernc.org/memory v1.9.1 // indirect ) // replace github.com/wailsapp/wails/v2 v2.10.1 => /home/logan/go/pkg/mod diff --git a/go.sum b/go.sum index 5c8b0f6..2fa6f0a 100644 --- a/go.sum +++ b/go.sum @@ -4,6 +4,8 @@ github.com/bep/debounce v1.2.1 h1:v67fRdBA9UQu2NhLFXrSg0Brw7CexQekrBwDMM8bzeY= github.com/bep/debounce v1.2.1/go.mod h1:H8yggRPQKLUhUoqrJC1bO2xNya7vanpDl7xR3ISbCJ0= 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/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= +github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/ebitengine/oto/v3 v3.1.0 h1:9tChG6rizyeR2w3vsygTTTVVJ9QMMyu00m2yBOCch6U= github.com/ebitengine/oto/v3 v3.1.0/go.mod h1:IK1QTnlfZK2GIB6ziyECm433hAdTaPpOsGMLhEyEGTg= github.com/ebitengine/purego v0.7.1 h1:6/55d26lG3o9VCZX8lping+bZcmShseiqlh2bnUDiPA= @@ -12,6 +14,8 @@ github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e h1:ijClszYn+mADRFY17kjQEVQ1XRhq2/JR1M3sGqeJoxs= +github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e/go.mod h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gopxl/beep v1.4.1 h1:WqNs9RsDAhG9M3khMyc1FaVY50dTdxG/6S6a3qsUHqE= @@ -43,12 +47,16 @@ github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovk github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4= +github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= 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/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= @@ -70,9 +78,15 @@ github.com/wailsapp/wails/v2 v2.10.1 h1:QWHvWMXII2nI/nXz77gpPG8P3ehl6zKe+u4su5BW github.com/wailsapp/wails/v2 v2.10.1/go.mod h1:zrebnFV6MQf9kx8HI4iAv63vsR5v67oS7GTEZ7Pz1TY= golang.org/x/crypto v0.33.0 h1:IOBPskki6Lysi0lo9qQvbxiQ+FvsCC/YWOecCHAixus= golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M= +golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 h1:nDVHiLt8aIbd/VzvPWN6kSOPE7+F/fNFDSXLVYkE/Iw= +golang.org/x/exp v0.0.0-20250305212735-054e65f0b394/go.mod h1:sIifuuw/Yco/y6yb6+bDNfyeQ/MdPUy/hKEMYQV17cM= +golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU= +golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= golang.org/x/net v0.0.0-20210505024714-0287a6fb4125/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8= golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk= +golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw= +golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20200810151505-1b9f1253b3ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -80,12 +94,38 @@ golang.org/x/sys v0.0.0-20220712014510-0a85c31ab51e/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= -golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= +golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.31.0 h1:0EedkvKDbh+qistFTd0Bcwe/YLh4vHwWEkiI0toFIBU= +golang.org/x/tools v0.31.0/go.mod h1:naFTU+Cev749tSJRXJlna0T3WxKvb1kWEx15xA4SdmQ= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +modernc.org/cc/v4 v4.25.2 h1:T2oH7sZdGvTaie0BRNFbIYsabzCxUQg8nLqCdQ2i0ic= +modernc.org/cc/v4 v4.25.2/go.mod h1:uVtb5OGqUKpoLWhqwNQo/8LwvoiEBLvZXIQ/SmO6mL0= +modernc.org/ccgo/v4 v4.25.1 h1:TFSzPrAGmDsdnhT9X2UrcPMI3N/mJ9/X9ykKXwLhDsU= +modernc.org/ccgo/v4 v4.25.1/go.mod h1:njjuAYiPflywOOrm3B7kCB444ONP5pAVr8PIEoE0uDw= +modernc.org/fileutil v1.3.0 h1:gQ5SIzK3H9kdfai/5x41oQiKValumqNTDXMvKo62HvE= +modernc.org/fileutil v1.3.0/go.mod h1:XatxS8fZi3pS8/hKG2GH/ArUogfxjpEKs3Ku3aK4JyQ= +modernc.org/gc/v2 v2.6.5 h1:nyqdV8q46KvTpZlsw66kWqwXRHdjIlJOhG6kxiV/9xI= +modernc.org/gc/v2 v2.6.5/go.mod h1:YgIahr1ypgfe7chRuJi2gD7DBQiKSLMPgBQe9oIiito= +modernc.org/libc v1.62.1 h1:s0+fv5E3FymN8eJVmnk0llBe6rOxCu/DEU+XygRbS8s= +modernc.org/libc v1.62.1/go.mod h1:iXhATfJQLjG3NWy56a6WVU73lWOcdYVxsvwCgoPljuo= +modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU= +modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg= +modernc.org/memory v1.9.1 h1:V/Z1solwAVmMW1yttq3nDdZPJqV1rM05Ccq6KMSZ34g= +modernc.org/memory v1.9.1/go.mod h1:/JP4VbVC+K5sU2wZi9bHoq2MAkCnrt2r98UGeSK7Mjw= +modernc.org/opt v0.1.4 h1:2kNGMRiUjrp4LcaPuLY2PzUfqM/w9N23quVwhKt5Qm8= +modernc.org/opt v0.1.4/go.mod h1:03fq9lsNfvkYSfxrfUhZCWPk1lm4cq4N+Bh//bEtgns= +modernc.org/sortutil v1.2.1 h1:+xyoGf15mM3NMlPDnFqrteY07klSFxLElE2PVuWIJ7w= +modernc.org/sortutil v1.2.1/go.mod h1:7ZI3a3REbai7gzCLcotuw9AC4VZVpYMjDzETGsSMqJE= +modernc.org/sqlite v1.37.0 h1:s1TMe7T3Q3ovQiK2Ouz4Jwh7dw4ZDqbebSDTlSJdfjI= +modernc.org/sqlite v1.37.0/go.mod h1:5YiWv+YviqGMuGw4V+PNplcyaJ5v+vQd7TQOgkACoJM= +modernc.org/strutil v1.2.1 h1:UneZBkQA+DX2Rp35KcM69cSsNES9ly8mQWD71HKlOA0= +modernc.org/strutil v1.2.1/go.mod h1:EHkiggD70koQxjVdSBM3JKM7k6L0FbGE5eymy9i3B9A= +modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= +modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= From faa25fe745d1f1efd86ec28b46bd1aa3164c6899 Mon Sep 17 00:00:00 2001 From: Logan Jones Date: Wed, 16 Apr 2025 11:53:14 -0500 Subject: [PATCH 05/10] i think these dependencies are needed --- go.mod | 5 +++++ go.sum | 8 ++++++++ 2 files changed, 13 insertions(+) diff --git a/go.mod b/go.mod index 9fc14f0..e9f0780 100644 --- a/go.mod +++ b/go.mod @@ -13,6 +13,7 @@ require ( require ( github.com/bep/debounce v1.2.1 // indirect + github.com/dustin/go-humanize v1.0.1 // indirect github.com/ebitengine/oto/v3 v3.3.3 // indirect github.com/ebitengine/purego v0.8.2 // indirect github.com/go-ole/go-ole v1.3.0 // indirect @@ -40,9 +41,13 @@ require ( github.com/wailsapp/go-webview2 v1.0.21 // indirect github.com/wailsapp/mimetype v1.4.1 // indirect golang.org/x/crypto v0.37.0 // indirect + golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 // indirect golang.org/x/net v0.39.0 // indirect golang.org/x/sys v0.32.0 // indirect golang.org/x/text v0.24.0 // indirect + modernc.org/libc v1.62.1 // indirect + modernc.org/mathutil v1.7.1 // indirect + modernc.org/memory v1.9.1 // indirect ) // replace github.com/wailsapp/wails/v2 v2.10.1 => /home/logan/go/pkg/mod diff --git a/go.sum b/go.sum index c623bba..d460ce5 100644 --- a/go.sum +++ b/go.sum @@ -4,6 +4,8 @@ github.com/bep/debounce v1.2.1 h1:v67fRdBA9UQu2NhLFXrSg0Brw7CexQekrBwDMM8bzeY= github.com/bep/debounce v1.2.1/go.mod h1:H8yggRPQKLUhUoqrJC1bO2xNya7vanpDl7xR3ISbCJ0= 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/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= +github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/ebitengine/oto/v3 v3.3.3 h1:m6RV69OqoXYSWCDsHXN9rc07aDuDstGHtait7HXSM7g= github.com/ebitengine/oto/v3 v3.3.3/go.mod h1:MZeb/lwoC4DCOdiTIxYezrURTw7EvK/yF863+tmBI+U= github.com/ebitengine/purego v0.8.2 h1:jPPGWs2sZ1UgOSgD2bClL0MJIqu58nOmIcBuXr62z1I= @@ -75,9 +77,15 @@ github.com/wailsapp/wails/v2 v2.10.1 h1:QWHvWMXII2nI/nXz77gpPG8P3ehl6zKe+u4su5BW github.com/wailsapp/wails/v2 v2.10.1/go.mod h1:zrebnFV6MQf9kx8HI4iAv63vsR5v67oS7GTEZ7Pz1TY= golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE= golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc= +golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 h1:nDVHiLt8aIbd/VzvPWN6kSOPE7+F/fNFDSXLVYkE/Iw= +golang.org/x/exp v0.0.0-20250305212735-054e65f0b394/go.mod h1:sIifuuw/Yco/y6yb6+bDNfyeQ/MdPUy/hKEMYQV17cM= +golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU= +golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= golang.org/x/net v0.0.0-20210505024714-0287a6fb4125/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.39.0 h1:ZCu7HMWDxpXpaiKdhzIfaltL9Lp31x/3fCP11bc6/fY= golang.org/x/net v0.39.0/go.mod h1:X7NRbYVEA+ewNkCNyJ513WmMdQ3BineSwVtN2zD/d+E= +golang.org/x/sync v0.13.0 h1:AauUjRAJ9OSnvULf/ARrrVywoJDy0YS2AwQ98I37610= +golang.org/x/sync v0.13.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20200810151505-1b9f1253b3ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= From c20cac40156805061d0ff02be00864c52cef74b3 Mon Sep 17 00:00:00 2001 From: Logan Jones Date: Wed, 16 Apr 2025 12:12:17 -0500 Subject: [PATCH 06/10] added IF NOT EXISTS to create and CRUD for each table --- backend/database/sql/queries/artist_credit.sql | 17 +++++++++++++++++ .../sql/queries/artist_credit_artists.sql | 17 +++++++++++++++++ backend/database/sql/queries/artists.sql | 17 +++++++++++++++++ backend/database/sql/queries/audio_files.sql | 17 +++++++++++++++++ backend/database/sql/queries/cover_art.sql | 17 +++++++++++++++++ backend/database/sql/queries/file_types.sql | 17 +++++++++++++++++ backend/database/sql/queries/recordings.sql | 18 ++++++++++++++++-- .../sql/queries/release_group_recordings.sql | 17 +++++++++++++++++ .../database/sql/queries/release_groups.sql | 17 +++++++++++++++++ backend/database/sql/schemas/artist_credit.sql | 2 +- .../sql/schemas/artist_credit_artist.sql | 2 +- backend/database/sql/schemas/artists.sql | 2 +- backend/database/sql/schemas/audio_files.sql | 2 +- backend/database/sql/schemas/cover_art.sql | 2 +- backend/database/sql/schemas/file_types.sql | 2 +- backend/database/sql/schemas/recordings.sql | 2 +- .../sql/schemas/release_group_recordings.sql | 2 +- .../database/sql/schemas/release_groups.sql | 2 +- 18 files changed, 161 insertions(+), 11 deletions(-) create mode 100644 backend/database/sql/queries/artist_credit.sql create mode 100644 backend/database/sql/queries/artist_credit_artists.sql create mode 100644 backend/database/sql/queries/artists.sql create mode 100644 backend/database/sql/queries/audio_files.sql create mode 100644 backend/database/sql/queries/cover_art.sql create mode 100644 backend/database/sql/queries/file_types.sql create mode 100644 backend/database/sql/queries/release_group_recordings.sql create mode 100644 backend/database/sql/queries/release_groups.sql diff --git a/backend/database/sql/queries/artist_credit.sql b/backend/database/sql/queries/artist_credit.sql new file mode 100644 index 0000000..d7049d8 --- /dev/null +++ b/backend/database/sql/queries/artist_credit.sql @@ -0,0 +1,17 @@ +-- name: CreateArtistCredit :one +INSERT INTO artist_credit (text) VALUES (?) +RETURNING *; + +-- name: GetArtistCredit :one +SELECT * FROM artist_credit +WHERE id = ? LIMIT 1; + +-- name: UpdateArtistCredit :exec +UPDATE artist_credit +SET text = ? +WHERE id =?; + +-- name: DeleteArtistCredit :exec +DELETE FROM artist_credit +WHERE id =?; + diff --git a/backend/database/sql/queries/artist_credit_artists.sql b/backend/database/sql/queries/artist_credit_artists.sql new file mode 100644 index 0000000..532f42a --- /dev/null +++ b/backend/database/sql/queries/artist_credit_artists.sql @@ -0,0 +1,17 @@ +-- name: CreateArtistCreditArtist :one +INSERT INTO artist_credit_artist (artist_id, credit_id) VALUES (?, ?) +RETURNING *; + +-- name: GetArtistCreditArtist :one +SELECT * FROM artist_credit_artist +WHERE id = ? LIMIT 1; + +-- name: UpdateArtistCreditArtist :exec +UPDATE artist_credit_artist +SET artist_id = ?, credit_id = ? +WHERE id =?; + +-- name: DeleteArtistCreditArtist :exec +DELETE FROM artist_credit_artist +WHERE id =?; + diff --git a/backend/database/sql/queries/artists.sql b/backend/database/sql/queries/artists.sql new file mode 100644 index 0000000..35d9003 --- /dev/null +++ b/backend/database/sql/queries/artists.sql @@ -0,0 +1,17 @@ +-- name: CreateArtist :one +INSERT INTO artists (name) VALUES (?) +RETURNING *; + +-- name: GetArtist :one +SELECT * FROM artists +WHERE id = ? LIMIT 1; + +-- name: UpdateArtist :exec +UPDATE artists +SET name = ? +WHERE id =?; + +-- name: DeleteArtist :exec +DELETE FROM artists +WHERE id =?; + diff --git a/backend/database/sql/queries/audio_files.sql b/backend/database/sql/queries/audio_files.sql new file mode 100644 index 0000000..4cf66c0 --- /dev/null +++ b/backend/database/sql/queries/audio_files.sql @@ -0,0 +1,17 @@ +-- name: CreateAudioFile :one +INSERT INTO audio_files (file_path, length_milliseconds, file_type_id, recording_id) VALUES (?, ?, ?, ?) +RETURNING *; + +-- name: GetAudioFile :one +SELECT * FROM audio_files +WHERE id = ? LIMIT 1; + +-- name: UpdateAudioFile :exec +UPDATE audio_files +SET file_path = ?, length_milliseconds = ?, file_type_id = ?, recording_id = ? +WHERE id =?; + +-- name: DeleteAudioFile :exec +DELETE FROM audio_files +WHERE id =?; + diff --git a/backend/database/sql/queries/cover_art.sql b/backend/database/sql/queries/cover_art.sql new file mode 100644 index 0000000..c69a445 --- /dev/null +++ b/backend/database/sql/queries/cover_art.sql @@ -0,0 +1,17 @@ +-- name: CreateCoverArt :one +INSERT INTO cover_art (is_embedded, file_path, file_type_id) VALUES (?, ?, ?) +RETURNING *; + +-- name: GetCoverArt :one +SELECT * FROM cover_art +WHERE id = ? LIMIT 1; + +-- name: UpdateCoverArt :exec +UPDATE cover_art +SET is_embedded = ?, file_path = ?, file_type_id = ? +WHERE id =?; + +-- name: DeleteCoverArt :exec +DELETE FROM cover_art +WHERE id =?; + diff --git a/backend/database/sql/queries/file_types.sql b/backend/database/sql/queries/file_types.sql new file mode 100644 index 0000000..285d9f3 --- /dev/null +++ b/backend/database/sql/queries/file_types.sql @@ -0,0 +1,17 @@ +-- name: CreateFileType :one +INSERT INTO file_types (extension) VALUES (?) +RETURNING *; + +-- name: GetFileType :one +SELECT * FROM file_types +WHERE id = ? LIMIT 1; + +-- name: UpdateFileType :exec +UPDATE file_types +SET extension = ? +WHERE id =?; + +-- name: DeleteFileType :exec +DELETE FROM file_types +WHERE id =?; + diff --git a/backend/database/sql/queries/recordings.sql b/backend/database/sql/queries/recordings.sql index f39da8d..be44d12 100644 --- a/backend/database/sql/queries/recordings.sql +++ b/backend/database/sql/queries/recordings.sql @@ -1,3 +1,17 @@ --- name: GetAuthor :one -SELECT * FROM recordings +-- name: CreateRecording :one +INSERT INTO recordings (name) VALUES (?) +RETURNING *; + +-- name: GetRecording :one +SELECT * FROM recordings WHERE id = ? LIMIT 1; + +-- name: UpdateRecording :exec +UPDATE recordings +SET name = ? +WHERE id =?; + +-- name: DeleteRecording :exec +DELETE FROM recordings +WHERE id =?; + diff --git a/backend/database/sql/queries/release_group_recordings.sql b/backend/database/sql/queries/release_group_recordings.sql new file mode 100644 index 0000000..fd02f46 --- /dev/null +++ b/backend/database/sql/queries/release_group_recordings.sql @@ -0,0 +1,17 @@ +-- name: CreateReleaseGroupRecording :one +INSERT INTO release_group_recordings (release_group_id, recording_id) VALUES (?,?) +RETURNING *; + +-- name: GetReleaseGroupRecording :one +SELECT * FROM release_group_recordings +WHERE id = ? LIMIT 1; + +-- name: UpdateReleaseGroupRecording :exec +UPDATE release_group_recordings +SET release_group_id = ? +WHERE id =?; + +-- name: DeleteReleaseGroupRecording :exec +DELETE FROM release_group_recordings +WHERE id =?; + diff --git a/backend/database/sql/queries/release_groups.sql b/backend/database/sql/queries/release_groups.sql new file mode 100644 index 0000000..9b0c1d8 --- /dev/null +++ b/backend/database/sql/queries/release_groups.sql @@ -0,0 +1,17 @@ +-- name: CreateReleaseGroup :one +INSERT INTO release_groups (name) VALUES (?) +RETURNING *; + +-- name: GetReleaseGroup :one +SELECT * FROM release_groups +WHERE id = ? LIMIT 1; + +-- name: UpdateReleaseGroup :exec +UPDATE release_groups +SET name = ? +WHERE id =?; + +-- name: DeleteReleaseGroup :exec +DELETE FROM release_groups +WHERE id =?; + diff --git a/backend/database/sql/schemas/artist_credit.sql b/backend/database/sql/schemas/artist_credit.sql index 16203e2..70428e5 100644 --- a/backend/database/sql/schemas/artist_credit.sql +++ b/backend/database/sql/schemas/artist_credit.sql @@ -1,4 +1,4 @@ -CREATE TABLE artist_credit ( +CREATE TABLE IF NOT EXISTS artist_credit ( id int PRIMARY KEY, text string NOT NULL ); diff --git a/backend/database/sql/schemas/artist_credit_artist.sql b/backend/database/sql/schemas/artist_credit_artist.sql index a1d6c8b..18e3c3c 100644 --- a/backend/database/sql/schemas/artist_credit_artist.sql +++ b/backend/database/sql/schemas/artist_credit_artist.sql @@ -1,4 +1,4 @@ -CREATE TABLE artist_credit_artist ( +CREATE TABLE IF NOT EXISTS artist_credit_artist ( id int PRIMARY KEY, FOREIGN KEY(artist_id) REFERENCES artists(id), FOREIGN KEY(credit_id) REFERENCES artist_credit(id) diff --git a/backend/database/sql/schemas/artists.sql b/backend/database/sql/schemas/artists.sql index a905903..fd9b224 100644 --- a/backend/database/sql/schemas/artists.sql +++ b/backend/database/sql/schemas/artists.sql @@ -1,4 +1,4 @@ -CREATE TABLE artists ( +CREATE TABLE IF NOT EXISTS artists ( id int PRIMARY KEY, name text NOT NULL ); diff --git a/backend/database/sql/schemas/audio_files.sql b/backend/database/sql/schemas/audio_files.sql index 91a21fd..340ae18 100644 --- a/backend/database/sql/schemas/audio_files.sql +++ b/backend/database/sql/schemas/audio_files.sql @@ -1,4 +1,4 @@ -CREATE TABLE audio_files ( +CREATE TABLE IF NOT EXISTS audio_files ( id int PRIMARY KEY, file_path text NOT NULL UNIQUE, length_milliseconds int NOT NULL, diff --git a/backend/database/sql/schemas/cover_art.sql b/backend/database/sql/schemas/cover_art.sql index e4e8540..98dd237 100644 --- a/backend/database/sql/schemas/cover_art.sql +++ b/backend/database/sql/schemas/cover_art.sql @@ -1,4 +1,4 @@ -CREATE TABLE cover_art ( +CREATE TABLE IF NOT EXISTS cover_art ( id int PRIMARY KEY, is_embedded bool NOT NULL DEFAULT(false), file_path text NOT NULL, diff --git a/backend/database/sql/schemas/file_types.sql b/backend/database/sql/schemas/file_types.sql index 135f528..bc2088b 100644 --- a/backend/database/sql/schemas/file_types.sql +++ b/backend/database/sql/schemas/file_types.sql @@ -1,4 +1,4 @@ -CREATE TABLE file_types ( +CREATE TABLE IF NOT EXISTS file_types ( id INTEGER PRIMARY KEY, extension text NOT NULL UNIQUE ); diff --git a/backend/database/sql/schemas/recordings.sql b/backend/database/sql/schemas/recordings.sql index b13ca7f..ca5c3d1 100644 --- a/backend/database/sql/schemas/recordings.sql +++ b/backend/database/sql/schemas/recordings.sql @@ -1,4 +1,4 @@ -CREATE TABLE recordings ( +CREATE TABLE IF NOT EXISTS recordings ( id int PRIMARY KEY, name text NOT NULL, FOREIGN KEY(artist_credit_id) REFERENCES artist_credit(id) diff --git a/backend/database/sql/schemas/release_group_recordings.sql b/backend/database/sql/schemas/release_group_recordings.sql index 5064e17..a0e8a08 100644 --- a/backend/database/sql/schemas/release_group_recordings.sql +++ b/backend/database/sql/schemas/release_group_recordings.sql @@ -1,4 +1,4 @@ -CREATE TABLE release_group_recordings ( +CREATE TABLE IF NOT EXISTS release_group_recordings ( id int PRIMARY KEY, FOREIGN KEY(release_group_id) REFERENCES release_groups(id), FOREIGN KEY(recording_id) REFERENCES recordings(id) diff --git a/backend/database/sql/schemas/release_groups.sql b/backend/database/sql/schemas/release_groups.sql index 36b8e67..05054e6 100644 --- a/backend/database/sql/schemas/release_groups.sql +++ b/backend/database/sql/schemas/release_groups.sql @@ -1,4 +1,4 @@ -CREATE TABLE release_groups ( +CREATE TABLE IF NOT EXISTS release_groups ( id int PRIMARY KEY, name text NOT NULL, FOREIGN KEY(cover_art_id) REFERENCES cover_art(id) From 792ee630db6eb0a67ca816f93c216ebe5440bda2 Mon Sep 17 00:00:00 2001 From: Logan Jones Date: Wed, 16 Apr 2025 12:38:08 -0500 Subject: [PATCH 07/10] fixed missing columns --- backend/database/sql/schemas/artist_credit_artist.sql | 2 ++ backend/database/sql/schemas/audio_files.sql | 2 ++ backend/database/sql/schemas/cover_art.sql | 1 + backend/database/sql/schemas/recordings.sql | 1 + backend/database/sql/schemas/release_group_recordings.sql | 2 ++ backend/database/sql/schemas/release_groups.sql | 1 + 6 files changed, 9 insertions(+) diff --git a/backend/database/sql/schemas/artist_credit_artist.sql b/backend/database/sql/schemas/artist_credit_artist.sql index 18e3c3c..e2f125a 100644 --- a/backend/database/sql/schemas/artist_credit_artist.sql +++ b/backend/database/sql/schemas/artist_credit_artist.sql @@ -1,5 +1,7 @@ CREATE TABLE IF NOT EXISTS artist_credit_artist ( id int PRIMARY KEY, + artist_id int NOT NULL, + credit_id int NOT NULL, FOREIGN KEY(artist_id) REFERENCES artists(id), FOREIGN KEY(credit_id) REFERENCES artist_credit(id) ); diff --git a/backend/database/sql/schemas/audio_files.sql b/backend/database/sql/schemas/audio_files.sql index 340ae18..7e64388 100644 --- a/backend/database/sql/schemas/audio_files.sql +++ b/backend/database/sql/schemas/audio_files.sql @@ -2,6 +2,8 @@ CREATE TABLE IF NOT EXISTS audio_files ( id int PRIMARY KEY, file_path text NOT NULL UNIQUE, length_milliseconds int NOT NULL, + file_type_id int NOT NULL, + recording_id int NOT NULL, FOREIGN KEY(file_type_id) REFERENCES file_types(id), FOREIGN KEY(recording_id) REFERENCES recordings(id) ); diff --git a/backend/database/sql/schemas/cover_art.sql b/backend/database/sql/schemas/cover_art.sql index 98dd237..0e3d611 100644 --- a/backend/database/sql/schemas/cover_art.sql +++ b/backend/database/sql/schemas/cover_art.sql @@ -2,5 +2,6 @@ CREATE TABLE IF NOT EXISTS cover_art ( id int PRIMARY KEY, is_embedded bool NOT NULL DEFAULT(false), file_path text NOT NULL, + file_type_id int NOT NULL, FOREIGN KEY(file_type_id) REFERENCES file_types(id) ); diff --git a/backend/database/sql/schemas/recordings.sql b/backend/database/sql/schemas/recordings.sql index ca5c3d1..b129ca1 100644 --- a/backend/database/sql/schemas/recordings.sql +++ b/backend/database/sql/schemas/recordings.sql @@ -1,6 +1,7 @@ CREATE TABLE IF NOT EXISTS recordings ( id int PRIMARY KEY, name text NOT NULL, + artist_credit_id int NOT NULL, FOREIGN KEY(artist_credit_id) REFERENCES artist_credit(id) ); diff --git a/backend/database/sql/schemas/release_group_recordings.sql b/backend/database/sql/schemas/release_group_recordings.sql index a0e8a08..b08aaf9 100644 --- a/backend/database/sql/schemas/release_group_recordings.sql +++ b/backend/database/sql/schemas/release_group_recordings.sql @@ -1,5 +1,7 @@ CREATE TABLE IF NOT EXISTS release_group_recordings ( id int PRIMARY KEY, + release_group_id int NOT NULL, + recording_id int NOT NULL, FOREIGN KEY(release_group_id) REFERENCES release_groups(id), FOREIGN KEY(recording_id) REFERENCES recordings(id) ); diff --git a/backend/database/sql/schemas/release_groups.sql b/backend/database/sql/schemas/release_groups.sql index 05054e6..48d1d1b 100644 --- a/backend/database/sql/schemas/release_groups.sql +++ b/backend/database/sql/schemas/release_groups.sql @@ -1,5 +1,6 @@ CREATE TABLE IF NOT EXISTS release_groups ( id int PRIMARY KEY, name text NOT NULL, + cover_art_id int NOT NULL, FOREIGN KEY(cover_art_id) REFERENCES cover_art(id) ); From 6e2506c70da520f99f6686b85d4b3373bc7de096 Mon Sep 17 00:00:00 2001 From: Logan Jones Date: Wed, 16 Apr 2025 12:48:29 -0500 Subject: [PATCH 08/10] added missing field --- backend/database/sql/queries/release_group_recordings.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/database/sql/queries/release_group_recordings.sql b/backend/database/sql/queries/release_group_recordings.sql index fd02f46..de502d3 100644 --- a/backend/database/sql/queries/release_group_recordings.sql +++ b/backend/database/sql/queries/release_group_recordings.sql @@ -8,7 +8,7 @@ WHERE id = ? LIMIT 1; -- name: UpdateReleaseGroupRecording :exec UPDATE release_group_recordings -SET release_group_id = ? +SET release_group_id = ?, recording_id = ? WHERE id =?; -- name: DeleteReleaseGroupRecording :exec From ed76ce89e06e1ca3fb4086dfd562a5160459b18e Mon Sep 17 00:00:00 2001 From: Logan Jones Date: Wed, 16 Apr 2025 12:52:30 -0500 Subject: [PATCH 09/10] fixed code generation with sqlc --- backend/database/database.go | 3 +- backend/database/sql/queries/todo.txt | 0 backend/database/sql/schemas/todo.txt | 0 .../database/sql/sqlcgen/artist_credit.sql.go | 60 ++++++++++++ .../sql/sqlcgen/artist_credit_artists.sql.go | 66 +++++++++++++ backend/database/sql/sqlcgen/artists.sql.go | 60 ++++++++++++ .../database/sql/sqlcgen/audio_files.sql.go | 93 +++++++++++++++++++ backend/database/sql/sqlcgen/cover_art.sql.go | 83 +++++++++++++++++ .../database/sql/sqlcgen/file_types.sql.go | 60 ++++++++++++ backend/database/sql/sqlcgen/models.go | 21 +++-- .../database/sql/sqlcgen/recordings.sql.go | 48 +++++++++- .../sqlcgen/release_group_recordings.sql.go | 66 +++++++++++++ .../sql/sqlcgen/release_groups.sql.go | 60 ++++++++++++ 13 files changed, 608 insertions(+), 12 deletions(-) delete mode 100644 backend/database/sql/queries/todo.txt delete mode 100644 backend/database/sql/schemas/todo.txt create mode 100644 backend/database/sql/sqlcgen/artist_credit.sql.go create mode 100644 backend/database/sql/sqlcgen/artist_credit_artists.sql.go create mode 100644 backend/database/sql/sqlcgen/artists.sql.go create mode 100644 backend/database/sql/sqlcgen/audio_files.sql.go create mode 100644 backend/database/sql/sqlcgen/cover_art.sql.go create mode 100644 backend/database/sql/sqlcgen/file_types.sql.go create mode 100644 backend/database/sql/sqlcgen/release_group_recordings.sql.go create mode 100644 backend/database/sql/sqlcgen/release_groups.sql.go diff --git a/backend/database/database.go b/backend/database/database.go index 0ac7dd6..fd8e968 100644 --- a/backend/database/database.go +++ b/backend/database/database.go @@ -7,7 +7,8 @@ import ( _ "modernc.org/sqlite" ) -//go:generate sqlc vet && sqlc generate +//go:generate sqlc vet +//go:generate sqlc generate type DB struct{ db *sql.DB diff --git a/backend/database/sql/queries/todo.txt b/backend/database/sql/queries/todo.txt deleted file mode 100644 index e69de29..0000000 diff --git a/backend/database/sql/schemas/todo.txt b/backend/database/sql/schemas/todo.txt deleted file mode 100644 index e69de29..0000000 diff --git a/backend/database/sql/sqlcgen/artist_credit.sql.go b/backend/database/sql/sqlcgen/artist_credit.sql.go new file mode 100644 index 0000000..c380851 --- /dev/null +++ b/backend/database/sql/sqlcgen/artist_credit.sql.go @@ -0,0 +1,60 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.28.0 +// source: artist_credit.sql + +package sqlcgen + +import ( + "context" +) + +const createArtistCredit = `-- name: CreateArtistCredit :one +INSERT INTO artist_credit (text) VALUES (?) +RETURNING id, text +` + +func (q *Queries) CreateArtistCredit(ctx context.Context, text interface{}) (ArtistCredit, error) { + row := q.db.QueryRowContext(ctx, createArtistCredit, text) + var i ArtistCredit + err := row.Scan(&i.ID, &i.Text) + return i, err +} + +const deleteArtistCredit = `-- name: DeleteArtistCredit :exec +DELETE FROM artist_credit +WHERE id =? +` + +func (q *Queries) DeleteArtistCredit(ctx context.Context, id int64) error { + _, err := q.db.ExecContext(ctx, deleteArtistCredit, id) + return err +} + +const getArtistCredit = `-- name: GetArtistCredit :one +SELECT id, text FROM artist_credit +WHERE id = ? LIMIT 1 +` + +func (q *Queries) GetArtistCredit(ctx context.Context, id int64) (ArtistCredit, error) { + row := q.db.QueryRowContext(ctx, getArtistCredit, id) + var i ArtistCredit + err := row.Scan(&i.ID, &i.Text) + return i, err +} + +const updateArtistCredit = `-- name: UpdateArtistCredit :exec +UPDATE artist_credit +SET text = ? +WHERE id =? +` + +type UpdateArtistCreditParams struct { + Text interface{} + ID int64 +} + +func (q *Queries) UpdateArtistCredit(ctx context.Context, arg UpdateArtistCreditParams) error { + _, err := q.db.ExecContext(ctx, updateArtistCredit, arg.Text, arg.ID) + return err +} diff --git a/backend/database/sql/sqlcgen/artist_credit_artists.sql.go b/backend/database/sql/sqlcgen/artist_credit_artists.sql.go new file mode 100644 index 0000000..21a77ca --- /dev/null +++ b/backend/database/sql/sqlcgen/artist_credit_artists.sql.go @@ -0,0 +1,66 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.28.0 +// source: artist_credit_artists.sql + +package sqlcgen + +import ( + "context" +) + +const createArtistCreditArtist = `-- name: CreateArtistCreditArtist :one +INSERT INTO artist_credit_artist (artist_id, credit_id) VALUES (?, ?) +RETURNING id, artist_id, credit_id +` + +type CreateArtistCreditArtistParams struct { + ArtistID int64 + CreditID int64 +} + +func (q *Queries) CreateArtistCreditArtist(ctx context.Context, arg CreateArtistCreditArtistParams) (ArtistCreditArtist, error) { + row := q.db.QueryRowContext(ctx, createArtistCreditArtist, arg.ArtistID, arg.CreditID) + var i ArtistCreditArtist + err := row.Scan(&i.ID, &i.ArtistID, &i.CreditID) + return i, err +} + +const deleteArtistCreditArtist = `-- name: DeleteArtistCreditArtist :exec +DELETE FROM artist_credit_artist +WHERE id =? +` + +func (q *Queries) DeleteArtistCreditArtist(ctx context.Context, id int64) error { + _, err := q.db.ExecContext(ctx, deleteArtistCreditArtist, id) + return err +} + +const getArtistCreditArtist = `-- name: GetArtistCreditArtist :one +SELECT id, artist_id, credit_id FROM artist_credit_artist +WHERE id = ? LIMIT 1 +` + +func (q *Queries) GetArtistCreditArtist(ctx context.Context, id int64) (ArtistCreditArtist, error) { + row := q.db.QueryRowContext(ctx, getArtistCreditArtist, id) + var i ArtistCreditArtist + err := row.Scan(&i.ID, &i.ArtistID, &i.CreditID) + return i, err +} + +const updateArtistCreditArtist = `-- name: UpdateArtistCreditArtist :exec +UPDATE artist_credit_artist +SET artist_id = ?, credit_id = ? +WHERE id =? +` + +type UpdateArtistCreditArtistParams struct { + ArtistID int64 + CreditID int64 + ID int64 +} + +func (q *Queries) UpdateArtistCreditArtist(ctx context.Context, arg UpdateArtistCreditArtistParams) error { + _, err := q.db.ExecContext(ctx, updateArtistCreditArtist, arg.ArtistID, arg.CreditID, arg.ID) + return err +} diff --git a/backend/database/sql/sqlcgen/artists.sql.go b/backend/database/sql/sqlcgen/artists.sql.go new file mode 100644 index 0000000..37e042a --- /dev/null +++ b/backend/database/sql/sqlcgen/artists.sql.go @@ -0,0 +1,60 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.28.0 +// source: artists.sql + +package sqlcgen + +import ( + "context" +) + +const createArtist = `-- name: CreateArtist :one +INSERT INTO artists (name) VALUES (?) +RETURNING id, name +` + +func (q *Queries) CreateArtist(ctx context.Context, name string) (Artist, error) { + row := q.db.QueryRowContext(ctx, createArtist, name) + var i Artist + err := row.Scan(&i.ID, &i.Name) + return i, err +} + +const deleteArtist = `-- name: DeleteArtist :exec +DELETE FROM artists +WHERE id =? +` + +func (q *Queries) DeleteArtist(ctx context.Context, id int64) error { + _, err := q.db.ExecContext(ctx, deleteArtist, id) + return err +} + +const getArtist = `-- name: GetArtist :one +SELECT id, name FROM artists +WHERE id = ? LIMIT 1 +` + +func (q *Queries) GetArtist(ctx context.Context, id int64) (Artist, error) { + row := q.db.QueryRowContext(ctx, getArtist, id) + var i Artist + err := row.Scan(&i.ID, &i.Name) + return i, err +} + +const updateArtist = `-- name: UpdateArtist :exec +UPDATE artists +SET name = ? +WHERE id =? +` + +type UpdateArtistParams struct { + Name string + ID int64 +} + +func (q *Queries) UpdateArtist(ctx context.Context, arg UpdateArtistParams) error { + _, err := q.db.ExecContext(ctx, updateArtist, arg.Name, arg.ID) + return err +} diff --git a/backend/database/sql/sqlcgen/audio_files.sql.go b/backend/database/sql/sqlcgen/audio_files.sql.go new file mode 100644 index 0000000..7cf082f --- /dev/null +++ b/backend/database/sql/sqlcgen/audio_files.sql.go @@ -0,0 +1,93 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.28.0 +// source: audio_files.sql + +package sqlcgen + +import ( + "context" +) + +const createAudioFile = `-- name: CreateAudioFile :one +INSERT INTO audio_files (file_path, length_milliseconds, file_type_id, recording_id) VALUES (?, ?, ?, ?) +RETURNING id, file_path, length_milliseconds, file_type_id, recording_id +` + +type CreateAudioFileParams struct { + FilePath string + LengthMilliseconds int64 + FileTypeID int64 + RecordingID int64 +} + +func (q *Queries) CreateAudioFile(ctx context.Context, arg CreateAudioFileParams) (AudioFile, error) { + row := q.db.QueryRowContext(ctx, createAudioFile, + arg.FilePath, + arg.LengthMilliseconds, + arg.FileTypeID, + arg.RecordingID, + ) + var i AudioFile + err := row.Scan( + &i.ID, + &i.FilePath, + &i.LengthMilliseconds, + &i.FileTypeID, + &i.RecordingID, + ) + return i, err +} + +const deleteAudioFile = `-- name: DeleteAudioFile :exec +DELETE FROM audio_files +WHERE id =? +` + +func (q *Queries) DeleteAudioFile(ctx context.Context, id int64) error { + _, err := q.db.ExecContext(ctx, deleteAudioFile, id) + return err +} + +const getAudioFile = `-- name: GetAudioFile :one +SELECT id, file_path, length_milliseconds, file_type_id, recording_id FROM audio_files +WHERE id = ? LIMIT 1 +` + +func (q *Queries) GetAudioFile(ctx context.Context, id int64) (AudioFile, error) { + row := q.db.QueryRowContext(ctx, getAudioFile, id) + var i AudioFile + err := row.Scan( + &i.ID, + &i.FilePath, + &i.LengthMilliseconds, + &i.FileTypeID, + &i.RecordingID, + ) + return i, err +} + +const updateAudioFile = `-- name: UpdateAudioFile :exec +UPDATE audio_files +SET file_path = ?, length_milliseconds = ?, file_type_id = ?, recording_id = ? +WHERE id =? +` + +type UpdateAudioFileParams struct { + FilePath string + LengthMilliseconds int64 + FileTypeID int64 + RecordingID int64 + ID int64 +} + +func (q *Queries) UpdateAudioFile(ctx context.Context, arg UpdateAudioFileParams) error { + _, err := q.db.ExecContext(ctx, updateAudioFile, + arg.FilePath, + arg.LengthMilliseconds, + arg.FileTypeID, + arg.RecordingID, + arg.ID, + ) + return err +} diff --git a/backend/database/sql/sqlcgen/cover_art.sql.go b/backend/database/sql/sqlcgen/cover_art.sql.go new file mode 100644 index 0000000..9ac3f8c --- /dev/null +++ b/backend/database/sql/sqlcgen/cover_art.sql.go @@ -0,0 +1,83 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.28.0 +// source: cover_art.sql + +package sqlcgen + +import ( + "context" +) + +const createCoverArt = `-- name: CreateCoverArt :one +INSERT INTO cover_art (is_embedded, file_path, file_type_id) VALUES (?, ?, ?) +RETURNING id, is_embedded, file_path, file_type_id +` + +type CreateCoverArtParams struct { + IsEmbedded bool + FilePath string + FileTypeID int64 +} + +func (q *Queries) CreateCoverArt(ctx context.Context, arg CreateCoverArtParams) (CoverArt, error) { + row := q.db.QueryRowContext(ctx, createCoverArt, arg.IsEmbedded, arg.FilePath, arg.FileTypeID) + var i CoverArt + err := row.Scan( + &i.ID, + &i.IsEmbedded, + &i.FilePath, + &i.FileTypeID, + ) + return i, err +} + +const deleteCoverArt = `-- name: DeleteCoverArt :exec +DELETE FROM cover_art +WHERE id =? +` + +func (q *Queries) DeleteCoverArt(ctx context.Context, id int64) error { + _, err := q.db.ExecContext(ctx, deleteCoverArt, id) + return err +} + +const getCoverArt = `-- name: GetCoverArt :one +SELECT id, is_embedded, file_path, file_type_id FROM cover_art +WHERE id = ? LIMIT 1 +` + +func (q *Queries) GetCoverArt(ctx context.Context, id int64) (CoverArt, error) { + row := q.db.QueryRowContext(ctx, getCoverArt, id) + var i CoverArt + err := row.Scan( + &i.ID, + &i.IsEmbedded, + &i.FilePath, + &i.FileTypeID, + ) + return i, err +} + +const updateCoverArt = `-- name: UpdateCoverArt :exec +UPDATE cover_art +SET is_embedded = ?, file_path = ?, file_type_id = ? +WHERE id =? +` + +type UpdateCoverArtParams struct { + IsEmbedded bool + FilePath string + FileTypeID int64 + ID int64 +} + +func (q *Queries) UpdateCoverArt(ctx context.Context, arg UpdateCoverArtParams) error { + _, err := q.db.ExecContext(ctx, updateCoverArt, + arg.IsEmbedded, + arg.FilePath, + arg.FileTypeID, + arg.ID, + ) + return err +} diff --git a/backend/database/sql/sqlcgen/file_types.sql.go b/backend/database/sql/sqlcgen/file_types.sql.go new file mode 100644 index 0000000..6a3c286 --- /dev/null +++ b/backend/database/sql/sqlcgen/file_types.sql.go @@ -0,0 +1,60 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.28.0 +// source: file_types.sql + +package sqlcgen + +import ( + "context" +) + +const createFileType = `-- name: CreateFileType :one +INSERT INTO file_types (extension) VALUES (?) +RETURNING id, extension +` + +func (q *Queries) CreateFileType(ctx context.Context, extension string) (FileType, error) { + row := q.db.QueryRowContext(ctx, createFileType, extension) + var i FileType + err := row.Scan(&i.ID, &i.Extension) + return i, err +} + +const deleteFileType = `-- name: DeleteFileType :exec +DELETE FROM file_types +WHERE id =? +` + +func (q *Queries) DeleteFileType(ctx context.Context, id int64) error { + _, err := q.db.ExecContext(ctx, deleteFileType, id) + return err +} + +const getFileType = `-- name: GetFileType :one +SELECT id, extension FROM file_types +WHERE id = ? LIMIT 1 +` + +func (q *Queries) GetFileType(ctx context.Context, id int64) (FileType, error) { + row := q.db.QueryRowContext(ctx, getFileType, id) + var i FileType + err := row.Scan(&i.ID, &i.Extension) + return i, err +} + +const updateFileType = `-- name: UpdateFileType :exec +UPDATE file_types +SET extension = ? +WHERE id =? +` + +type UpdateFileTypeParams struct { + Extension string + ID int64 +} + +func (q *Queries) UpdateFileType(ctx context.Context, arg UpdateFileTypeParams) error { + _, err := q.db.ExecContext(ctx, updateFileType, arg.Extension, arg.ID) + return err +} diff --git a/backend/database/sql/sqlcgen/models.go b/backend/database/sql/sqlcgen/models.go index 066687b..b35b1db 100644 --- a/backend/database/sql/sqlcgen/models.go +++ b/backend/database/sql/sqlcgen/models.go @@ -15,19 +15,24 @@ type ArtistCredit struct { } type ArtistCreditArtist struct { - ID int64 + ID int64 + ArtistID int64 + CreditID int64 } type AudioFile struct { ID int64 FilePath string LengthMilliseconds int64 + FileTypeID int64 + RecordingID int64 } type CoverArt struct { ID int64 IsEmbedded bool FilePath string + FileTypeID int64 } type FileType struct { @@ -36,15 +41,19 @@ type FileType struct { } type Recording struct { - ID int64 - Name string + ID int64 + Name string + ArtistCreditID int64 } type ReleaseGroup struct { - ID int64 - Name string + ID int64 + Name string + CoverArtID int64 } type ReleaseGroupRecording struct { - ID int64 + ID int64 + ReleaseGroupID int64 + RecordingID int64 } diff --git a/backend/database/sql/sqlcgen/recordings.sql.go b/backend/database/sql/sqlcgen/recordings.sql.go index cacc377..21cdfbb 100644 --- a/backend/database/sql/sqlcgen/recordings.sql.go +++ b/backend/database/sql/sqlcgen/recordings.sql.go @@ -9,14 +9,52 @@ import ( "context" ) -const getAuthor = `-- name: GetAuthor :one -SELECT id, name FROM recordings +const createRecording = `-- name: CreateRecording :one +INSERT INTO recordings (name) VALUES (?) +RETURNING id, name, artist_credit_id +` + +func (q *Queries) CreateRecording(ctx context.Context, name string) (Recording, error) { + row := q.db.QueryRowContext(ctx, createRecording, name) + var i Recording + err := row.Scan(&i.ID, &i.Name, &i.ArtistCreditID) + return i, err +} + +const deleteRecording = `-- name: DeleteRecording :exec +DELETE FROM recordings +WHERE id =? +` + +func (q *Queries) DeleteRecording(ctx context.Context, id int64) error { + _, err := q.db.ExecContext(ctx, deleteRecording, id) + return err +} + +const getRecording = `-- name: GetRecording :one +SELECT id, name, artist_credit_id FROM recordings WHERE id = ? LIMIT 1 ` -func (q *Queries) GetAuthor(ctx context.Context, id int64) (Recording, error) { - row := q.db.QueryRowContext(ctx, getAuthor, id) +func (q *Queries) GetRecording(ctx context.Context, id int64) (Recording, error) { + row := q.db.QueryRowContext(ctx, getRecording, id) var i Recording - err := row.Scan(&i.ID, &i.Name) + err := row.Scan(&i.ID, &i.Name, &i.ArtistCreditID) return i, err } + +const updateRecording = `-- name: UpdateRecording :exec +UPDATE recordings +SET name = ? +WHERE id =? +` + +type UpdateRecordingParams struct { + Name string + ID int64 +} + +func (q *Queries) UpdateRecording(ctx context.Context, arg UpdateRecordingParams) error { + _, err := q.db.ExecContext(ctx, updateRecording, arg.Name, arg.ID) + return err +} diff --git a/backend/database/sql/sqlcgen/release_group_recordings.sql.go b/backend/database/sql/sqlcgen/release_group_recordings.sql.go new file mode 100644 index 0000000..2c99cf5 --- /dev/null +++ b/backend/database/sql/sqlcgen/release_group_recordings.sql.go @@ -0,0 +1,66 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.28.0 +// source: release_group_recordings.sql + +package sqlcgen + +import ( + "context" +) + +const createReleaseGroupRecording = `-- name: CreateReleaseGroupRecording :one +INSERT INTO release_group_recordings (release_group_id, recording_id) VALUES (?,?) +RETURNING id, release_group_id, recording_id +` + +type CreateReleaseGroupRecordingParams struct { + ReleaseGroupID int64 + RecordingID int64 +} + +func (q *Queries) CreateReleaseGroupRecording(ctx context.Context, arg CreateReleaseGroupRecordingParams) (ReleaseGroupRecording, error) { + row := q.db.QueryRowContext(ctx, createReleaseGroupRecording, arg.ReleaseGroupID, arg.RecordingID) + var i ReleaseGroupRecording + err := row.Scan(&i.ID, &i.ReleaseGroupID, &i.RecordingID) + return i, err +} + +const deleteReleaseGroupRecording = `-- name: DeleteReleaseGroupRecording :exec +DELETE FROM release_group_recordings +WHERE id =? +` + +func (q *Queries) DeleteReleaseGroupRecording(ctx context.Context, id int64) error { + _, err := q.db.ExecContext(ctx, deleteReleaseGroupRecording, id) + return err +} + +const getReleaseGroupRecording = `-- name: GetReleaseGroupRecording :one +SELECT id, release_group_id, recording_id FROM release_group_recordings +WHERE id = ? LIMIT 1 +` + +func (q *Queries) GetReleaseGroupRecording(ctx context.Context, id int64) (ReleaseGroupRecording, error) { + row := q.db.QueryRowContext(ctx, getReleaseGroupRecording, id) + var i ReleaseGroupRecording + err := row.Scan(&i.ID, &i.ReleaseGroupID, &i.RecordingID) + return i, err +} + +const updateReleaseGroupRecording = `-- name: UpdateReleaseGroupRecording :exec +UPDATE release_group_recordings +SET release_group_id = ?, recording_id = ? +WHERE id =? +` + +type UpdateReleaseGroupRecordingParams struct { + ReleaseGroupID int64 + RecordingID int64 + ID int64 +} + +func (q *Queries) UpdateReleaseGroupRecording(ctx context.Context, arg UpdateReleaseGroupRecordingParams) error { + _, err := q.db.ExecContext(ctx, updateReleaseGroupRecording, arg.ReleaseGroupID, arg.RecordingID, arg.ID) + return err +} diff --git a/backend/database/sql/sqlcgen/release_groups.sql.go b/backend/database/sql/sqlcgen/release_groups.sql.go new file mode 100644 index 0000000..91f1d65 --- /dev/null +++ b/backend/database/sql/sqlcgen/release_groups.sql.go @@ -0,0 +1,60 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.28.0 +// source: release_groups.sql + +package sqlcgen + +import ( + "context" +) + +const createReleaseGroup = `-- name: CreateReleaseGroup :one +INSERT INTO release_groups (name) VALUES (?) +RETURNING id, name, cover_art_id +` + +func (q *Queries) CreateReleaseGroup(ctx context.Context, name string) (ReleaseGroup, error) { + row := q.db.QueryRowContext(ctx, createReleaseGroup, name) + var i ReleaseGroup + err := row.Scan(&i.ID, &i.Name, &i.CoverArtID) + return i, err +} + +const deleteReleaseGroup = `-- name: DeleteReleaseGroup :exec +DELETE FROM release_groups +WHERE id =? +` + +func (q *Queries) DeleteReleaseGroup(ctx context.Context, id int64) error { + _, err := q.db.ExecContext(ctx, deleteReleaseGroup, id) + return err +} + +const getReleaseGroup = `-- name: GetReleaseGroup :one +SELECT id, name, cover_art_id FROM release_groups +WHERE id = ? LIMIT 1 +` + +func (q *Queries) GetReleaseGroup(ctx context.Context, id int64) (ReleaseGroup, error) { + row := q.db.QueryRowContext(ctx, getReleaseGroup, id) + var i ReleaseGroup + err := row.Scan(&i.ID, &i.Name, &i.CoverArtID) + return i, err +} + +const updateReleaseGroup = `-- name: UpdateReleaseGroup :exec +UPDATE release_groups +SET name = ? +WHERE id =? +` + +type UpdateReleaseGroupParams struct { + Name string + ID int64 +} + +func (q *Queries) UpdateReleaseGroup(ctx context.Context, arg UpdateReleaseGroupParams) error { + _, err := q.db.ExecContext(ctx, updateReleaseGroup, arg.Name, arg.ID) + return err +} From faa9123c45f60b0e0650c1a0fcbf708548fc3b0e Mon Sep 17 00:00:00 2001 From: Logan Jones Date: Wed, 16 Apr 2025 13:49:59 -0500 Subject: [PATCH 10/10] no changes, just syncing db * started schema * db schemas beginning * first db schema gen * added sqlc generation with go generate and sqlite driver * i think these dependencies are needed * added IF NOT EXISTS to create and CRUD for each table * fixed missing columns * added missing field * fixed code generation with sqlc