fix(associated-media): sorts + grid sizing

This commit is contained in:
Cory Dransfeldt 2025-05-24 18:49:25 -07:00
parent 6a41304b5f
commit 3dac23b171
No known key found for this signature in database
9 changed files with 116 additions and 61 deletions

View file

@ -7,44 +7,96 @@ SELECT
to_char(g.total_plays, 'FM999,999,999,999') AS total_plays,
g.wiki_link,
g.slug AS url,
(
SELECT
json_agg(json_build_object('name', a.name_string, 'url', a.slug, 'image', CONCAT('/', df_artist.filename_disk), 'total_plays', to_char(a.total_plays, 'FM999,999,999,999'))
ORDER BY a.total_plays DESC)
FROM
artists a
(
SELECT json_agg(
json_build_object(
'name', a.name_string,
'url', a.slug,
'image', CONCAT(globals.cdn_url, '/', df_artist.filename_disk),
'total_plays', to_char(a.total_plays, 'FM999,999,999,999'),
'grid', json_build_object(
'title', a.name_string,
'image', CONCAT(globals.cdn_url, '/', df_artist.filename_disk),
'alt', CONCAT(to_char(a.total_plays, 'FM999,999,999,999'), ' plays of ', a.name_string),
'subtext', CONCAT(to_char(a.total_plays, 'FM999,999,999,999'), ' plays'),
'url', a.slug
),
'type', 'music'
)
ORDER BY a.total_plays DESC
)
FROM artists a
LEFT JOIN directus_files df_artist ON a.art = df_artist.id
WHERE
a.genres = g.id) AS artists,
(
SELECT
json_agg(json_build_object('title', b.title, 'author', b.author, 'url', b.slug)
ORDER BY b.title ASC)
FROM
books b
JOIN genres_books gb ON gb.books_id = b.id
WHERE
gb.genres_id = g.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 m
JOIN genres_movies gm ON gm.movies_id = m.id
WHERE
gm.genres_id = g.id) AS movies,
(
SELECT
json_agg(json_build_object('title', p.title, 'date', p.date, 'url', p.slug)
ORDER BY p.date DESC)
FROM
posts_genres pg
LEFT JOIN posts p ON pg.posts_id = p.id
WHERE
pg.genres_id = g.id) AS posts
FROM
genres g
ORDER BY
g.id ASC;
WHERE a.genres = g.id
) AS artists,
(
SELECT json_agg(
json_build_object(
'title', b.title,
'author', b.author,
'url', b.slug,
'image', CONCAT(globals.cdn_url, '/', df_book.filename_disk),
'grid', json_build_object(
'title', b.title,
'image', CONCAT(globals.cdn_url, '/', df_book.filename_disk),
'alt', CONCAT('Cover for ', b.title, ' by ', b.author),
'subtext', b.author,
'url', b.slug
),
'type', 'books'
)
ORDER BY b.title ASC
)
FROM books b
JOIN genres_books gb ON gb.books_id = b.id
LEFT JOIN directus_files df_book ON b.art = df_book.id
WHERE gb.genres_id = g.id
) AS books,
(
SELECT json_agg(
json_build_object(
'title', m.title,
'year', m.year,
'url', m.slug,
'image', CONCAT(globals.cdn_url, '/', df_movie.filename_disk),
'grid', json_build_object(
'title', m.title,
'image', CONCAT(globals.cdn_url, '/', df_movie.filename_disk),
'alt', CONCAT('Poster for ', m.title),
'subtext', m.year,
'url', m.slug
),
'type', 'movies'
)
ORDER BY m.year ASC
)
FROM movies m
JOIN genres_movies gm ON gm.movies_id = m.id
LEFT JOIN directus_files df_movie ON m.art = df_movie.id
WHERE gm.genres_id = g.id
) AS movies,
(
SELECT json_agg(
json_build_object(
'title', p.title,
'date', p.date,
'url', p.slug,
'grid', json_build_object(
'title', p.title,
'image', CONCAT(globals.cdn_url, '/', df_post.filename_disk),
'alt', p.title,
'subtext', TO_CHAR(p.date, 'FMMonth DD, YYYY'),
'url', p.slug
),
'type', 'posts'
)
ORDER BY p.date DESC
)
FROM posts_genres pg
LEFT JOIN posts p ON pg.posts_id = p.id
LEFT JOIN directus_files df_post ON p.image = df_post.id
WHERE pg.genres_id = g.id
) AS posts
FROM genres g
CROSS JOIN optimized_globals globals
ORDER BY g.id ASC;