rest api implementation
This commit is contained in:
parent
690bec9b24
commit
e0e16efb71
0
apps/api/__init__.py
Normal file
0
apps/api/__init__.py
Normal file
3
apps/api/admin.py
Normal file
3
apps/api/admin.py
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
from django.contrib import admin
|
||||||
|
|
||||||
|
# Register your models here.
|
8
apps/api/config.py
Normal file
8
apps/api/config.py
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# -*- encoding: utf-8 -*-
|
||||||
|
|
||||||
|
from django.apps import AppConfig
|
||||||
|
|
||||||
|
|
||||||
|
class MyConfig(AppConfig):
|
||||||
|
name = 'apps.api'
|
||||||
|
label = 'apps_api'
|
0
apps/api/migrations/__init__.py
Normal file
0
apps/api/migrations/__init__.py
Normal file
3
apps/api/models.py
Normal file
3
apps/api/models.py
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
from django.db import models
|
||||||
|
|
||||||
|
# Create your models here.
|
57
apps/api/serializers.py
Normal file
57
apps/api/serializers.py
Normal file
@ -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",
|
||||||
|
]
|
3
apps/api/tests.py
Normal file
3
apps/api/tests.py
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
from django.test import TestCase
|
||||||
|
|
||||||
|
# Create your tests here.
|
9
apps/api/urls.py
Normal file
9
apps/api/urls.py
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
# -*- encoding: utf-8 -*-
|
||||||
|
|
||||||
|
from django.urls import path
|
||||||
|
|
||||||
|
from .views import TicketListApiView
|
||||||
|
|
||||||
|
urlpatterns = [
|
||||||
|
path("ticket/", TicketListApiView.as_view(), name="ticket"),
|
||||||
|
]
|
46
apps/api/views.py
Normal file
46
apps/api/views.py
Normal file
@ -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)
|
@ -36,7 +36,9 @@ INSTALLED_APPS = [
|
|||||||
'django.contrib.sessions',
|
'django.contrib.sessions',
|
||||||
'django.contrib.messages',
|
'django.contrib.messages',
|
||||||
'django.contrib.staticfiles',
|
'django.contrib.staticfiles',
|
||||||
'apps.home', # Enable the inner home (home)
|
'rest_framework',
|
||||||
|
'apps.api',
|
||||||
|
'apps.home',
|
||||||
'apps.authentication'
|
'apps.authentication'
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -7,6 +7,8 @@ from django.urls import path, include # add this
|
|||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('admin/', admin.site.urls), # Django admin route
|
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
|
# ADD NEW Routes HERE
|
||||||
*static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT),
|
*static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user