95 lines
No EOL
2.2 KiB
Text
95 lines
No EOL
2.2 KiB
Text
CREATE OR REPLACE VIEW optimized_all_activity AS
|
|
WITH feed_data AS (
|
|
SELECT
|
|
p.date AS content_date,
|
|
'post' AS content_type,
|
|
p.title,
|
|
p.description,
|
|
CONCAT('https://coryd.dev', p.url) AS url,
|
|
NULL AS image,
|
|
NULL AS rating,
|
|
p.tags,
|
|
json_build_object(
|
|
'title', p.title,
|
|
'url', CONCAT('https://coryd.dev', p.url),
|
|
'description', p.description,
|
|
'date', p.date
|
|
) AS feed
|
|
FROM optimized_posts p
|
|
|
|
UNION ALL
|
|
|
|
SELECT
|
|
l.date AS content_date,
|
|
'link' AS content_type,
|
|
l.title,
|
|
l.description,
|
|
l.link AS url,
|
|
NULL AS image,
|
|
NULL AS rating,
|
|
l.tags,
|
|
json_build_object(
|
|
'title', l.title,
|
|
'url', l.link,
|
|
'description', l.description,
|
|
'date', l.date
|
|
) AS feed
|
|
FROM optimized_links l
|
|
|
|
UNION ALL
|
|
|
|
SELECT
|
|
b.date_finished AS content_date,
|
|
'book' AS content_type,
|
|
b.title,
|
|
b.description,
|
|
CONCAT('https://coryd.dev', b.url) AS url,
|
|
b.image,
|
|
b.rating,
|
|
b.tags,
|
|
CASE
|
|
WHEN LOWER(b.status) = 'finished' THEN json_build_object(
|
|
'title', b.title,
|
|
'url', CONCAT('https://coryd.dev', b.url),
|
|
'description', b.description,
|
|
'image', b.image,
|
|
'rating', b.rating,
|
|
'date', b.date_finished
|
|
)
|
|
ELSE NULL
|
|
END AS feed
|
|
FROM optimized_books b
|
|
|
|
UNION ALL
|
|
|
|
SELECT
|
|
m.last_watched AS content_date,
|
|
'movie' AS content_type,
|
|
m.title,
|
|
m.description,
|
|
CONCAT('https://coryd.dev', m.url) AS url,
|
|
m.image,
|
|
m.rating,
|
|
m.tags,
|
|
CASE
|
|
WHEN m.last_watched IS NOT NULL THEN json_build_object(
|
|
'title', m.title,
|
|
'url', CONCAT('https://coryd.dev', m.url),
|
|
'description', m.description,
|
|
'image', m.image,
|
|
'rating', m.rating,
|
|
'date', m.last_watched
|
|
)
|
|
ELSE NULL
|
|
END AS feed
|
|
FROM optimized_movies m
|
|
)
|
|
|
|
SELECT json_agg(feed_data.* ORDER BY feed_data.content_date DESC) AS feed
|
|
FROM (
|
|
SELECT *
|
|
FROM feed_data
|
|
WHERE feed IS NOT NULL
|
|
ORDER BY content_date DESC
|
|
LIMIT 20
|
|
) AS feed_data; |