From 38f02d935567d6ce836a5675c58b06046846aa51 Mon Sep 17 00:00:00 2001 From: Nishay Madhani Date: Wed, 6 Mar 2019 13:24:42 +0530 Subject: [PATCH 1/3] CanteenApp Added and UserOrderViewSet --- canteenApp/serializers.py | 9 ++++++ canteenApp/urls.py | 10 ++++++ canteenApp/views.py | 65 ++++++++++++++++++++++++++++++++++++++- canteenAutomation/urls.py | 1 + 4 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 canteenApp/serializers.py create mode 100644 canteenApp/urls.py diff --git a/canteenApp/serializers.py b/canteenApp/serializers.py new file mode 100644 index 0000000..6a373f1 --- /dev/null +++ b/canteenApp/serializers.py @@ -0,0 +1,9 @@ +from rest_framework import serializers +from canteenWeb.models import User + +class UserIDSerializer(serializers.Serializer): + userID = serializers.CharField(max_length=20) + + def create(self, validated_data): + return User.objects.filter(username=validated_data.get('userID'))[0] + \ No newline at end of file diff --git a/canteenApp/urls.py b/canteenApp/urls.py new file mode 100644 index 0000000..91ce02b --- /dev/null +++ b/canteenApp/urls.py @@ -0,0 +1,10 @@ +from django.urls import path, include +from django.conf.urls import url, include +from rest_framework import routers +from . import views + +router = routers.DefaultRouter() +router.register("orders", views.UserOrderViewSet) +urlpatterns = [ + path("", include(router.urls)) +] diff --git a/canteenApp/views.py b/canteenApp/views.py index 91ea44a..754bc80 100644 --- a/canteenApp/views.py +++ b/canteenApp/views.py @@ -1,3 +1,66 @@ from django.shortcuts import render +from django.contrib.auth import authenticate, login, logout +from django.http import HttpResponseRedirect +from django.http import Http404 +from django.http import JsonResponse +from rest_framework import viewsets, permissions, status, views +from rest_framework.response import Response +from rest_framework.decorators import action +from rest_framework.generics import CreateAPIView +from rest_framework.views import APIView +from drf_yasg.utils import no_body, swagger_auto_schema +from drf_yasg import openapi -# Create your views here. +from canteenWeb.models import ( + Order, + MenuItem, + User, + StudentProfile, + TeacherProfile, + Bill, + Category, + Ingredients, +) +from .serializers import ( + UserIDSerializer +) +from canteenWeb.serializers import ( + OrderSerializer +) + +class UserOrderViewSet(viewsets.ModelViewSet): + queryset = Order.objects.all() + serializer_class = OrderSerializer + + @swagger_auto_schema(responses={200: OrderSerializer(many=True)}) + @action(detail=False, methods=["post"]) + def completed(self, request): + """ + Return a list of all completed orders for a user. + """ + serializer = UserIDSerializer(data=request.data) + if(serializer.is_valid()): + user = serializer.save() + completed_orders = Order.objects.filter(is_fulfilled=True,user=user) + serializer = self.get_serializer(completed_orders, many=True) + return Response(serializer.data) + + @swagger_auto_schema(responses={200: OrderSerializer(many=True)}) + @action(detail=False,methods=["post"]) + def pending(self, request): + """ + Return a list of all pending orders for a user. + """ + serializer = UserIDSerializer(data=request.data) + if(serializer.is_valid()): + user = serializer.save() + pending_orders = Order.objects.filter( + is_fulfilled=False, status__gte=0,user=user + ) # Should not be fulfilled and status should be positive. + serializer = self.get_serializer(pending_orders, many=True) + return Response(serializer.data) + + + + + \ No newline at end of file diff --git a/canteenAutomation/urls.py b/canteenAutomation/urls.py index 90cc20c..cb6a5e3 100644 --- a/canteenAutomation/urls.py +++ b/canteenAutomation/urls.py @@ -31,6 +31,7 @@ urlpatterns = [ path("admin/", admin.site.urls), path("", include("canteenWeb.urls")), + path("app/", include("canteenApp.urls")), path( "doc/", schema_view.with_ui("swagger", cache_timeout=1000), From 78d957f626489dcebd31f46014621120bbd4e999 Mon Sep 17 00:00:00 2001 From: Nishay Madhani Date: Wed, 6 Mar 2019 13:28:04 +0530 Subject: [PATCH 2/3] Added not valid Response for orders --- canteenApp/views.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/canteenApp/views.py b/canteenApp/views.py index 754bc80..008a237 100644 --- a/canteenApp/views.py +++ b/canteenApp/views.py @@ -44,6 +44,9 @@ def completed(self, request): completed_orders = Order.objects.filter(is_fulfilled=True,user=user) serializer = self.get_serializer(completed_orders, many=True) return Response(serializer.data) + else: + return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) + @swagger_auto_schema(responses={200: OrderSerializer(many=True)}) @action(detail=False,methods=["post"]) @@ -59,6 +62,9 @@ def pending(self, request): ) # Should not be fulfilled and status should be positive. serializer = self.get_serializer(pending_orders, many=True) return Response(serializer.data) + else: + return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) + From cbdd82a969ecc0176f08187691169f310d1e067e Mon Sep 17 00:00:00 2001 From: Nishay Madhani Date: Sat, 9 Mar 2019 00:01:36 +0530 Subject: [PATCH 3/3] Changed POST To GET,Ran Black --- .vscode/settings.json | 4 ++++ canteenApp/serializers.py | 4 ++-- canteenApp/urls.py | 4 +--- canteenApp/views.py | 30 ++++++++++-------------------- 4 files changed, 17 insertions(+), 25 deletions(-) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..cb16c9f --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,4 @@ +{ + "python.linting.pylintEnabled": true, + "python.pythonPath": "/home/nshmadhani/anaconda2/envs/web36/bin/python" +} \ No newline at end of file diff --git a/canteenApp/serializers.py b/canteenApp/serializers.py index 6a373f1..c3bdfe5 100644 --- a/canteenApp/serializers.py +++ b/canteenApp/serializers.py @@ -1,9 +1,9 @@ from rest_framework import serializers from canteenWeb.models import User + class UserIDSerializer(serializers.Serializer): userID = serializers.CharField(max_length=20) def create(self, validated_data): - return User.objects.filter(username=validated_data.get('userID'))[0] - \ No newline at end of file + return User.objects.filter(username=validated_data.get("userID"))[0] diff --git a/canteenApp/urls.py b/canteenApp/urls.py index 91ce02b..5f3b3ff 100644 --- a/canteenApp/urls.py +++ b/canteenApp/urls.py @@ -5,6 +5,4 @@ router = routers.DefaultRouter() router.register("orders", views.UserOrderViewSet) -urlpatterns = [ - path("", include(router.urls)) -] +urlpatterns = [path("", include(router.urls))] diff --git a/canteenApp/views.py b/canteenApp/views.py index 008a237..1e9002b 100644 --- a/canteenApp/views.py +++ b/canteenApp/views.py @@ -21,52 +21,42 @@ Category, Ingredients, ) -from .serializers import ( - UserIDSerializer -) -from canteenWeb.serializers import ( - OrderSerializer -) +from .serializers import UserIDSerializer +from canteenWeb.serializers import OrderSerializer + class UserOrderViewSet(viewsets.ModelViewSet): queryset = Order.objects.all() serializer_class = OrderSerializer @swagger_auto_schema(responses={200: OrderSerializer(many=True)}) - @action(detail=False, methods=["post"]) + @action(detail=False, methods=["get"]) def completed(self, request): """ Return a list of all completed orders for a user. """ serializer = UserIDSerializer(data=request.data) - if(serializer.is_valid()): + if serializer.is_valid(): user = serializer.save() - completed_orders = Order.objects.filter(is_fulfilled=True,user=user) + completed_orders = Order.objects.filter(is_fulfilled=True, user=user) serializer = self.get_serializer(completed_orders, many=True) return Response(serializer.data) else: - return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) - + return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) @swagger_auto_schema(responses={200: OrderSerializer(many=True)}) - @action(detail=False,methods=["post"]) + @action(detail=False, methods=["post"]) def pending(self, request): """ Return a list of all pending orders for a user. """ serializer = UserIDSerializer(data=request.data) - if(serializer.is_valid()): + if serializer.is_valid(): user = serializer.save() pending_orders = Order.objects.filter( - is_fulfilled=False, status__gte=0,user=user + is_fulfilled=False, status__gte=0, user=user ) # Should not be fulfilled and status should be positive. serializer = self.get_serializer(pending_orders, many=True) return Response(serializer.data) else: return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) - - - - - - \ No newline at end of file