mirror of
https://github.com/gabehf/Koito.git
synced 2026-03-12 08:50:40 -07:00
* feat: single SOT for themes + basic custom support * fix: adjust colors for yuu theme * feat: Allow loading of environment variables from file (#20) * feat: allow loading of environment variables from file * Panic if a file for an environment variable cannot be read * Use log.Fatalf + os.Exit instead of panic * fix: remove supurfluous call to os.Exit() --------- Co-authored-by: adaexec <nixos-git.s1pht@simplelogin.com> Co-authored-by: Gabe Farrell <90876006+gabehf@users.noreply.github.com> * chore: add pr test workflow * chore: changelog * feat: make all activity grids configurable * fix: adjust activity grid style * fix: make background gradient consistent size * revert: remove year from activity grid opts * style: adjust top item list min size to 200px * feat: add support for custom themes * fix: stabilized the order of top items * chore: update changelog * feat: native import & export * fix: use correct request body for alias requests * fix: clear input when closing edit modal * chore: changelog * docs: make endpoint clearer for some apps * feat: add ui and handler for export * fix: fix pr test workflow --------- Co-authored-by: adaexec <78047743+adaexec@users.noreply.github.com> Co-authored-by: adaexec <nixos-git.s1pht@simplelogin.com>
128 lines
No EOL
3.3 KiB
SQL
128 lines
No EOL
3.3 KiB
SQL
-- name: InsertTrack :one
|
|
INSERT INTO tracks (musicbrainz_id, release_id, duration)
|
|
VALUES ($1, $2, $3)
|
|
RETURNING *;
|
|
|
|
-- name: AssociateArtistToTrack :exec
|
|
INSERT INTO artist_tracks (artist_id, track_id)
|
|
VALUES ($1, $2)
|
|
ON CONFLICT DO NOTHING;
|
|
|
|
-- name: GetTrack :one
|
|
SELECT
|
|
t.*,
|
|
r.image
|
|
FROM tracks_with_title t
|
|
JOIN releases r ON t.release_id = r.id
|
|
WHERE t.id = $1 LIMIT 1;
|
|
|
|
-- name: GetTrackByMbzID :one
|
|
SELECT * FROM tracks_with_title
|
|
WHERE musicbrainz_id = $1 LIMIT 1;
|
|
|
|
-- name: GetAllTracksFromArtist :many
|
|
SELECT t.*
|
|
FROM tracks_with_title t
|
|
JOIN artist_tracks at ON t.id = at.track_id
|
|
WHERE at.artist_id = $1;
|
|
|
|
-- name: GetTrackByTitleAndArtists :one
|
|
SELECT t.*
|
|
FROM tracks_with_title t
|
|
JOIN artist_tracks at ON at.track_id = t.id
|
|
WHERE t.title = $1
|
|
AND at.artist_id = ANY($2::int[])
|
|
GROUP BY t.id, t.title, t.musicbrainz_id, t.duration, t.release_id
|
|
HAVING COUNT(DISTINCT at.artist_id) = cardinality($2::int[]);
|
|
|
|
-- name: GetTopTracksPaginated :many
|
|
SELECT
|
|
t.id,
|
|
t.title,
|
|
t.musicbrainz_id,
|
|
t.release_id,
|
|
r.image,
|
|
COUNT(*) AS listen_count,
|
|
get_artists_for_track(t.id) AS artists
|
|
FROM listens l
|
|
JOIN tracks_with_title t ON l.track_id = t.id
|
|
JOIN releases r ON t.release_id = r.id
|
|
WHERE l.listened_at BETWEEN $1 AND $2
|
|
GROUP BY t.id, t.title, t.musicbrainz_id, t.release_id, r.image
|
|
ORDER BY listen_count DESC, t.id
|
|
LIMIT $3 OFFSET $4;
|
|
|
|
-- name: GetTopTracksByArtistPaginated :many
|
|
SELECT
|
|
t.id,
|
|
t.title,
|
|
t.musicbrainz_id,
|
|
t.release_id,
|
|
r.image,
|
|
COUNT(*) AS listen_count,
|
|
get_artists_for_track(t.id) AS artists
|
|
FROM listens l
|
|
JOIN tracks_with_title t ON l.track_id = t.id
|
|
JOIN releases r ON t.release_id = r.id
|
|
JOIN artist_tracks at ON at.track_id = t.id
|
|
WHERE l.listened_at BETWEEN $1 AND $2
|
|
AND at.artist_id = $5
|
|
GROUP BY t.id, t.title, t.musicbrainz_id, t.release_id, r.image
|
|
ORDER BY listen_count DESC, t.id
|
|
LIMIT $3 OFFSET $4;
|
|
|
|
-- name: GetTopTracksInReleasePaginated :many
|
|
SELECT
|
|
t.id,
|
|
t.title,
|
|
t.musicbrainz_id,
|
|
t.release_id,
|
|
r.image,
|
|
COUNT(*) AS listen_count,
|
|
get_artists_for_track(t.id) AS artists
|
|
FROM listens l
|
|
JOIN tracks_with_title t ON l.track_id = t.id
|
|
JOIN releases r ON t.release_id = r.id
|
|
WHERE l.listened_at BETWEEN $1 AND $2
|
|
AND t.release_id = $5
|
|
GROUP BY t.id, t.title, t.musicbrainz_id, t.release_id, r.image
|
|
ORDER BY listen_count DESC, t.id
|
|
LIMIT $3 OFFSET $4;
|
|
|
|
-- name: CountTopTracks :one
|
|
SELECT COUNT(DISTINCT l.track_id) AS total_count
|
|
FROM listens l
|
|
WHERE l.listened_at BETWEEN $1 AND $2;
|
|
|
|
-- name: CountTopTracksByArtist :one
|
|
SELECT COUNT(DISTINCT l.track_id) AS total_count
|
|
FROM listens l
|
|
JOIN artist_tracks at ON l.track_id = at.track_id
|
|
WHERE l.listened_at BETWEEN $1 AND $2
|
|
AND at.artist_id = $3;
|
|
|
|
-- name: CountTopTracksByRelease :one
|
|
SELECT COUNT(DISTINCT l.track_id) AS total_count
|
|
FROM listens l
|
|
JOIN tracks t ON l.track_id = t.id
|
|
WHERE l.listened_at BETWEEN $1 AND $2
|
|
AND t.release_id = $3;
|
|
|
|
-- name: UpdateTrackMbzID :exec
|
|
UPDATE tracks SET musicbrainz_id = $2
|
|
WHERE id = $1;
|
|
|
|
-- name: UpdateTrackDuration :exec
|
|
UPDATE tracks SET duration = $2
|
|
WHERE id = $1;
|
|
|
|
-- name: UpdateReleaseForAll :exec
|
|
UPDATE tracks SET release_id = $2
|
|
WHERE release_id = $1;
|
|
|
|
-- name: UpdateTrackPrimaryArtist :exec
|
|
UPDATE artist_tracks SET is_primary = $3
|
|
WHERE artist_id = $1 AND track_id = $2;
|
|
|
|
-- name: DeleteTrack :exec
|
|
DELETE FROM tracks WHERE id = $1; |