chore: search cleanup

This commit is contained in:
Cory Dransfeldt 2024-10-19 21:21:28 -07:00
parent 19d17f70d2
commit fca18da3f7
No known key found for this signature in database
36 changed files with 71 additions and 60 deletions

View file

@ -0,0 +1,91 @@
CREATE OR REPLACE VIEW optimized_all_activity AS
WITH feed_data AS (
SELECT
p.date AS content_date,
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,
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,
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,
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;

View file

@ -0,0 +1,97 @@
CREATE OR REPLACE VIEW optimized_search_index AS
WITH search_data AS (
SELECT
'post' AS type,
CONCAT('📝 ', p.title) AS title,
CONCAT('https://coryd.dev', p.url) AS url,
p.description AS description,
p.tags,
NULL AS genre_name,
NULL AS genre_url,
NULL::integer AS total_plays,
p.date AS content_date
FROM optimized_posts p
UNION ALL
SELECT
'link' AS type,
CONCAT('🔗 ', l.title, ' via ', l.name) AS title,
l.link AS url,
l.description AS description,
l.tags,
NULL AS genre_name,
NULL AS genre_url,
NULL::integer AS total_plays,
l.date AS content_date
FROM optimized_links l
UNION ALL
SELECT
'book' AS type,
CASE
WHEN b.rating IS NOT NULL THEN CONCAT('📖 ', b.title, ' (', b.rating, ')')
ELSE CONCAT('📖 ', b.title)
END AS title,
CONCAT('https://coryd.dev', b.url) AS url,
b.description AS description,
b.tags,
NULL AS genre_name,
NULL AS genre_url,
NULL::integer AS total_plays,
b.date_finished AS content_date
FROM optimized_books b
WHERE LOWER(b.status) = 'finished'
UNION ALL
SELECT
'artist' AS type,
CONCAT(COALESCE(ar.emoji, ar.genre_emoji, '🎧'), ' ', ar.name) AS title,
CONCAT('https://coryd.dev', ar.url) AS url,
ar.description AS description,
ARRAY[ar.genre_name] AS tags,
ar.genre_name,
CONCAT('https://coryd.dev', ar.genre_slug) AS genre_url,
ar.total_plays,
NULL AS content_date
FROM optimized_artists ar
UNION ALL
SELECT
'genre' AS type,
CONCAT(COALESCE(g.emoji, '🎵'), ' ', g.name) AS title,
CONCAT('https://coryd.dev', g.url) AS url,
g.description AS description,
NULL AS tags,
g.name AS genre_name,
CONCAT('https://coryd.dev', g.url) AS genre_url,
NULL::integer AS total_plays,
NULL AS content_date
FROM optimized_genres g
UNION ALL
SELECT
'show' AS type,
CASE
WHEN s.review IS NOT NULL THEN CONCAT('📺 ', s.title, ' (', s.year, ') - ', s.review)
ELSE CONCAT('📺 ', s.title, ' (', s.year, ')')
END AS title,
CONCAT('https://coryd.dev', s.url) AS url,
s.description AS description,
s.tags,
NULL AS genre_name,
NULL AS genre_url,
NULL::integer AS total_plays,
s.last_watched_at AS content_date
FROM optimized_shows s
WHERE s.last_watched_at IS NOT NULL
)
SELECT
ROW_NUMBER() OVER (ORDER BY url) AS id,
*
FROM search_data;

View file

@ -0,0 +1,68 @@
CREATE OR REPLACE VIEW optimized_sitemap AS
WITH sitemap_data AS (
SELECT
p.date AS content_date,
p.title,
CONCAT('https://coryd.dev', p.url) AS url,
'monthly' AS changefreq,
0.7 AS priority
FROM optimized_posts p
UNION ALL
SELECT
b.date_finished AS content_date,
b.title,
CONCAT('https://coryd.dev', b.url) AS url,
'monthly' AS changefreq,
0.5 AS priority
FROM optimized_books b
UNION ALL
SELECT
m.last_watched AS content_date,
m.title,
CONCAT('https://coryd.dev', m.url) AS url,
'weekly' AS changefreq,
0.6 AS priority
FROM optimized_movies m
UNION ALL
SELECT
NULL AS content_date,
ar.name AS title,
CONCAT('https://coryd.dev', ar.url) AS url,
'monthly' AS changefreq,
0.5 AS priority
FROM optimized_artists ar
UNION ALL
SELECT
NULL AS content_date,
g.name AS title,
CONCAT('https://coryd.dev', g.url) AS url,
'yearly' AS changefreq,
0.3 AS priority
FROM optimized_genres g
UNION ALL
SELECT
s.last_watched_at AS content_date,
s.title,
CONCAT('https://coryd.dev', s.url) AS url,
'weekly' AS changefreq,
0.8 AS priority
FROM optimized_shows s
)
SELECT
url,
title,
content_date AS lastmod,
changefreq,
priority
FROM sitemap_data;

View file

@ -0,0 +1,105 @@
CREATE OR REPLACE VIEW optimized_syndication AS
WITH syndication_data AS (
SELECT
p.date AS content_date,
p.title,
p.description,
CONCAT('https://coryd.dev', p.url) AS url,
p.tags,
json_build_object(
'title', CONCAT('📝 ', p.title, ' ', (
SELECT array_to_string(
array_agg('#' || initcap(replace(t.name, ' ', ''))), ' '
)
FROM unnest(p.tags) AS t(name)
)),
'description', p.description,
'url', CONCAT('https://coryd.dev', p.url),
'date', p.date
) AS syndication
FROM optimized_posts p
UNION ALL
SELECT
l.date AS content_date,
l.title,
l.description,
l.link AS url,
l.tags,
json_build_object(
'title', CONCAT('🔗 ', l.title,
CASE
WHEN l.mastodon IS NOT NULL THEN
' via @' || split_part(l.mastodon, '@', 2) || '@' || split_part(split_part(l.mastodon, 'https://', 2), '/', 1)
ELSE CONCAT(' via ', l.name)
END, ' ', (
SELECT array_to_string(
array_agg('#' || initcap(replace(t.name, ' ', ''))), ' '
)
FROM unnest(l.tags) AS t(name)
)
),
'description', l.description,
'url', l.link,
'date', l.date
) AS syndication
FROM optimized_links l
UNION ALL
SELECT
b.date_finished AS content_date,
b.title,
b.description,
CONCAT('https://coryd.dev', b.url) AS url,
b.tags,
CASE
WHEN LOWER(b.status) = 'finished' THEN json_build_object(
'title', CONCAT('📖 ', b.title, ' ', (
SELECT array_to_string(
array_agg('#' || initcap(replace(t.name, ' ', ''))), ' '
)
FROM unnest(b.tags) AS t(name)
)),
'description', b.description,
'url', CONCAT('https://coryd.dev', b.url),
'date', b.date_finished
)
ELSE NULL
END AS syndication
FROM optimized_books b
UNION ALL
SELECT
m.last_watched AS content_date,
m.title,
m.description,
CONCAT('https://coryd.dev', m.url) AS url,
m.tags,
CASE
WHEN m.last_watched IS NOT NULL THEN json_build_object(
'title', CONCAT('🎥 ', m.title, ' ', (
SELECT array_to_string(
array_agg('#' || initcap(replace(t.name, ' ', ''))), ' '
)
FROM unnest(m.tags) AS t(name)
)),
'description', m.description,
'url', CONCAT('https://coryd.dev', m.url),
'date', m.last_watched
)
ELSE NULL
END AS syndication
FROM optimized_movies m
)
SELECT json_agg(limited_data.*) AS syndication
FROM (
SELECT *
FROM syndication_data
WHERE syndication IS NOT NULL
ORDER BY content_date DESC
LIMIT 20
) AS limited_data;