feat(*): refactor metadata handling; move metadata to backend where possible, refine client views

This commit is contained in:
Cory Dransfeldt 2025-05-25 20:15:45 -07:00
parent 929bc9f9f8
commit 9687509e4a
No known key found for this signature in database
35 changed files with 506 additions and 339 deletions

View file

@ -165,12 +165,26 @@ SELECT
END
) AS feed,
json_build_object(
'title', p.title,
'description', LEFT(
regexp_replace(
regexp_replace(
regexp_replace(p.description, E'[*_`~#>-]', '', 'g'),
E'\\[(.*?)\\]\\((.*?)\\)', E'\\1', 'g'
),
E'!\\[(.*?)\\]\\((.*?)\\)', '', 'g'
),
250
),
'open_graph_image', CASE
WHEN df.filename_disk IS NOT NULL AND df.filename_disk != '' AND df.filename_disk != '/' THEN CONCAT('/', df.filename_disk)
ELSE NULL
END
WHEN df.filename_disk IS NOT NULL AND df.filename_disk != '' AND df.filename_disk != '/' THEN
CONCAT('/', df.filename_disk)
ELSE globals.metadata->>'open_graph_image'
END,
'url', CONCAT(globals.url, p.slug),
'type', 'article'
) AS metadata
FROM posts p
LEFT JOIN directus_files df ON p.image = df.id
CROSS JOIN optimized_globals globals
GROUP BY p.id, df.filename_disk, globals.cdn_url;
GROUP BY p.id, df.filename_disk, globals.cdn_url, globals.site_name, globals.url, globals.metadata->>'open_graph_image';

View file

@ -5,11 +5,24 @@ SELECT
p.permalink,
p.description,
json_build_object(
'title', CONCAT(p.title, '', globals.site_name),
'description', LEFT(
regexp_replace(
regexp_replace(
regexp_replace(p.description, E'[*_`~#>-]', '', 'g'),
E'\\[(.*?)\\]\\((.*?)\\)', '\\1', 'g'
),
E'!\\[(.*?)\\]\\((.*?)\\)', '', 'g'
),
250
),
'open_graph_image', CASE
WHEN df.filename_disk IS NOT NULL AND df.filename_disk != '' AND df.filename_disk != '/' THEN
CONCAT('/', df.filename_disk)
ELSE NULL
END
ELSE globals.metadata->>'open_graph_image'
END,
'url', CONCAT(globals.url, p.permalink),
'type', 'page'
) AS metadata,
p.updated,
(
@ -62,4 +75,7 @@ FROM
GROUP BY
p.id,
df.filename_disk,
globals.cdn_url;
globals.cdn_url,
globals.site_name,
globals.url,
globals.metadata->>'open_graph_image';

View file

@ -173,12 +173,25 @@ SELECT
END AS feed,
(SELECT TO_CHAR(days_read, 'FM999G999G999') FROM reading_streak LIMIT 1) AS days_read,
json_build_object(
'title', CONCAT('Book • ', b.title, ' by ', b.author, '', globals.site_name),
'description', LEFT(
regexp_replace(
regexp_replace(
regexp_replace( b.description, E'[*_`~#>-]', '', 'g'),
E'\\[(.*?)\\]\\((.*?)\\)', E'\\1', 'g'
),
E'!\\[(.*?)\\]\\((.*?)\\)', '', 'g'
),
250
),
'open_graph_image', CASE
WHEN df.filename_disk IS NOT NULL AND df.filename_disk != '' AND df.filename_disk != '/' THEN CONCAT('/', df.filename_disk)
ELSE NULL
END
END,
'url', CONCAT(globals.url, b.slug),
'type', 'book'
) AS metadata
FROM books b
LEFT JOIN directus_files df ON b.art = df.id
CROSS JOIN optimized_globals globals
GROUP BY b.id, df.filename_disk, globals.cdn_url;
GROUP BY b.id, df.filename_disk, globals.cdn_url, globals.site_name, globals.url;

View file

@ -179,15 +179,28 @@ SELECT
ELSE NULL
END AS feed,
json_build_object(
'title', CONCAT('Movie • ', m.title, '', globals.site_name),
'description', LEFT(
regexp_replace(
regexp_replace(
regexp_replace(m.description, E'[*_`~#>-]', '', 'g'),
E'\\[(.*?)\\]\\((.*?)\\)', E'\\1', 'g'
),
E'!\\[(.*?)\\]\\((.*?)\\)', '', 'g'
),
250
),
'open_graph_image', CASE
WHEN df2.filename_disk IS NOT NULL AND df2.filename_disk != '' AND df2.filename_disk != '/' THEN
CONCAT('/', df2.filename_disk)
ELSE NULL
END
END,
'url', CONCAT(globals.url, m.slug),
'type', 'movie'
) AS metadata
FROM movies m
LEFT JOIN directus_files df ON m.art = df.id
LEFT JOIN directus_files df2 ON m.backdrop = df2.id
CROSS JOIN optimized_globals globals
GROUP BY m.id, df.filename_disk, df2.filename_disk, globals.cdn_url
GROUP BY m.id, df.filename_disk, df2.filename_disk, globals.cdn_url, globals.site_name, globals.url
ORDER BY m.last_watched DESC;

View file

@ -186,13 +186,26 @@ SELECT
WHERE ra.artists_id = ar.id
) AS related_artists,
json_build_object(
'title', CONCAT('Artist • ', ar.name_string, '', globals.site_name),
'description', LEFT(
regexp_replace(
regexp_replace(
regexp_replace(ar.description, E'[*_`~#>-]', '', 'g'),
E'\\[(.*?)\\]\\((.*?)\\)', E'\\1', 'g'
),
E'!\\[(.*?)\\]\\((.*?)\\)', '', 'g'
),
250
),
'open_graph_image', CASE
WHEN df.filename_disk IS NOT NULL AND df.filename_disk != '' AND df.filename_disk != '/' THEN CONCAT('/', df.filename_disk)
ELSE NULL
END
END,
'url', CONCAT(globals.url, ar.slug),
'type', 'artist'
) AS metadata
FROM artists ar
LEFT JOIN directus_files df ON ar.art = df.id
LEFT JOIN genres g ON ar.genres = g.id
CROSS JOIN optimized_globals globals
GROUP BY ar.id, df.filename_disk, g.name, g.slug, g.emoji, globals.cdn_url;
GROUP BY ar.id, df.filename_disk, g.name, g.slug, g.emoji, globals.cdn_url, globals.site_name, globals.url;

