75 lines
2.8 KiB
Python
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 |