diff --git a/client/src/components/modules/Module.vue b/client/src/components/modules/Module.vue
index 215e1b00..489272e5 100644
--- a/client/src/components/modules/Module.vue
+++ b/client/src/components/modules/Module.vue
@@ -7,7 +7,7 @@
data-cy="toggle-enable-solutions">
- {{module.title}}
+ {{module.title}}
@@ -40,6 +40,7 @@
import ToggleSolutionsForModule from '@/components/ToggleSolutionsForModule.vue';
import UPDATE_OBJECTIVE_PROGRESS_MUTATION from '@/graphql/gql/mutations/updateObjectiveProgress.gql';
+ import UPDATE_LAST_MODULE_MUTATION from '@/graphql/gql/mutations/updateLastModule.gql';
import OBJECTIVE_QUERY from '@/graphql/gql/objectiveQuery.gql';
import ME_QUERY from '@/graphql/gql/meQuery.gql';
@@ -62,6 +63,7 @@
},
created() {
+ this.updateLastVisitedModule(this.module.id)
},
computed: {
@@ -81,6 +83,26 @@
},
methods: {
+ updateLastVisitedModule(moduleId) {
+ this.$apollo.mutate({
+ mutation: UPDATE_LAST_MODULE_MUTATION,
+ variables: {
+ input: {
+ id: moduleId
+ }
+ },
+ update(store, {data: {updateLastModule: {module}}}) {
+ if (module) {
+ const data = store.readQuery({query: ME_QUERY});
+ if (data) {
+ console.log(data);
+ data.me.lastModule = module;
+ store.writeQuery({query: ME_QUERY, data});
+ }
+ }
+ }
+ });
+ },
updateObjectiveProgress(done, objectiveId) {
this.$apollo.mutate({
mutation: UPDATE_OBJECTIVE_PROGRESS_MUTATION,
@@ -91,18 +113,14 @@
}
},
update(store, {data: {updateObjectiveProgress: {objective}}}) {
- try {
- if (objective) {
- const variables = {id: objectiveId};
- const query = OBJECTIVE_QUERY;
- const data = store.readQuery({query, variables});
- if (data.objective.objectiveProgress.edges.length > 0) {
- data.objective.objectiveProgress.edges[0].node.done = done;
- }
- store.writeQuery({query: OBJECTIVE_QUERY, data, variables});
+ if (objective) {
+ const variables = {id: objectiveId};
+ const query = OBJECTIVE_QUERY;
+ const data = store.readQuery({query, variables});
+ if (data && data.objective.objectiveProgress.edges.length > 0) {
+ data.objective.objectiveProgress.edges[0].node.done = done;
}
- } catch (e) {
- // Query did not exist in the cache, and apollo throws a generic Error. Do nothing
+ store.writeQuery({query: OBJECTIVE_QUERY, data, variables});
}
}
})
diff --git a/client/src/graphql/gql/mutations/updateLastModule.gql b/client/src/graphql/gql/mutations/updateLastModule.gql
new file mode 100644
index 00000000..2ea683c9
--- /dev/null
+++ b/client/src/graphql/gql/mutations/updateLastModule.gql
@@ -0,0 +1,9 @@
+#import "../fragments/moduleParts.gql"
+mutation UpdateLastModule($input: UpdateLastModuleInput!) {
+ updateLastModule(input: $input) {
+ module {
+ ...ModuleParts
+ }
+ errors
+ }
+}
diff --git a/client/src/graphql/gql/mutations/updateObjectiveProgress.gql b/client/src/graphql/gql/mutations/updateObjectiveProgress.gql
index 9f939931..7dd9320f 100644
--- a/client/src/graphql/gql/mutations/updateObjectiveProgress.gql
+++ b/client/src/graphql/gql/mutations/updateObjectiveProgress.gql
@@ -1,4 +1,4 @@
-mutation UpdateObjectiveProgressInput($input: UpdateObjectiveProgressInput!) {
+mutation UpdateObjectiveProgress($input: UpdateObjectiveProgressInput!) {
updateObjectiveProgress(input: $input){
objective {
id
diff --git a/server/books/schema/mutations/main.py b/server/books/schema/mutations/main.py
index db56272e..5d2bb6f4 100644
--- a/server/books/schema/mutations/main.py
+++ b/server/books/schema/mutations/main.py
@@ -1,5 +1,5 @@
from books.schema.mutations.contentblock import MutateContentBlock, AddContentBlock, DeleteContentBlock
-from books.schema.mutations.module import UpdateSolutionVisibility
+from books.schema.mutations.module import UpdateSolutionVisibility, UpdateLastModule
class BookMutations(object):
@@ -7,3 +7,4 @@ class BookMutations(object):
add_content_block = AddContentBlock.Field()
delete_content_block = DeleteContentBlock.Field()
update_solution_visibility = UpdateSolutionVisibility.Field()
+ update_last_module = UpdateLastModule.Field()
diff --git a/server/books/schema/mutations/module.py b/server/books/schema/mutations/module.py
index 9e590181..7c3e9a2a 100644
--- a/server/books/schema/mutations/module.py
+++ b/server/books/schema/mutations/module.py
@@ -3,6 +3,7 @@ from graphene import relay
from api.utils import get_errors, get_object
from books.models import Module
+from books.schema.queries import ModuleNode
class UpdateSolutionVisibility(relay.ClientIDMutation):
@@ -38,3 +39,33 @@ class UpdateSolutionVisibility(relay.ClientIDMutation):
errors = ['Error: {}'.format(e)]
return cls(success=False, solutions_enabled=None, errors=errors)
+
+
+class UpdateLastModule(relay.ClientIDMutation):
+ class Input:
+ id = graphene.ID()
+
+ module = graphene.Field(ModuleNode)
+ errors = graphene.List(graphene.String)
+
+ @classmethod
+ def mutate_and_get_payload(cls, root, info, **args):
+ try:
+ user = info.context.user
+ id = args.get('id')
+
+ module = get_object(Module, id)
+ if not module:
+ raise Module.DoesNotExist
+
+ user.last_module = module
+ user.save()
+
+ return cls(module=module)
+
+ except Module.DoesNotExist:
+ return cls(errors=['Module not found'])
+
+ except Exception as e:
+ errors = ['Error: {}'.format(e)]
+ return cls(errors=errors)
diff --git a/server/books/schema/queries.py b/server/books/schema/queries.py
index 3473a790..c2804209 100644
--- a/server/books/schema/queries.py
+++ b/server/books/schema/queries.py
@@ -199,8 +199,6 @@ class BookQuery(object):
def resolve_module(self, info, **kwargs):
slug = kwargs.get('slug')
id = kwargs.get('id')
- # save last visited module in user
- user = info.context.user
module = None
if id is not None:
@@ -209,10 +207,6 @@ class BookQuery(object):
elif slug is not None:
module = Module.objects.get(slug=slug)
- if module is not None:
- user.last_module = module
- user.save()
-
return module
def resolve_topic(self, info, **kwargs):