109 lines
2.4 KiB
Text
109 lines
2.4 KiB
Text
CREATE OR REPLACE VIEW optimized_recent_activity AS
|
|
WITH activity_data AS (
|
|
SELECT
|
|
p.date AS content_date,
|
|
p.title,
|
|
p.content AS description,
|
|
p.url AS url,
|
|
NULL AS author,
|
|
NULL AS image,
|
|
NULL AS rating,
|
|
NULL AS artist_url,
|
|
NULL AS venue_lat,
|
|
NULL AS venue_lon,
|
|
NULL AS venue_name,
|
|
NULL AS notes,
|
|
'article' AS type,
|
|
'Post' AS label
|
|
FROM optimized_posts p
|
|
|
|
UNION ALL
|
|
|
|
SELECT
|
|
l.date AS content_date,
|
|
l.title,
|
|
l.description,
|
|
l.link AS url,
|
|
l.author,
|
|
NULL AS image,
|
|
NULL AS rating,
|
|
NULL AS artist_url,
|
|
NULL AS venue_lat,
|
|
NULL AS venue_lon,
|
|
NULL AS venue_name,
|
|
NULL AS notes,
|
|
'link' AS type,
|
|
'Link' AS label
|
|
FROM optimized_links l
|
|
|
|
UNION ALL
|
|
|
|
SELECT
|
|
b.date_finished AS content_date,
|
|
CONCAT(b.title,
|
|
CASE WHEN b.rating IS NOT NULL THEN CONCAT(' (', b.rating, ')') ELSE '' END
|
|
) AS title,
|
|
b.description,
|
|
b.url AS url,
|
|
NULL AS author,
|
|
b.image,
|
|
b.rating,
|
|
NULL AS artist_url,
|
|
NULL AS venue_lat,
|
|
NULL AS venue_lon,
|
|
NULL AS venue_name,
|
|
NULL AS notes,
|
|
'books' AS type,
|
|
'Book' AS label
|
|
FROM optimized_books b
|
|
WHERE LOWER(b.status) = 'finished'
|
|
|
|
UNION ALL
|
|
|
|
SELECT
|
|
m.last_watched AS content_date,
|
|
CONCAT(m.title,
|
|
CASE WHEN m.rating IS NOT NULL THEN CONCAT(' (', m.rating, ')') ELSE '' END
|
|
) AS title,
|
|
m.description,
|
|
m.url AS url,
|
|
NULL AS author,
|
|
m.image,
|
|
m.rating,
|
|
NULL AS artist_url,
|
|
NULL AS venue_lat,
|
|
NULL AS venue_lon,
|
|
NULL AS venue_name,
|
|
NULL AS notes,
|
|
'movies' AS type,
|
|
'Movie' AS label
|
|
FROM optimized_movies m
|
|
WHERE m.last_watched IS NOT NULL
|
|
|
|
UNION ALL
|
|
|
|
SELECT
|
|
c.date AS content_date,
|
|
CONCAT(c.artist->>'name', ' at ', c.venue->>'name_short') AS title,
|
|
c.concert_notes AS description,
|
|
NULL AS url,
|
|
NULL AS author,
|
|
NULL AS image,
|
|
NULL AS rating,
|
|
c.artist->>'url' AS artist_url,
|
|
c.venue->>'latitude' AS venue_lat,
|
|
c.venue->>'longitude' AS venue_lon,
|
|
c.venue->>'name_short' AS venue_name,
|
|
c.notes AS notes,
|
|
'concerts' AS type,
|
|
'Concert' AS label
|
|
FROM optimized_concerts c
|
|
)
|
|
SELECT json_agg(recent_activity_data ORDER BY recent_activity_data.content_date DESC) AS feed
|
|
FROM (
|
|
SELECT *
|
|
FROM activity_data
|
|
WHERE content_date IS NOT NULL
|
|
ORDER BY content_date DESC
|
|
LIMIT 20
|
|
) AS recent_activity_data;
|