From 40fa930289a6b6096cf3cb1d977ec56c990266d1 Mon Sep 17 00:00:00 2001 From: akash5100 Date: Fri, 10 Mar 2023 12:08:56 +0530 Subject: [PATCH 1/4] Split deferred_user_data to two API endpoints --- .../frontend/settings/vuex/index.js | 20 +++++++++++++------ contentcuration/contentcuration/urls.py | 3 ++- .../contentcuration/views/users.py | 11 +++++++++- 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/contentcuration/contentcuration/frontend/settings/vuex/index.js b/contentcuration/contentcuration/frontend/settings/vuex/index.js index a45ccba15a..2cd7cd9145 100644 --- a/contentcuration/contentcuration/frontend/settings/vuex/index.js +++ b/contentcuration/contentcuration/frontend/settings/vuex/index.js @@ -3,10 +3,14 @@ import client from 'shared/client'; const throttleTime = 30 * 1000; -const settingsDeferredUser = throttle( +const settingsDeferredUserApiToken = function() { + return client.get(window.Urls.deferred_user_api_token()); +} + +const settingsDeferredUserSpaceByKind = throttle( function() { - return client.get(window.Urls.deferred_user_data()); - }, + return client.get(window.Urls.deferred_user_space_by_kind()); + }, throttleTime, { trailing: false } ); @@ -84,9 +88,13 @@ export default { return; } - return settingsDeferredUser().then(response => { - context.commit('UPDATE_SESSION', response.data, { root: true }); - }); + return Promise.all([settingsDeferredUserApiToken(), settingsDeferredUserSpaceByKind()]) + .then(([apiTokenResponse, spaceByKindResponse]) => { + context.commit('UPDATE_SESSION', { + api_token: apiTokenResponse.data.api_token, + space_used_by_kind: spaceByKindResponse.data.space_used_by_kind + }, { root: true }); + }) }, }, }; diff --git a/contentcuration/contentcuration/urls.py b/contentcuration/contentcuration/urls.py index a39f750883..117f9c0780 100644 --- a/contentcuration/contentcuration/urls.py +++ b/contentcuration/contentcuration/urls.py @@ -173,7 +173,8 @@ def get_redirect_url(self, *args, **kwargs): re_path(r'^activate/(?P[-:\w]+)/$', registration_views.UserActivationView.as_view(), name='registration_activate'), re_path(r'^api/send_invitation_email/$', registration_views.send_invitation_email, name='send_invitation_email'), re_path(r'^new/accept_invitation/(?P[^/]+)/', registration_views.new_user_redirect, name="accept_invitation_and_registration"), - re_path(r'^api/deferred_user_data/$', registration_views.deferred_user_data, name="deferred_user_data"), + re_path(r'^api/deferred_user_space_by_kind/$', registration_views.deferred_user_space_by_kind, name="deferred_user_space_by_kind"), + re_path(r'^api/deferred_user_api_token/$', registration_views.deferred_user_api_token, name="deferred_user_api_token"), re_path(r'^settings/$', settings_views.settings, name='settings'), re_path(r'^administration/', admin_views.administration, name='administration'), re_path(r'^manifest.webmanifest$', pwa.ManifestView.as_view(), name="manifest"), diff --git a/contentcuration/contentcuration/views/users.py b/contentcuration/contentcuration/views/users.py index 77a45afecd..53ec959043 100644 --- a/contentcuration/contentcuration/views/users.py +++ b/contentcuration/contentcuration/views/users.py @@ -106,10 +106,19 @@ def send_invitation_email(request): @api_view(["GET"]) @authentication_classes((SessionAuthentication,)) @permission_classes((IsAuthenticated,)) -def deferred_user_data(request): +def deferred_user_space_by_kind(request): return Response( { "space_used_by_kind": request.user.get_space_used_by_kind(), + } + ) + +@api_view(["GET"]) +@authentication_classes((SessionAuthentication,)) +@permission_classes((IsAuthenticated,)) +def deferred_user_api_token(request): + return Response( + { "api_token": request.user.get_token(), } ) From 39b9c445c985bd39422f481327ca6e38fd60bd24 Mon Sep 17 00:00:00 2001 From: akash5100 Date: Fri, 10 Mar 2023 13:37:36 +0530 Subject: [PATCH 2/4] Fix linting errors --- .../frontend/settings/vuex/index.js | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/contentcuration/contentcuration/frontend/settings/vuex/index.js b/contentcuration/contentcuration/frontend/settings/vuex/index.js index 2cd7cd9145..42357f4b9d 100644 --- a/contentcuration/contentcuration/frontend/settings/vuex/index.js +++ b/contentcuration/contentcuration/frontend/settings/vuex/index.js @@ -5,12 +5,12 @@ const throttleTime = 30 * 1000; const settingsDeferredUserApiToken = function() { return client.get(window.Urls.deferred_user_api_token()); -} +}; const settingsDeferredUserSpaceByKind = throttle( function() { return client.get(window.Urls.deferred_user_space_by_kind()); - }, + }, throttleTime, { trailing: false } ); @@ -88,13 +88,18 @@ export default { return; } - return Promise.all([settingsDeferredUserApiToken(), settingsDeferredUserSpaceByKind()]) - .then(([apiTokenResponse, spaceByKindResponse]) => { - context.commit('UPDATE_SESSION', { - api_token: apiTokenResponse.data.api_token, - space_used_by_kind: spaceByKindResponse.data.space_used_by_kind - }, { root: true }); - }) + return Promise.all([settingsDeferredUserApiToken(), settingsDeferredUserSpaceByKind()]).then( + ([apiTokenResponse, spaceByKindResponse]) => { + context.commit( + 'UPDATE_SESSION', + { + api_token: apiTokenResponse.data.api_token, + space_used_by_kind: spaceByKindResponse.data.space_used_by_kind, + }, + { root: true } + ); + } + ); }, }, }; From f74e710f34c42368735fa441f94fe0ce045fae04 Mon Sep 17 00:00:00 2001 From: akash5100 Date: Sun, 12 Mar 2023 22:17:33 +0530 Subject: [PATCH 3/4] Refactor fetchDeferredUserData() into separate functions for fetching API token and user storage data --- .../frontend/settings/pages/SettingsIndex.vue | 4 +- .../frontend/settings/vuex/index.js | 42 ++++++++++++------- 2 files changed, 30 insertions(+), 16 deletions(-) diff --git a/contentcuration/contentcuration/frontend/settings/pages/SettingsIndex.vue b/contentcuration/contentcuration/frontend/settings/pages/SettingsIndex.vue index 43417b5dcf..3fb83012e0 100644 --- a/contentcuration/contentcuration/frontend/settings/pages/SettingsIndex.vue +++ b/contentcuration/contentcuration/frontend/settings/pages/SettingsIndex.vue @@ -65,10 +65,10 @@ }, }, created() { - this.fetchDeferredUserData(); + this.fetchDeferredUserApiToken(), this.fetchDeferredUserStorageByKind(); }, methods: { - ...mapActions('settings', ['fetchDeferredUserData']), + ...mapActions('settings', ['fetchDeferredUserStorageByKind', 'fetchDeferredUserApiToken']), updateTitleForPage() { // Updates the tab title every time the top-level route changes let title; diff --git a/contentcuration/contentcuration/frontend/settings/vuex/index.js b/contentcuration/contentcuration/frontend/settings/vuex/index.js index 42357f4b9d..77f6bed995 100644 --- a/contentcuration/contentcuration/frontend/settings/vuex/index.js +++ b/contentcuration/contentcuration/frontend/settings/vuex/index.js @@ -82,24 +82,38 @@ export default { return client.post(window.Urls.delete_user_account(), { email }); }, - // Fetch fields that take longer to calculate - fetchDeferredUserData(context) { + // Fetch the user API token + fetchDeferredUserApiToken(context) { if (context.getters.storageUseByKind && context.state.currentUser.api_token) { return; } - return Promise.all([settingsDeferredUserApiToken(), settingsDeferredUserSpaceByKind()]).then( - ([apiTokenResponse, spaceByKindResponse]) => { - context.commit( - 'UPDATE_SESSION', - { - api_token: apiTokenResponse.data.api_token, - space_used_by_kind: spaceByKindResponse.data.space_used_by_kind, - }, - { root: true } - ); - } - ); + return settingsDeferredUserApiToken().then(response => { + context.commit( + 'UPDATE_SESSION', + { + api_token: response.data.api_token, + }, + { root: true } + ); + }); + }, + + // Fetch the user storage details + fetchDeferredUserStorageByKind(context) { + if (context.getters.storageUseByKind && context.state.currentUser.api_token) { + return; + } + + return settingsDeferredUserSpaceByKind().then(response => { + context.commit( + 'UPDATE_SESSION', + { + space_used_by_kind: response.data.space_used_by_kind, + }, + { root: true } + ); + }); }, }, }; From 86acc828c550657c1d22bd7c56fd2ac62bcb26c3 Mon Sep 17 00:00:00 2001 From: akash5100 Date: Wed, 15 Mar 2023 20:38:34 +0530 Subject: [PATCH 4/4] Refactor vuex state condition --- .../contentcuration/frontend/settings/pages/SettingsIndex.vue | 3 ++- .../contentcuration/frontend/settings/vuex/index.js | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/contentcuration/contentcuration/frontend/settings/pages/SettingsIndex.vue b/contentcuration/contentcuration/frontend/settings/pages/SettingsIndex.vue index 3fb83012e0..6bcc512626 100644 --- a/contentcuration/contentcuration/frontend/settings/pages/SettingsIndex.vue +++ b/contentcuration/contentcuration/frontend/settings/pages/SettingsIndex.vue @@ -65,7 +65,8 @@ }, }, created() { - this.fetchDeferredUserApiToken(), this.fetchDeferredUserStorageByKind(); + this.fetchDeferredUserApiToken(); + this.fetchDeferredUserStorageByKind(); }, methods: { ...mapActions('settings', ['fetchDeferredUserStorageByKind', 'fetchDeferredUserApiToken']), diff --git a/contentcuration/contentcuration/frontend/settings/vuex/index.js b/contentcuration/contentcuration/frontend/settings/vuex/index.js index 77f6bed995..8ff59c075f 100644 --- a/contentcuration/contentcuration/frontend/settings/vuex/index.js +++ b/contentcuration/contentcuration/frontend/settings/vuex/index.js @@ -84,7 +84,7 @@ export default { // Fetch the user API token fetchDeferredUserApiToken(context) { - if (context.getters.storageUseByKind && context.state.currentUser.api_token) { + if (context.rootState.session.currentUser.api_token) { return; } @@ -101,7 +101,7 @@ export default { // Fetch the user storage details fetchDeferredUserStorageByKind(context) { - if (context.getters.storageUseByKind && context.state.currentUser.api_token) { + if (context.rootGetters.storageUseByKind) { return; }