Expand user model to store perks

This commit is contained in:
Pavle Portic 2019-03-25 14:52:40 +01:00
parent fa5e4cb6a3
commit a38afc2d6a
Signed by: TheEdgeOfRage
GPG Key ID: 6758ACE46AA2A849
5 changed files with 87 additions and 9 deletions

View File

@ -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')),
],
),
]

View File

@ -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)

View File

@ -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')

View File

@ -2,7 +2,8 @@ from django.urls import path
from perks import views
urlpatterns = [
path('trees', views.Trees.as_view()),
path('trees/<int:tree_id>', views.Perks.as_view()),
path('trees', views.TreeView.as_view()),
path('trees/<int:tree_id>', views.PerkView.as_view()),
path('users/<int:user_id>', views.UserView.as_view()),
]

View File

@ -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)