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"