117 lines
2.2 KiB
SQL
117 lines
2.2 KiB
SQL
CREATE OR REPLACE VIEW optimized_all_activity AS
|
|
WITH
|
|
feed_data AS (
|
|
SELECT
|
|
json_build_object(
|
|
'title',
|
|
p.title,
|
|
'url',
|
|
p.url,
|
|
'description',
|
|
p.content,
|
|
'date',
|
|
p.date,
|
|
'type',
|
|
'article',
|
|
'label',
|
|
'Post',
|
|
'content',
|
|
p.content
|
|
) AS feed
|
|
FROM
|
|
optimized_posts p
|
|
UNION ALL
|
|
SELECT
|
|
json_build_object(
|
|
'title',
|
|
CONCAT(l.title, ' via ', l.author ->> 'name'),
|
|
'url',
|
|
l.link,
|
|
'description',
|
|
l.description,
|
|
'date',
|
|
l.date,
|
|
'type',
|
|
'link',
|
|
'label',
|
|
'Link',
|
|
'author',
|
|
l.author
|
|
) AS feed
|
|
FROM
|
|
optimized_links l
|
|
UNION ALL
|
|
SELECT
|
|
CASE
|
|
WHEN LOWER(b.status) = 'finished' THEN json_build_object(
|
|
'title',
|
|
CONCAT(
|
|
b.title,
|
|
' by ',
|
|
b.author,
|
|
CASE
|
|
WHEN b.rating IS NOT NULL THEN CONCAT(' (', b.rating, ')')
|
|
ELSE ''
|
|
END
|
|
),
|
|
'url',
|
|
b.url,
|
|
'description',
|
|
COALESCE(b.review, b.description),
|
|
'date',
|
|
b.date_finished,
|
|
'type',
|
|
'books',
|
|
'label',
|
|
'Book',
|
|
'image',
|
|
b.image,
|
|
'rating',
|
|
b.rating
|
|
)
|
|
ELSE NULL
|
|
END AS feed
|
|
FROM
|
|
optimized_books b
|
|
UNION ALL
|
|
SELECT
|
|
CASE
|
|
WHEN m.last_watched IS NOT NULL THEN json_build_object(
|
|
'title',
|
|
CONCAT(
|
|
m.title,
|
|
CASE
|
|
WHEN m.rating IS NOT NULL THEN CONCAT(' (', m.rating, ')')
|
|
ELSE ''
|
|
END
|
|
),
|
|
'url',
|
|
m.url,
|
|
'description',
|
|
COALESCE(m.review, m.description),
|
|
'date',
|
|
m.last_watched,
|
|
'type',
|
|
'movies',
|
|
'label',
|
|
'Movie',
|
|
'image',
|
|
m.image,
|
|
'rating',
|
|
m.rating
|
|
)
|
|
ELSE NULL
|
|
END AS feed
|
|
FROM
|
|
optimized_movies m
|
|
)
|
|
SELECT
|
|
feed
|
|
FROM
|
|
feed_data
|
|
WHERE
|
|
feed IS NOT NULL
|
|
ORDER BY
|
|
(feed ->> 'date')::timestamp DESC
|
|
LIMIT
|
|
20;
|