From 729eab6cf90ce37e20a841bbfa2f3e3c8e424b29 Mon Sep 17 00:00:00 2001 From: Sebastian Lohff Date: Tue, 3 Dec 2019 20:50:49 +0100 Subject: [PATCH] New API based on restframework, still non-functional --- k4ever/api3/__init__.py | 0 k4ever/api3/admin.py | 6 +++ k4ever/api3/apps.py | 8 ++++ k4ever/api3/migrations/__init__.py | 0 k4ever/api3/models.py | 6 +++ k4ever/api3/serializers.py | 60 ++++++++++++++++++++++++++++++ k4ever/api3/tests.py | 6 +++ k4ever/api3/urls.py | 20 ++++++++++ k4ever/api3/views.py | 55 +++++++++++++++++++++++++++ k4ever/requirements.txt | 1 + 10 files changed, 162 insertions(+) create mode 100644 k4ever/api3/__init__.py create mode 100644 k4ever/api3/admin.py create mode 100644 k4ever/api3/apps.py create mode 100644 k4ever/api3/migrations/__init__.py create mode 100644 k4ever/api3/models.py create mode 100644 k4ever/api3/serializers.py create mode 100644 k4ever/api3/tests.py create mode 100644 k4ever/api3/urls.py create mode 100644 k4ever/api3/views.py diff --git a/k4ever/api3/__init__.py b/k4ever/api3/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/k4ever/api3/admin.py b/k4ever/api3/admin.py new file mode 100644 index 0000000..13be29d --- /dev/null +++ b/k4ever/api3/admin.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.contrib import admin + +# Register your models here. diff --git a/k4ever/api3/apps.py b/k4ever/api3/apps.py new file mode 100644 index 0000000..0b60808 --- /dev/null +++ b/k4ever/api3/apps.py @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.apps import AppConfig + + +class Api3Config(AppConfig): + name = 'api3' diff --git a/k4ever/api3/migrations/__init__.py b/k4ever/api3/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/k4ever/api3/models.py b/k4ever/api3/models.py new file mode 100644 index 0000000..1dfab76 --- /dev/null +++ b/k4ever/api3/models.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models + +# Create your models here. diff --git a/k4ever/api3/serializers.py b/k4ever/api3/serializers.py new file mode 100644 index 0000000..67ba620 --- /dev/null +++ b/k4ever/api3/serializers.py @@ -0,0 +1,60 @@ +from django.contrib.auth.models import User +from rest_framework import serializers + +from buyable.models import BuyableType, Buyable, Order, Purchase +from transaction.models import TransactionType, Transaction, VirtualTransaction + + +class UserSerializer(serializers.HyperlinkedModelSerializer): + class Meta: + model = User + fields = ('id', 'username',) + + +class BuyableTypeSerializer(serializers.HyperlinkedModelSerializer): + class Meta: + model = BuyableType + fields = ['url', 'id', 'name'] + + +class BuyableSerializer(serializers.HyperlinkedModelSerializer): + class Meta: + model = Buyable + fields = ['url', 'id', 'name', 'description', 'price', 'barcode', 'deposit', 'image', 'buyableType'] + + +class PurchaseSerializer(serializers.HyperlinkedModelSerializer): + class Meta: + model = Purchase + fields = ['id', 'price', 'isDeposit', 'buyable'] + + +class OrderSerializer(serializers.HyperlinkedModelSerializer): + purchases = PurchaseSerializer(source='purchase_set', many=True) + + class Meta: + model = Order + fields = ['url', 'id', 'price', 'dateTime', 'purchases'] + + +class TransactionTypeSerializer(serializers.HyperlinkedModelSerializer): + class Meta: + model = TransactionType + fields = ('url', 'id', 'name') + + +class TransactionSerializer(serializers.HyperlinkedModelSerializer): + transactionType = TransactionTypeSerializer() + + class Meta: + model = Transaction + fields = ('url', 'id', 'amount', 'dateTime', 'checked', 'transactionType') + + +class VirtualTransactionSerializer(serializers.HyperlinkedModelSerializer): + user = UserSerializer() + recipient = UserSerializer() + + class Meta: + model = VirtualTransaction + fields = ('url', 'id', 'amount', 'dateTime', 'comment', 'user', 'recipient') diff --git a/k4ever/api3/tests.py b/k4ever/api3/tests.py new file mode 100644 index 0000000..5982e6b --- /dev/null +++ b/k4ever/api3/tests.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.test import TestCase + +# Create your tests here. diff --git a/k4ever/api3/urls.py b/k4ever/api3/urls.py new file mode 100644 index 0000000..c2fb1c2 --- /dev/null +++ b/k4ever/api3/urls.py @@ -0,0 +1,20 @@ +from django.conf.urls import include, url +from rest_framework import routers + +from .views import BuyableTypeViewSet, BuyableViewSet, OrderViewSet +from .views import TransactionTypeViewSet, TransactionViewSet, VirtualTransactionViewSet + +router = routers.DefaultRouter() +router.register('buyabletypes', BuyableTypeViewSet) +router.register('buyables', BuyableViewSet) +router.register('orders', OrderViewSet, basename='order') + +router.register('transactiontypes', TransactionTypeViewSet) +router.register('transactions', TransactionViewSet, 'transaction') +router.register('virtualtransactions', VirtualTransactionViewSet, 'virtualtransaction') + + +urlpatterns = [ + url(r'^', include(router.urls)), + url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')) +] diff --git a/k4ever/api3/views.py b/k4ever/api3/views.py new file mode 100644 index 0000000..b457560 --- /dev/null +++ b/k4ever/api3/views.py @@ -0,0 +1,55 @@ +from django.db.models import Q +from rest_framework import viewsets +from rest_framework.permissions import IsAuthenticated + +from .serializers import BuyableTypeSerializer, BuyableSerializer, OrderSerializer +from .serializers import TransactionTypeSerializer, TransactionSerializer, VirtualTransactionSerializer +from buyable.models import BuyableType, Buyable, Order +from transaction.models import TransactionType, Transaction, VirtualTransaction + + +class BuyableTypeViewSet(viewsets.ReadOnlyModelViewSet): + queryset = BuyableType.objects.all() + serializer_class = BuyableTypeSerializer + + +class BuyableViewSet(viewsets.ReadOnlyModelViewSet): + queryset = Buyable.objects.all() + serializer_class = BuyableSerializer + + +class OrderViewSet(viewsets.ReadOnlyModelViewSet): + permission_classes = [IsAuthenticated] + serializer_class = OrderSerializer + + def get_queryset(self): + return Order.objects.filter(user=self.request.user) + + +class TransactionTypeViewSet(viewsets.ReadOnlyModelViewSet): + queryset = TransactionType.objects.all() + serializer_class = TransactionTypeSerializer + + +class TransactionViewSet(viewsets.ReadOnlyModelViewSet): + permission_classes = [IsAuthenticated] + serializer_class = TransactionSerializer + + def get_queryset(self): + return Transaction.objects.filter(user=self.request.user).order_by("-dateTime") + + +class VirtualTransactionViewSet(viewsets.ReadOnlyModelViewSet): + permission_classes = [IsAuthenticated] + serializer_class = VirtualTransactionSerializer + + def get_queryset(self): + return (VirtualTransaction.objects.filter(Q(user=self.request.user) | Q(recipient=self.request.user)) + .order_by("-dateTime")) + + +# class BalanceView(APIView): +# def get(self, request): +# return Response({'balance': request.user.userprofile.balance} +class BalanceViewSet(viewsets.ReadOnlyModelViewSet): + pass diff --git a/k4ever/requirements.txt b/k4ever/requirements.txt index 3a62665..4d83c22 100644 --- a/k4ever/requirements.txt +++ b/k4ever/requirements.txt @@ -2,3 +2,4 @@ django==1.10 easy_thumbnails oauth django-auth-ldap +django-restframework