mirror of
https://github.com/lemeow125/DRF_Template.git
synced 2024-11-17 04:09:25 +08:00
58 lines
2 KiB
Python
58 lines
2 KiB
Python
from django.core.cache import cache
|
|
from rest_framework import viewsets
|
|
from rest_framework.permissions import AllowAny, IsAuthenticated
|
|
from subscriptions.models import SubscriptionPlan, UserSubscription
|
|
from subscriptions.serializers import (
|
|
SubscriptionPlanSerializer,
|
|
UserSubscriptionSerializer,
|
|
)
|
|
|
|
|
|
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
|