coryd.dev/queries/views/feeds/oembed.sql

61 lines
2 KiB
SQL

CREATE OR REPLACE VIEW optimized_oembed AS
WITH oembed_data AS (
SELECT
'post' AS type,
p.url::TEXT AS url,
p.title AS title,
p.description AS description,
COALESCE(NULLIF(p.metadata->>'open_graph_image', ''), (SELECT metadata->>'open_graph_image' FROM optimized_globals LIMIT 1)) AS image_url,
p.date AS content_date
FROM optimized_posts p
UNION ALL
SELECT
'book' AS type,
b.url::TEXT AS url,
b.title AS title,
b.description AS description,
COALESCE(NULLIF(b.metadata->>'open_graph_image', ''), (SELECT metadata->>'open_graph_image' FROM optimized_globals LIMIT 1)) AS image_url,
b.date_finished AS content_date
FROM optimized_books b
UNION ALL
SELECT
'artist' AS type,
ar.url::TEXT AS url,
ar.name AS title,
ar.description AS description,
COALESCE(NULLIF(ar.metadata->>'open_graph_image', ''), (SELECT metadata->>'open_graph_image' FROM optimized_globals LIMIT 1)) AS image_url,
CURRENT_TIMESTAMP AS content_date
FROM optimized_artists ar
UNION ALL
SELECT
'genre' AS type,
g.url::TEXT AS url,
g.name AS title,
g.description AS description,
COALESCE(NULLIF(g.metadata->>'open_graph_image', ''), (SELECT metadata->>'open_graph_image' FROM optimized_globals LIMIT 1)) AS image_url,
CURRENT_TIMESTAMP AS content_date
FROM optimized_genres g
UNION ALL
SELECT
'show' AS type,
s.url::TEXT AS url,
s.title AS title,
s.description AS description,
COALESCE(NULLIF(s.metadata->>'open_graph_image', ''), (SELECT metadata->>'open_graph_image' FROM optimized_globals LIMIT 1)) AS image_url,
s.last_watched_at AS content_date
FROM optimized_shows s
UNION ALL
SELECT
'movie' AS type,
m.url::TEXT AS url,
m.title AS title,
m.description AS description,
COALESCE(NULLIF(m.metadata->>'open_graph_image', ''), (SELECT metadata->>'open_graph_image' FROM optimized_globals LIMIT 1)) AS image_url,
m.last_watched AS content_date
FROM optimized_movies m
)
SELECT
ROW_NUMBER() OVER (ORDER BY url) AS id,
*
FROM
oembed_data;