View file

@ -106,6 +106,20 @@ SELECT
WHERE pg.genres_id = g.id
) AS posts,
json_build_object(
'title', CONCAT('Genre • ', g.name, '', globals.site_name),
'description', LEFT(
regexp_replace(
regexp_replace(
regexp_replace(
g.description,
E'[*_`~#>-]', '', 'g'
),
E'\\[(.*?)\\]\\((.*?)\\)', E'\\1', 'g'
),
E'!\\[(.*?)\\]\\((.*?)\\)', '', 'g'
),
250
),
'open_graph_image', (
SELECT CONCAT('/', df_artist.filename_disk)
FROM artists a
@ -115,7 +129,9 @@ SELECT
AND df_artist.filename_disk != ''
ORDER BY a.total_plays DESC
LIMIT 1
)
),
'url', CONCAT(globals.url, g.slug),
'type', 'genre'
) AS metadata
FROM genres g
CROSS JOIN optimized_globals globals

View file

@ -179,15 +179,28 @@ SELECT
) AS artists,
MAX(e.last_watched_at) AS last_watched_at,
json_build_object(
'title', CONCAT('Show • ', s.title, '', globals.site_name),
'description', LEFT(
regexp_replace(
regexp_replace(
regexp_replace(s.description, E'[*_`~#>-]', '', 'g'),
E'\\[(.*?)\\]\\((.*?)\\)', E'\\1', 'g'
),
E'!\\[(.*?)\\]\\((.*?)\\)', '', 'g'
),
250
),
'open_graph_image', CASE
WHEN df_backdrop.filename_disk IS NOT NULL AND df_backdrop.filename_disk != '' AND df_backdrop.filename_disk != '/' THEN CONCAT('/', df_backdrop.filename_disk)
ELSE NULL
END
END,
'url', CONCAT(globals.url, s.slug),
'type', 'show'
) AS metadata
FROM shows s
LEFT JOIN episodes e ON s.id = e.show
LEFT JOIN directus_files df_art ON s.art = df_art.id
LEFT JOIN directus_files df_backdrop ON s.backdrop = df_backdrop.id
CROSS JOIN optimized_globals globals
GROUP BY s.id, df_art.filename_disk, df_backdrop.filename_disk, globals.cdn_url
GROUP BY s.id, df_art.filename_disk, df_backdrop.filename_disk, globals.cdn_url, globals.site_name, globals.url
ORDER BY MAX(e.last_watched_at) DESC;