-- v_feed: uploads with uploader name, like count, and comment count CREATE VIEW v_feed AS SELECT u.id, u.event_id, u.user_id, usr.display_name AS uploader_name, usr.is_banned, usr.uploads_hidden, u.preview_path, u.thumbnail_path, u.mime_type, u.caption, u.created_at, COUNT(DISTINCT l.user_id) AS like_count, COUNT(DISTINCT c.id) AS comment_count FROM upload u JOIN "user" usr ON u.user_id = usr.id LEFT JOIN "like" l ON l.upload_id = u.id LEFT JOIN comment c ON c.upload_id = u.id AND c.deleted_at IS NULL WHERE u.deleted_at IS NULL AND usr.uploads_hidden = FALSE GROUP BY u.id, usr.display_name, usr.is_banned, usr.uploads_hidden; -- v_hashtag_counts: most-used hashtags for an event (for filter chips) CREATE VIEW v_hashtag_counts AS SELECT h.event_id, h.tag, COUNT(uh.upload_id) AS upload_count FROM hashtag h JOIN upload_hashtag uh ON uh.hashtag_id = h.id JOIN upload u ON u.id = uh.upload_id AND u.deleted_at IS NULL GROUP BY h.event_id, h.id, h.tag ORDER BY upload_count DESC;