Overhauled entire project config, added notifications, email templates, optimized stripe subscriptions, redis caching, and webdriver utilities

This commit is contained in:
Keannu Christian Bernasol 2024-05-10 23:15:29 +08:00
parent 7cbe8fd720
commit 99dfcef67b
84 changed files with 4300 additions and 867 deletions

View file

@ -0,0 +1,56 @@
from subscriptions.serializers import SubscriptionPlanSerializer, UserSubscriptionSerializer
from subscriptions.models import SubscriptionPlan, UserSubscription
from rest_framework.permissions import AllowAny, IsAuthenticated
from rest_framework import viewsets
from django.core.cache import cache
class SubscriptionPlanViewset(viewsets.ModelViewSet):
http_method_names = ['get']
serializer_class = SubscriptionPlanSerializer
permission_classes = [AllowAny]
queryset = SubscriptionPlan.objects.all()
def get_queryset(self):
key = 'subscriptionplans'
queryset = cache.get(key)
if not queryset:
queryset = super().get_queryset()
cache.set(key, queryset, 60*60)
return queryset
class UserSubscriptionViewset(viewsets.ModelViewSet):
http_method_names = ['get']
serializer_class = UserSubscriptionSerializer
permission_classes = [IsAuthenticated]
queryset = UserSubscription.objects.all()
def get_queryset(self):
user = self.request.user
key = f'subscriptions_user:{user.id}'
queryset = cache.get(key)
if not queryset:
queryset = UserSubscription.objects.filter(user=user)
cache.set(key, queryset, 60*60)
return queryset
class UserGroupSubscriptionViewet(viewsets.ModelViewSet):
http_method_names = ['get']
serializer_class = UserSubscriptionSerializer
permission_classes = [IsAuthenticated]
queryset = UserSubscription.objects.all()
def get_queryset(self):
user = self.request.user
if not user.user_group:
return UserSubscription.objects.none()
else:
key = f'subscriptions_usergroup:{user.user_group.id}'
queryset = cache.get(key)
if not cache:
queryset = UserSubscription.objects.filter(
user_group=user.user_group)
cache.set(key, queryset, 60*60)
return queryset