diff --git a/api/Classes/GlobalsFetcher.php b/api/Classes/GlobalsFetcher.php new file mode 100644 index 0000000..666a338 --- /dev/null +++ b/api/Classes/GlobalsFetcher.php @@ -0,0 +1,22 @@ +cacheGet($cacheKey); + + if ($cached) return $cached; + + $globals = $this->fetchFromApi("optimized_globals"); + + if (empty($globals)) return null; + + $this->cacheSet($cacheKey, $globals[0]); + + return $globals[0]; + } +} diff --git a/package-lock.json b/package-lock.json index a5d77b6..ba2db43 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "coryd.dev", - "version": "6.1.14", + "version": "6.2.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "coryd.dev", - "version": "6.1.14", + "version": "6.2.0", "license": "MIT", "dependencies": { "minisearch": "^7.1.2", diff --git a/package.json b/package.json index bf6acb3..078cf60 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "coryd.dev", - "version": "6.1.14", + "version": "6.2.0", "description": "The source for my personal site. Built using 11ty (and other tools).", "type": "module", "engines": { diff --git a/queries/views/media/music/artists.sql b/queries/views/media/music/artists.sql index 040bb55..af8bc15 100644 --- a/queries/views/media/music/artists.sql +++ b/queries/views/media/music/artists.sql @@ -17,8 +17,7 @@ SELECT CONCAT('/', df.filename_disk) AS image, json_build_object( 'title', ar.name_string, - 'image', - CONCAT('/', df.filename_disk), + 'image', CONCAT('/', df.filename_disk), 'url', ar.slug, 'alt', CONCAT(to_char(ar.total_plays, 'FM999,999,999,999'), ' plays of ', ar.name_string), 'subtext', CONCAT(to_char(ar.total_plays, 'FM999,999,999,999'), ' plays') @@ -27,80 +26,107 @@ SELECT 'title', ar.name_string, 'genre', g.name, 'genre_url', g.slug, - 'emoji', CASE WHEN ar.emoji IS NOT NULL THEN ar.emoji ELSE g.emoji END, + 'emoji', COALESCE(ar.emoji, g.emoji), 'plays', to_char(ar.total_plays, 'FM999,999,999,999'), 'image', CONCAT('/', df.filename_disk), 'url', ar.slug, 'alt', CONCAT(to_char(ar.total_plays, 'FM999,999,999,999'), ' plays of ', ar.name_string) ) AS table, ( - SELECT - json_agg(json_build_object('name', a.name, 'release_year', a.release_year, 'total_plays', to_char(a.total_plays, 'FM999,999,999,999'), - 'art', df_album.filename_disk) - ORDER BY a.release_year) - FROM - albums a + SELECT json_agg( + json_build_object( + 'name', a.name, + 'release_year', a.release_year, + 'total_plays', to_char(a.total_plays, 'FM999,999,999,999'), + 'art', df_album.filename_disk, + 'grid', json_build_object( + 'title', a.name, + 'image', CONCAT('/', df_album.filename_disk), + 'alt', CONCAT(to_char(a.total_plays, 'FM999,999,999,999'), ' plays of ', a.name), + 'subtext', + CASE + WHEN a.total_plays > 0 + THEN CONCAT(a.release_year, ' • ', to_char(a.total_plays, 'FM999,999,999,999'), ' plays') + ELSE CONCAT(a.release_year, '') + END + ) + ) + ORDER BY a.release_year + ) + FROM albums a LEFT JOIN directus_files df_album ON a.art = df_album.id - WHERE - a.artist = ar.id) AS albums, + WHERE a.artist = ar.id + ) AS albums, ( - SELECT - json_agg(json_build_object('id', c.id, 'date', c.date, 'venue_name', v.name, 'venue_name_short', trim(split_part(v.name, ',', 1)), 'venue_latitude', v.latitude, 'venue_longitude', v.longitude, 'notes', c.notes) - ORDER BY c.date DESC) - FROM - concerts c + SELECT json_agg( + json_build_object( + 'id', c.id, + 'date', c.date, + 'venue_name', v.name, + 'venue_name_short', trim(split_part(v.name, ',', 1)), + 'venue_latitude', v.latitude, + 'venue_longitude', v.longitude, + 'notes', c.notes + ) + ORDER BY c.date DESC + ) + FROM concerts c LEFT JOIN venues v ON c.venue = v.id - WHERE - c.artist = ar.id) AS concerts, + WHERE c.artist = ar.id + ) AS concerts, ( - SELECT - json_agg(json_build_object('title', b.title, 'author', b.author, 'url', b.slug) - ORDER BY b.title ASC) - FROM - books_artists ba + SELECT json_agg( + json_build_object('title', b.title, 'author', b.author, 'url', b.slug) + ORDER BY b.title ASC + ) + FROM books_artists ba LEFT JOIN books b ON ba.books_id = b.id - WHERE - ba.artists_id = ar.id) AS books, + WHERE ba.artists_id = ar.id + ) AS books, ( - SELECT - json_agg(json_build_object('title', m.title, 'year', m.year, 'url', m.slug) - ORDER BY m.year DESC) - FROM - movies_artists ma + SELECT json_agg( + json_build_object('title', m.title, 'year', m.year, 'url', m.slug) + ORDER BY m.year DESC + ) + FROM movies_artists ma LEFT JOIN movies m ON ma.movies_id = m.id - WHERE - ma.artists_id = ar.id) AS movies, + WHERE ma.artists_id = ar.id + ) AS movies, ( - SELECT - json_agg(json_build_object('title', s.title, 'year', s.year, 'url', s.slug) - ORDER BY s.year DESC) - FROM - shows_artists sa + SELECT json_agg( + json_build_object('title', s.title, 'year', s.year, 'url', s.slug) + ORDER BY s.year DESC + ) + FROM shows_artists sa LEFT JOIN shows s ON sa.shows_id = s.id - WHERE - sa.artists_id = ar.id) AS shows, + WHERE sa.artists_id = ar.id + ) AS shows, ( - SELECT - json_agg(json_build_object('title', p.title, 'date', p.date, 'url', p.slug) - ORDER BY p.date DESC) - FROM - posts_artists pa + SELECT json_agg( + json_build_object('title', p.title, 'date', p.date, 'url', p.slug) + ORDER BY p.date DESC + ) + FROM posts_artists pa LEFT JOIN posts p ON pa.posts_id = p.id - WHERE - pa.artists_id = ar.id) AS posts, + WHERE pa.artists_id = ar.id + ) AS posts, ( - SELECT - json_agg(json_build_object('name', related_ar.name_string, 'url', related_ar.slug, 'country', related_ar.country, 'total_plays', to_char(related_ar.total_plays, 'FM999,999,999,999')) - ORDER BY related_ar.name_string) - FROM - related_artists ra + SELECT json_agg( + json_build_object( + 'name', related_ar.name_string, + 'url', related_ar.slug, + 'country', related_ar.country, + 'total_plays', to_char(related_ar.total_plays, 'FM999,999,999,999') + ) + ORDER BY related_ar.name_string + ) + FROM related_artists ra LEFT JOIN artists related_ar ON ra.related_artists_id = related_ar.id - WHERE - ra.artists_id = ar.id) AS related_artists -FROM - artists ar - LEFT JOIN directus_files df ON ar.art = df.id - LEFT JOIN genres g ON ar.genres = g.id + WHERE ra.artists_id = ar.id + ) AS related_artists +FROM artists ar +LEFT JOIN directus_files df ON ar.art = df.id +LEFT JOIN genres g ON ar.genres = g.id GROUP BY ar.id, df.filename_disk, diff --git a/server/utils/icons.php b/server/utils/icons.php index f95159b..1b39e12 100644 --- a/server/utils/icons.php +++ b/server/utils/icons.php @@ -10,7 +10,8 @@ 'device-tv-old' => '', 'headphones' => '', 'movie' => '', - 'star' => '' + 'star' => '', + 'vinyl' => '' ]; return $icons[$iconName] ?? '[Missing: ' . htmlspecialchars($iconName) . ']'; diff --git a/server/utils/media.php b/server/utils/media.php index 5b7195f..5439811 100644 --- a/server/utils/media.php +++ b/server/utils/media.php @@ -1,5 +1,57 @@ 0 ? $count : count($items); + + echo '
Album | -Plays | -Year | -
---|---|---|
= htmlspecialchars($album["name"]) ?> | -= $album["total_plays"] > 0 ? $album["total_plays"] : "-" ?> | -= $album["release_year"] ?> | -