2024-03-05 21:52:36 -05:00

75 lines
2.8 KiB
Python

from django.shortcuts import render
from rest_framework import viewsets
from .models import Post, PostAnalytics, CostcoProduct
from .serializers import PostSerializer, PostAnalyticsSerializer, CostcoProductSerializer
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
class CostcoProductViewSet(viewsets.ModelViewSet):
queryset = CostcoProduct.objects.all()
serializer_class = CostcoProductSerializer
def get_queryset(self):
queryset = CostcoProduct.objects.all()
active = self.request.query_params.get('active', None)
sku = self.request.query_params.get('sku', None)
if sku is not None:
queryset = queryset.filter(sku=sku)
if active is not None:
queryset = queryset.filter(active=active)
return queryset