69 lines
2.7 KiB
Python
69 lines
2.7 KiB
Python
from rest_framework import viewsets, mixins, permissions, request, pagination, filters
|
|
from rest_framework.response import Response
|
|
from rest_framework.request import Request
|
|
from api.serializers import *
|
|
from api.models import *
|
|
|
|
class HasHomegroup(permissions.BasePermission):
|
|
def has_permission(self, request: Request, view):
|
|
if not request.user.homegroup:
|
|
return False
|
|
|
|
return super().has_permission(request, view)
|
|
|
|
class Pagination(pagination.PageNumberPagination):
|
|
page_size = 4
|
|
|
|
class NoListModelViewset(mixins.CreateModelMixin, mixins.DestroyModelMixin, mixins.UpdateModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet):
|
|
pass
|
|
|
|
class RecipeSearchView(viewsets.ModelViewSet):
|
|
serializer_class = RecipeSerializer
|
|
permission_classes = [permissions.IsAuthenticated, HasHomegroup]
|
|
queryset = Recipe.objects.all()
|
|
filter_backends = [filters.SearchFilter]
|
|
search_fields = ["name"]
|
|
pagination_class = Pagination
|
|
|
|
def list(self, request: Request, *args, **kwargs):
|
|
queryset = self.filter_queryset(Recipe.objects.filter(homegroup=request.user.homegroup).order_by("name"));
|
|
|
|
page = self.paginate_queryset(queryset)
|
|
if page is not None:
|
|
serializer = self.get_serializer(page, many=True)
|
|
return self.get_paginated_response(serializer.data)
|
|
|
|
serializer = self.serializer_class(queryset, many=True)
|
|
return Response(serializer.data)
|
|
|
|
class RecipeAllView(viewsets.ModelViewSet):
|
|
serializer_class = RecipeSerializer
|
|
permission_classes = [permissions.IsAuthenticated, HasHomegroup]
|
|
queryset = Recipe.objects.all()
|
|
filter_backends = [filters.SearchFilter]
|
|
search_fields = ["name"]
|
|
|
|
def list(self, request: Request, *args, **kwargs):
|
|
queryset = self.filter_queryset(Recipe.objects.filter(homegroup=request.user.homegroup).order_by("name"));
|
|
serializer = self.serializer_class(queryset, many=True)
|
|
return Response(serializer.data)
|
|
|
|
class HomegroupView(viewsets.ModelViewSet):
|
|
serializer_class = HomegroupSerializer
|
|
queryset = Homegroup.objects.all()
|
|
|
|
class HomegroupInviteView(NoListModelViewset):
|
|
serializer_class = InviteSerializer
|
|
queryset = HomegroupInvite.objects.all()
|
|
|
|
class RecipeIngredientView(NoListModelViewset):
|
|
serializer_class = RecipeIngredientSerializer
|
|
queryset = RecipeIngredient.objects.all()
|
|
|
|
class ListIngredientView(NoListModelViewset):
|
|
serializer_class = ListIngredientSerializer
|
|
queryset = ListIngredient.objects.all()
|
|
|
|
class ListView(mixins.RetrieveModelMixin, mixins.UpdateModelMixin, viewsets.GenericViewSet):
|
|
serializer_class = ListSerializer
|
|
queryset = List.objects.all() |