from django.shortcuts import render from rest_framework import viewsets from .models import Post, PostAnalytics from .serializers import PostSerializer, PostAnalyticsSerializer from datetime import timedelta from django.utils import timezone from django.utils.dateparse import parse_datetime class PostViewSet(viewsets.ModelViewSet): queryset = Post.objects.all() serializer_class = PostSerializer def get_queryset(self): queryset = Post.objects.all() reddit_id = self.request.query_params.get('reddit_id', None) last_7_days = self.request.query_params.get('last_7_days', None) if reddit_id is not None: queryset = queryset.filter(reddit_id=reddit_id) if last_7_days is not None: # Get the current time and subtract 7 days, convert to Unix timestamp date_threshold = timezone.now() - timedelta(days=7) date_threshold_unix = date_threshold.timestamp() # Filter using the Unix timestamp queryset = queryset.filter(created_utc__gte=date_threshold_unix) return queryset class PostAnalyticsViewSet(viewsets.ModelViewSet): queryset = PostAnalytics.objects.all() serializer_class = PostAnalyticsSerializer def get_queryset(self): queryset = PostAnalytics.objects.all() post_id = self.request.query_params.get('post', None) time_begin = self.request.query_params.get('time_begin', None) time_end = self.request.query_params.get('time_end', None) if post_id is not None: queryset = queryset.filter(post=post_id) if time_begin is not None and time_end is not None: # Parse the datetime strings to timezone-aware datetime objects time_begin_parsed = parse_datetime(time_begin) time_end_parsed = parse_datetime(time_end) # Ensure datetime objects are timezone-aware if time_begin_parsed is not None and time_end_parsed is not None: queryset = queryset.filter(created_at__gte=time_begin_parsed, created_at__lte=time_end_parsed) else: # Handle invalid datetime format # This is where you could log an error or handle the case where datetime strings are invalid pass return queryset