fix: exclude NSFW posts from search, discover, trending, hashtag pages - only allow in following feed + own profile

This commit is contained in:
Patrick Britton 2026-02-07 17:39:31 -06:00
parent 27b48128fe
commit 8ea63edf8c
2 changed files with 17 additions and 1 deletions

View file

@ -165,7 +165,20 @@ func (r *PostRepository) GetFeed(ctx context.Context, userID string, categorySlu
AND NOT public.has_block_between(p.author_id, CASE WHEN $4::text != '' THEN $4::text::uuid ELSE NULL END) AND NOT public.has_block_between(p.author_id, CASE WHEN $4::text != '' THEN $4::text::uuid ELSE NULL END)
AND ($3 = FALSE OR (COALESCE(p.video_url, '') <> '' OR (COALESCE(p.image_url, '') ILIKE '%.mp4'))) AND ($3 = FALSE OR (COALESCE(p.video_url, '') <> '' OR (COALESCE(p.image_url, '') ILIKE '%.mp4')))
AND ($5 = '' OR c.slug = $5) AND ($5 = '' OR c.slug = $5)
AND ($6 = TRUE OR COALESCE(p.is_nsfw, FALSE) = FALSE) AND (
COALESCE(p.is_nsfw, FALSE) = FALSE
OR (
$6 = TRUE
AND (
p.author_id = CASE WHEN $4::text != '' THEN $4::text::uuid ELSE NULL END
OR EXISTS (
SELECT 1 FROM public.follows f
WHERE f.follower_id = CASE WHEN $4::text != '' THEN $4::text::uuid ELSE NULL END
AND f.following_id = p.author_id AND f.status = 'accepted'
)
)
)
)
ORDER BY p.created_at DESC ORDER BY p.created_at DESC
LIMIT $1 OFFSET $2 LIMIT $1 OFFSET $2
` `
@ -758,6 +771,7 @@ func (r *PostRepository) SearchPosts(ctx context.Context, query string, viewerID
OR $1 = ANY(p.tags) OR $1 = ANY(p.tags)
) )
AND p.deleted_at IS NULL AND p.status = 'active' AND p.deleted_at IS NULL AND p.status = 'active'
AND COALESCE(p.is_nsfw, FALSE) = FALSE
AND ( AND (
p.author_id = CASE WHEN $3 != '' THEN $3::uuid ELSE NULL END p.author_id = CASE WHEN $3 != '' THEN $3::uuid ELSE NULL END
OR pr.is_private = FALSE OR pr.is_private = FALSE
@ -1307,6 +1321,7 @@ func (r *PostRepository) GetPopularPublicPosts(ctx context.Context, viewerID str
WHERE p.deleted_at IS NULL AND p.status = 'active' WHERE p.deleted_at IS NULL AND p.status = 'active'
AND pr.is_private = FALSE AND pr.is_private = FALSE
AND p.visibility = 'public' AND p.visibility = 'public'
AND COALESCE(p.is_nsfw, FALSE) = FALSE
ORDER BY (COALESCE(m.like_count, 0) * 2 + COALESCE(m.comment_count, 0) * 5) DESC, p.created_at DESC ORDER BY (COALESCE(m.like_count, 0) * 2 + COALESCE(m.comment_count, 0) * 5) DESC, p.created_at DESC
LIMIT $1 LIMIT $1
` `

View file

@ -201,6 +201,7 @@ func (r *TagRepository) GetPostsByHashtag(ctx context.Context, hashtagName, view
WHERE h.name = $1 WHERE h.name = $1
AND p.deleted_at IS NULL AND p.deleted_at IS NULL
AND p.status = 'active' AND p.status = 'active'
AND COALESCE(p.is_nsfw, FALSE) = FALSE
ORDER BY p.created_at DESC ORDER BY p.created_at DESC
LIMIT $4 OFFSET $5 LIMIT $4 OFFSET $5
`, normalized, normalized, viewerID, limit, offset) `, normalized, normalized, viewerID, limit, offset)