feat(tags): this adds support for post, link, book, show and movie tags with a tag list view and per tag pages

This commit is contained in:
Cory Dransfeldt 2025-04-16 18:59:47 -07:00
parent 3d866262ca
commit 6fdc0b56b9
No known key found for this signature in database
35 changed files with 500 additions and 70 deletions

View file

@ -6,6 +6,7 @@ WITH activity_data AS (
p.content AS description,
p.url AS url,
p.featured AS featured,
p.tags::TEXT[],
NULL AS author,
NULL AS image,
NULL AS rating,
@ -26,6 +27,7 @@ WITH activity_data AS (
l.description,
l.link AS url,
NULL AS featured,
l.tags::TEXT[],
l.author,
NULL AS image,
NULL AS rating,
@ -48,6 +50,7 @@ WITH activity_data AS (
b.description,
b.url AS url,
NULL AS featured,
b.tags::TEXT[],
NULL AS author,
b.image,
b.rating,
@ -71,6 +74,7 @@ WITH activity_data AS (
m.description,
m.url AS url,
NULL AS featured,
m.tags::TEXT[],
NULL AS author,
m.image,
m.rating,
@ -92,6 +96,7 @@ WITH activity_data AS (
c.concert_notes AS description,
NULL AS url,
NULL AS featured,
NULL AS tags,
NULL AS author,
NULL AS image,
NULL AS rating,

View file

@ -39,6 +39,10 @@ WITH sitemap_data AS (
ss.slug AS url
FROM
static_slugs ss
UNION ALL
SELECT CONCAT('/tags/', LOWER(REPLACE(tag, ' ', '-'))) AS url
FROM optimized_all_tags
WHERE tag IS NOT NULL AND TRIM(tag) <> ''
)
SELECT
url

View file

@ -0,0 +1,68 @@
CREATE OR REPLACE VIEW optimized_tagged_content AS
SELECT
unnest(p.tags) AS tag,
p.title::TEXT,
p.url::TEXT,
p.date::timestamp WITHOUT TIME ZONE AS content_date,
NULL AS author,
NULL::TEXT AS rating,
p.featured,
p.tags::TEXT[],
'article'::TEXT AS type,
'Post'::TEXT AS label
FROM optimized_posts p
UNION ALL
SELECT
unnest(l.tags) AS tag,
l.title::TEXT,
l.link::TEXT AS url,
l.date::timestamp WITHOUT TIME ZONE AS content_date,
l.author,
NULL::TEXT AS rating,
NULL::BOOLEAN AS featured,
l.tags::TEXT[],
'link'::TEXT AS type,
'Link'::TEXT AS label
FROM optimized_links l
UNION ALL
SELECT
unnest(b.tags) AS tag,
b.title::TEXT,
b.url::TEXT,
b.date_finished::timestamp WITHOUT TIME ZONE AS content_date,
NULL AS author,
b.rating::TEXT,
NULL::BOOLEAN AS featured,
b.tags::TEXT[],
'books'::TEXT AS type,
'Book'::TEXT AS label
FROM optimized_books b
WHERE LOWER(b.status) = 'finished'
UNION ALL
SELECT
unnest(m.tags) AS tag,
m.title::TEXT,
m.url::TEXT,
m.last_watched::timestamp WITHOUT TIME ZONE AS content_date,
NULL AS author,
m.rating::TEXT,
NULL::BOOLEAN AS featured,
m.tags::TEXT[],
'movies'::TEXT AS type,
'Movie'::TEXT AS label
FROM optimized_movies m
WHERE m.last_watched IS NOT NULL
UNION ALL
SELECT
unnest(s.tags) AS tag,
s.title::TEXT,
s.url::TEXT,
s.last_watched_at::timestamp WITHOUT TIME ZONE AS content_date,
NULL AS author,
NULL::TEXT AS rating,
NULL::BOOLEAN AS featured,
s.tags::TEXT[],
'tv'::TEXT AS type,
'Show'::TEXT AS label
FROM optimized_shows s
WHERE s.last_watched_at IS NOT NULL;

View file

@ -0,0 +1,7 @@
CREATE OR REPLACE VIEW optimized_all_tags AS
SELECT
tag,
COUNT(*) AS uses
FROM optimized_tagged_content
GROUP BY tag
ORDER BY tag ASC;