From 91f6d771359b3409ebe1f681c92d191c36452af6 Mon Sep 17 00:00:00 2001 From: Pavle Portic Date: Sat, 23 Mar 2019 04:25:03 +0100 Subject: [PATCH] Finish up basic perktree view --- .gitignore | 2 +- backend/.gitignore | 1 + backend/db.sqlite3 | Bin 131072 -> 0 bytes backend/perks/__init__.py | 0 backend/perks/admin.py | 3 + backend/perks/apps.py | 5 + backend/perks/migrations/__init__.py | 0 backend/perks/models.py | 6 + backend/perks/tests.py | 3 + backend/perks/urls.py | 8 ++ backend/perks/views.py | 40 +++++++ backend/perktree/settings.py | 2 +- backend/perktree/urls.py | 3 +- frontend/package.json | 4 +- frontend/public/index.html | 2 +- frontend/src/App.vue | 47 -------- .../src/api-services/auth-api-services.js | 27 ----- frontend/src/apis/auth.api.js | 47 ++++++++ frontend/src/apis/perk.api.js | 23 ++++ frontend/src/components/app.vue | 62 +++++++++++ .../src/components/auth/login.component.vue | 5 +- frontend/src/components/index.component.vue | 6 +- frontend/src/components/perks.component.vue | 81 +++++++++++++- frontend/src/components/trees.component.vue | 50 +++++++++ frontend/src/controllers/auth.controller.js | 105 ++++++++++++------ frontend/src/controllers/perks.controller.js | 19 ++++ frontend/src/helpers/perk-tree.helper.js | 31 ------ frontend/src/main.js | 51 +++++---- frontend/src/plugins/vuetify.js | 19 ++-- frontend/src/router.js | 23 ++-- frontend/src/store.js | 35 ++++++ frontend/src/stylus/app.styl | 11 ++ frontend/src/stylus/perks.styl | 30 +++++ frontend/src/stylus/trees.styl | 11 ++ frontend/yarn.lock | 10 ++ parser/parser.py | 21 ++-- parser/perks_all.tsv | 8 +- 37 files changed, 595 insertions(+), 206 deletions(-) create mode 100644 backend/.gitignore delete mode 100644 backend/db.sqlite3 create mode 100644 backend/perks/__init__.py create mode 100644 backend/perks/admin.py create mode 100644 backend/perks/apps.py create mode 100644 backend/perks/migrations/__init__.py create mode 100644 backend/perks/models.py create mode 100644 backend/perks/tests.py create mode 100644 backend/perks/urls.py create mode 100644 backend/perks/views.py delete mode 100644 frontend/src/App.vue delete mode 100644 frontend/src/api-services/auth-api-services.js create mode 100644 frontend/src/apis/auth.api.js create mode 100644 frontend/src/apis/perk.api.js create mode 100644 frontend/src/components/app.vue create mode 100644 frontend/src/components/trees.component.vue create mode 100644 frontend/src/controllers/perks.controller.js delete mode 100644 frontend/src/helpers/perk-tree.helper.js create mode 100644 frontend/src/store.js create mode 100644 frontend/src/stylus/app.styl create mode 100644 frontend/src/stylus/perks.styl create mode 100644 frontend/src/stylus/trees.styl diff --git a/.gitignore b/.gitignore index 5e7d5cd..f99362a 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -perks +static/perks diff --git a/backend/.gitignore b/backend/.gitignore new file mode 100644 index 0000000..49ef255 --- /dev/null +++ b/backend/.gitignore @@ -0,0 +1 @@ +db.sqlite3 diff --git a/backend/db.sqlite3 b/backend/db.sqlite3 deleted file mode 100644 index 345625b9f1b8336eecab8559c69844620668628c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131072 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 okWw)@GpS@I<>W', views.ListPerks.as_view()), +] + diff --git a/backend/perks/views.py b/backend/perks/views.py new file mode 100644 index 0000000..b9650fa --- /dev/null +++ b/backend/perks/views.py @@ -0,0 +1,40 @@ +import json + +from os import listdir +from os.path import isfile, join +from rest_framework.views import APIView +from rest_framework.response import Response +from rest_framework import authentication, permissions + + +PERKS_DIR = '../static/perks' + + +def get_tree_list(): + return sorted([file for file in listdir(PERKS_DIR) if isfile(join(PERKS_DIR, file))]) + + +class ListTrees(APIView): + """ + View to list all perk trees + """ + authentication_classes = (authentication.TokenAuthentication,) + # permission_classes = (permissions.IsAuthenticated,) + + def get(self, request, format=None): + return Response([tree[:-5] for tree in get_tree_list()]) + + +class ListPerks(APIView): + """ + View to list all perks in a tree + """ + authentication_classes = (authentication.TokenAuthentication,) + # permission_classes = (permissions.IsAuthenticated,) + + def get(self, request, tree, format=None): + print(request.user) + filename = get_tree_list()[tree] + with open(f'{PERKS_DIR}/{filename}', 'r') as f: + return Response(json.load(f)) + diff --git a/backend/perktree/settings.py b/backend/perktree/settings.py index 832ce16..c050455 100644 --- a/backend/perktree/settings.py +++ b/backend/perktree/settings.py @@ -120,7 +120,7 @@ USE_TZ = True # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/2.1/howto/static-files/ -STATIC_URL = '/static/' +STATIC_URL = '/django-static/' REST_FRAMEWORK = { 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', diff --git a/backend/perktree/urls.py b/backend/perktree/urls.py index 6cc3cb7..12a7ed6 100644 --- a/backend/perktree/urls.py +++ b/backend/perktree/urls.py @@ -22,14 +22,13 @@ from rest_framework_simplejwt.views import ( TokenVerifyView, ) -# Wire up our API using automatic URL routing. -# Additionally, we include login URLs for the browsable API. urlpatterns = [ path('api/', include([ path('admin/', admin.site.urls), path('token/', TokenObtainPairView.as_view(), name='token_obtain_pair'), path('token/refresh/', TokenRefreshView.as_view(), name='token_refresh'), path('token/verify/', TokenVerifyView.as_view(), name='token_verify'), + path('', include('perks.urls')) ])) ] diff --git a/frontend/package.json b/frontend/package.json index 7193303..ce70598 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -15,9 +15,11 @@ "roboto-fontface": "*", "vue": "^2.6.6", "vue-router": "^3.0.2", - "vuetify": "^1.5.5" + "vuetify": "^1.5.5", + "vuex": "^3.1.0" }, "devDependencies": { + "@fortawesome/fontawesome-free": "^5.8.1", "@vue/cli-plugin-eslint": "^3.5.0", "@vue/cli-service": "^3.5.0", "@vue/eslint-config-standard": "^4.0.0", diff --git a/frontend/public/index.html b/frontend/public/index.html index cdcf700..36e1e77 100644 --- a/frontend/public/index.html +++ b/frontend/public/index.html @@ -5,7 +5,7 @@ - perktree + Perktree