From ac86d39deaf35f1704a058b7001c2a3e2d94dc63 Mon Sep 17 00:00:00 2001 From: Pavle Portic Date: Sun, 7 Apr 2019 13:57:17 +0200 Subject: [PATCH] Add user stats dashboard with max perk count table --- backend/perks/serializers.py | 11 +- backend/perks/views.py | 7 +- frontend/src/apis/user.api.js | 4 + frontend/src/components/app.vue | 1 + frontend/src/components/user.component.vue | 186 +++++++++++++++++++- frontend/src/controllers/user.controller.js | 4 + frontend/src/main.js | 1 + frontend/src/stylus/perks.styl | 2 +- 8 files changed, 203 insertions(+), 13 deletions(-) diff --git a/backend/perks/serializers.py b/backend/perks/serializers.py index e6a669d..dd87813 100644 --- a/backend/perks/serializers.py +++ b/backend/perks/serializers.py @@ -53,10 +53,11 @@ class UserSerializer(serializers.Serializer): fields = ('id', 'perks', 'base_user') -# class AuthorSerializer(serializers.ModelSerializer): -# book_list = BookSerializer(many=True, read_only=True) +class UserPerksSerializer(serializers.Serializer): + id = serializers.IntegerField(read_only=True) + perks = PerkSerializer(read_only=True, many=True) - # class Meta: - # model = Author - # fields = ('id', 'name', 'last_name', 'book_list') + class Meta: + model = User + fields = ('id', 'perks') diff --git a/backend/perks/views.py b/backend/perks/views.py index 4bffdef..d035794 100644 --- a/backend/perks/views.py +++ b/backend/perks/views.py @@ -15,7 +15,7 @@ from rest_framework.views import APIView from .models import Perk, Tree, User from .parser import PerkParser from .permissions import IsPostOrIsAuthenticated, IsGetOrIsSuperuser -from .serializers import PerkSerializer, TreeSerializer, UserSerializer +from .serializers import PerkSerializer, TreeSerializer, UserSerializer, UserPerksSerializer PERKS_DIR = environ.get('PERKS_DIR') @@ -99,7 +99,10 @@ class UserView(APIView): return Response(status=404) user = User.objects.get(base_user__id=request.user.id) - serialized_user = UserSerializer(user).data + if request.GET.get('full', False): + serialized_user = UserPerksSerializer(user).data + else: + serialized_user = UserSerializer(user).data return Response(serialized_user) diff --git a/frontend/src/apis/user.api.js b/frontend/src/apis/user.api.js index 3fbd34e..ee395f2 100644 --- a/frontend/src/apis/user.api.js +++ b/frontend/src/apis/user.api.js @@ -16,6 +16,10 @@ export default class AuthApi { return Axios.get(ENDPOINTS.USER); } + static getUserPerks() { + return Axios.get(ENDPOINTS.USER, { params: { full: 1 } }); + } + static createUser(data) { return Axios.post(ENDPOINTS.USER, data); } diff --git a/frontend/src/components/app.vue b/frontend/src/components/app.vue index 19c7af7..f2a6763 100644 --- a/frontend/src/components/app.vue +++ b/frontend/src/components/app.vue @@ -37,6 +37,7 @@ export default { true: [ { icon: 'fas fa-upload', text: 'Upload perks', to: { name: 'upload-perks' } }, { icon: 'fas fa-code-branch', text: 'Perk trees', to: { name: 'trees' } }, + { icon: 'fas fa-user', text: 'User', to: { name: 'user' } }, { icon: 'fas fa-sign-out-alt', text: 'Logout', to: { name: 'logout' } }, ], false: [ diff --git a/frontend/src/components/user.component.vue b/frontend/src/components/user.component.vue index b786345..c8dd585 100644 --- a/frontend/src/components/user.component.vue +++ b/frontend/src/components/user.component.vue @@ -1,12 +1,68 @@ + diff --git a/frontend/src/controllers/user.controller.js b/frontend/src/controllers/user.controller.js index e78bf61..bfef197 100644 --- a/frontend/src/controllers/user.controller.js +++ b/frontend/src/controllers/user.controller.js @@ -12,6 +12,10 @@ export default class AuthController { return UserApi.getUser(); } + static getUserPerks() { + return UserApi.getUserPerks(); + } + static createUser(data) { return UserApi.createUser(data); } diff --git a/frontend/src/main.js b/frontend/src/main.js index 60c272e..cd0a25d 100644 --- a/frontend/src/main.js +++ b/frontend/src/main.js @@ -50,6 +50,7 @@ const configureRaven = () => { configureHttp(); configureRaven(); +AuthController.setupToken(); new Vue({ router, diff --git a/frontend/src/stylus/perks.styl b/frontend/src/stylus/perks.styl index 683b596..8692e3e 100644 --- a/frontend/src/stylus/perks.styl +++ b/frontend/src/stylus/perks.styl @@ -5,8 +5,8 @@ height 100% .v-card - padding 1rem height 100% + padding 1rem #perktree height 100%