diff --git a/apps/api/__init__.py b/apps/api/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/apps/api/admin.py b/apps/api/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/apps/api/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/apps/api/config.py b/apps/api/config.py new file mode 100644 index 0000000..bd6ef7b --- /dev/null +++ b/apps/api/config.py @@ -0,0 +1,8 @@ +# -*- encoding: utf-8 -*- + +from django.apps import AppConfig + + +class MyConfig(AppConfig): + name = 'apps.api' + label = 'apps_api' diff --git a/apps/api/migrations/__init__.py b/apps/api/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/apps/api/models.py b/apps/api/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/apps/api/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/apps/api/serializers.py b/apps/api/serializers.py new file mode 100644 index 0000000..6be9671 --- /dev/null +++ b/apps/api/serializers.py @@ -0,0 +1,57 @@ +# -*- encoding: utf-8 -*- + +from django.apps import apps +from django.conf import settings +from rest_framework import serializers + +from apps.home.models import Ticket, TicketPriority, TicketTag +from apps.authentication.models import Department + + +class DepartmentSerializer(serializers.ModelSerializer): + class Meta: + model = Department + fields = [ + "uuid", "title", "icon" + ] + + +class UserSerializer(serializers.ModelSerializer): + department = DepartmentSerializer() + + class Meta: + model = apps.get_model(settings.AUTH_USER_MODEL) + fields = [ + "uuid", "icon", "email", "forename", "surname", "department", + "create_timestamp", "edit_timestamp" + ] + + +class TicketPrioritySerializer(serializers.ModelSerializer): + class Meta: + model = TicketPriority + fields = [ + "uuid", "title", "colour", "backgroundcolour" + ] + + +class TicketTagSerializer(serializers.ModelSerializer): + class Meta: + model = TicketTag + fields = [ + "uuid", "title", "colour", "backgroundcolour" + ] + + +class TicketSerializer(serializers.ModelSerializer): + author = UserSerializer() + priority = TicketPrioritySerializer() + tags = TicketTagSerializer(many=True) + + class Meta: + model = Ticket + fields = [ + "uuid", "title", "description", "author", "create_timestamp", + "edit_timestamp", "is_edited", "was_yesterday", "is_older_than_day", + "timestamp", "priority", "tags", + ] diff --git a/apps/api/tests.py b/apps/api/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/apps/api/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/apps/api/urls.py b/apps/api/urls.py new file mode 100644 index 0000000..6a1a1f3 --- /dev/null +++ b/apps/api/urls.py @@ -0,0 +1,9 @@ +# -*- encoding: utf-8 -*- + +from django.urls import path + +from .views import TicketListApiView + +urlpatterns = [ + path("ticket/", TicketListApiView.as_view(), name="ticket"), +] \ No newline at end of file diff --git a/apps/api/views.py b/apps/api/views.py new file mode 100644 index 0000000..cd08ad4 --- /dev/null +++ b/apps/api/views.py @@ -0,0 +1,46 @@ +# -*- encoding: utf-8 -*- + +import json + +from django.conf import settings +from rest_framework.views import APIView +from rest_framework.response import Response +from rest_framework import status, permissions + +from apps.home.models import Ticket, TicketPriority, TicketTag +from .serializers import ( + TicketSerializer, TicketTagSerializer, TicketPrioritySerializer, + UserSerializer +) + + +class TicketListApiView(APIView): + permission_classes = [permissions.IsAuthenticated] + + def get(self, request): + """Return all tickets.""" + + filters = json.loads(request.GET.get("filters", "{}")) + queryset = Ticket.objects.all() + + for key, values in filters.items(): + + for value in values: + if value == "all": continue + queryset = queryset.filter(**{key: [value]}) + + tickets = queryset.order_by("-create_timestamp") + serializer = TicketSerializer(tickets, many=True) + return Response(serializer.data, status=status.HTTP_200_OK) + + def post(self, request): + """Create a new ticket""" + + serializer = TicketSerializer(data={ + + }) + if not serializer.is_valid(): + return Response(serlializer.errors, status=status.HTTP_400_BAD_REQUEST) + + serializer.save() + return Response(serializer.data, status=status.HTTP_201_CREATED) diff --git a/core/settings.py b/core/settings.py index 5ff2bb5..bacd02a 100644 --- a/core/settings.py +++ b/core/settings.py @@ -36,7 +36,9 @@ INSTALLED_APPS = [ 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', - 'apps.home', # Enable the inner home (home) + 'rest_framework', + 'apps.api', + 'apps.home', 'apps.authentication' ] diff --git a/core/urls.py b/core/urls.py index 305e985..423bed2 100644 --- a/core/urls.py +++ b/core/urls.py @@ -7,6 +7,8 @@ from django.urls import path, include # add this urlpatterns = [ path('admin/', admin.site.urls), # Django admin route + path("api-auth/", include("rest_framework.urls")), + path("api/", include(("apps.api.urls", "apps.api"), namespace="api")), # ADD NEW Routes HERE *static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT),