diff --git a/backend/perks/migrations/0004_user.py b/backend/perks/migrations/0004_user.py new file mode 100644 index 0000000..966e506 --- /dev/null +++ b/backend/perks/migrations/0004_user.py @@ -0,0 +1,24 @@ +# Generated by Django 2.1.7 on 2019-03-25 13:32 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('perks', '0003_auto_20190324_2135'), + ] + + operations = [ + migrations.CreateModel( + name='User', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('base_user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ('perks', models.ManyToManyField(related_name='users', to='perks.Perk')), + ], + ), + ] diff --git a/backend/perks/models.py b/backend/perks/models.py index b163403..efbfae0 100644 --- a/backend/perks/models.py +++ b/backend/perks/models.py @@ -7,6 +7,7 @@ # Distributed under terms of the BSD-3-Clause license. from django.db import models +from django.contrib.auth.models import User as AuthUser class Tree(models.Model): @@ -32,3 +33,9 @@ class Perk(models.Model): class Meta: ordering = ('name',) + + +class User(models.Model): + base_user = models.OneToOneField(AuthUser, on_delete=models.CASCADE) + perks = models.ManyToManyField(Perk, related_name='users', symmetrical=False) + diff --git a/backend/perks/serializers.py b/backend/perks/serializers.py index 72c4e1f..e6a669d 100644 --- a/backend/perks/serializers.py +++ b/backend/perks/serializers.py @@ -6,8 +6,10 @@ # # Distributed under terms of the BSD-3-Clause license. +from django.contrib.auth.models import User as AuthUser from rest_framework import serializers -# from .models import Perk, Tree + +from .models import Perk, Tree, User class PerkSerializer(serializers.Serializer): @@ -16,11 +18,45 @@ class PerkSerializer(serializers.Serializer): effect = serializers.CharField(read_only=True) level = serializers.IntegerField(read_only=True) type = serializers.IntegerField(read_only=True) - # parents = serializers.ListField(read_only=True) - # trees = serializers.ListField(read_only=True) + + class Meta: + model = Perk + fields = ('id', 'name', 'effect', 'level', 'type') class TreeSerializer(serializers.Serializer): id = serializers.IntegerField(read_only=True) name = serializers.CharField(read_only=True) + class Meta: + model = Tree + fields = ('id', 'name') + + +class AuthUserSerializer(serializers.Serializer): + id = serializers.IntegerField(read_only=True) + username = serializers.CharField(read_only=True) + email = serializers.CharField(read_only=True) + + class Meta: + model = AuthUser + fields = ('id', 'username', 'email') + + +class UserSerializer(serializers.Serializer): + id = serializers.IntegerField(read_only=True) + perks = serializers.PrimaryKeyRelatedField(queryset=Perk.objects.all(), many=True) + base_user = AuthUserSerializer(required=False, many=False) + + class Meta: + model = User + fields = ('id', 'perks', 'base_user') + + +# class AuthorSerializer(serializers.ModelSerializer): +# book_list = BookSerializer(many=True, read_only=True) + + # class Meta: + # model = Author + # fields = ('id', 'name', 'last_name', 'book_list') + diff --git a/backend/perks/urls.py b/backend/perks/urls.py index 5b965db..48d7902 100644 --- a/backend/perks/urls.py +++ b/backend/perks/urls.py @@ -2,7 +2,8 @@ from django.urls import path from perks import views urlpatterns = [ - path('trees', views.Trees.as_view()), - path('trees/', views.Perks.as_view()), + path('trees', views.TreeView.as_view()), + path('trees/', views.PerkView.as_view()), + path('users/', views.UserView.as_view()), ] diff --git a/backend/perks/views.py b/backend/perks/views.py index f6ee899..86b21ac 100644 --- a/backend/perks/views.py +++ b/backend/perks/views.py @@ -12,8 +12,8 @@ from rest_framework.response import Response from rest_framework import authentication # , permissions from .parser import PerkParser -from .models import Perk, Tree -from .serializers import PerkSerializer, TreeSerializer +from .models import Perk, Tree, User +from .serializers import PerkSerializer, TreeSerializer, UserSerializer PERKS_DIR = environ.get('PERKS_DIR') @@ -22,7 +22,7 @@ if not PERKS_DIR: PERKS_DIR = '../static/perks' -class Trees(APIView): +class TreeView(APIView): authentication_classes = (authentication.TokenAuthentication,) # permission_classes = (permissions.IsAuthenticated,) @@ -46,7 +46,7 @@ class Trees(APIView): return Response({'message': 'Upload successful'}) -class Perks(APIView): +class PerkView(APIView): authentication_classes = (authentication.TokenAuthentication,) # permission_classes = (permissions.IsAuthenticated,) @@ -83,3 +83,13 @@ class Perks(APIView): return Response(output_data) + +class UserView(APIView): + authentication_classes = (authentication.TokenAuthentication,) + + def get(self, request, user_id): + user = User.objects.get(id=user_id) + serialized_user = UserSerializer(user).data + + return Response(serialized_user) +