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 new file mode 100644 index 0000000..c3bdfe5 --- /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] diff --git a/canteenApp/urls.py b/canteenApp/urls.py new file mode 100644 index 0000000..5f3b3ff --- /dev/null +++ b/canteenApp/urls.py @@ -0,0 +1,8 @@ +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..1e9002b 100644 --- a/canteenApp/views.py +++ b/canteenApp/views.py @@ -1,3 +1,62 @@ 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=["get"]) + 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) + else: + return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) + + @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) + else: + return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) 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),