diff --git a/app.py b/app.py index 961696d..a66bdce 100644 --- a/app.py +++ b/app.py @@ -432,55 +432,67 @@ def api_posts(): cutoff_date = datetime.utcnow() - timedelta(days=time_filter_days) time_cutoff = cutoff_date.timestamp() - # Collect raw posts for filtering - raw_posts = [] - for post_uuid, post_data in cached_posts.items(): - # Apply time filter first if enabled + # ==================================================================== + # START OF REFACTORED SECTION + # ==================================================================== + + def _post_should_be_included(post_data): + """Check if a post passes all pre-filterset criteria.""" + # Apply time filter if time_filter_enabled and time_cutoff: - post_timestamp = post_data.get('timestamp', 0) - if post_timestamp < time_cutoff: - continue - # Apply community filter (before filterset) + if post_data.get('timestamp', 0) < time_cutoff: + return False + + # Apply community filter if community and post_data.get('source', '').lower() != community.lower(): - continue + return False - # Apply platform filter (before filterset) + # Apply platform filter if platform and post_data.get('platform', '').lower() != platform.lower(): - continue + return False - # Apply user's community preferences (before filterset) + # Apply user's community preferences if user_communities: post_source = post_data.get('source', '').lower() post_platform = post_data.get('platform', '').lower() - - # Check if this post matches any of the user's selected communities - matches_community = False - for selected_community in user_communities: - selected_community = selected_community.lower() - # Match by exact source name or platform name - if (post_source == selected_community or - post_platform == selected_community or - selected_community in post_source): - matches_community = True - break - - if not matches_community: - continue + if not any( + post_source == c or post_platform == c or c in post_source + for c in user_communities + ): + # ==================================================================== + # MODIFICATION: Add logging here + # ==================================================================== + logger.error( + f"Post filtered out for user {current_user.id if current_user.is_authenticated else 'anonymous'}: " + f"Community mismatch. Platform='{post_platform}', Source='{post_source}', " + f"User Communities={user_communities}" + ) + # ==================================================================== + return False - # Apply search filter (before filterset) + # Apply search filter if search_query: title = post_data.get('title', '').lower() content = post_data.get('content', '').lower() author = post_data.get('author', '').lower() source = post_data.get('source', '').lower() - if not (search_query in title or search_query in content or search_query in author or search_query in source): - continue + return False + + return True - raw_posts.append(post_data) + # Collect raw posts using a clean, declarative list comprehension + raw_posts = [ + post_data for post_data in cached_posts.values() + if _post_should_be_included(post_data) + ] + + # ==================================================================== + # END OF REFACTORED SECTION + # ==================================================================== # Apply filterset using FilterEngine filtered_posts = filter_engine.apply_filterset(raw_posts, filterset_name, use_cache=True)