Update last module in a mutation instead of the query

This commit is contained in:
Ramon Wenger 2019-04-11 14:15:12 +02:00
parent 09d20e346d
commit 6853cc8734
6 changed files with 73 additions and 20 deletions

View File

@ -7,7 +7,7 @@
data-cy="toggle-enable-solutions"></toggle-solutions-for-module>
<h2 class="module__meta-title" id="meta-title">{{module.metaTitle}}</h2>
<h1 class="module__title">{{module.title}}</h1>
<h1 class="module__title" data-cy="module-title">{{module.title}}</h1>
<img
:src="module.heroImage"
alt="" class="module__hero">
@ -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});
}
}
})

View File

@ -0,0 +1,9 @@
#import "../fragments/moduleParts.gql"
mutation UpdateLastModule($input: UpdateLastModuleInput!) {
updateLastModule(input: $input) {
module {
...ModuleParts
}
errors
}
}

View File

@ -1,4 +1,4 @@
mutation UpdateObjectiveProgressInput($input: UpdateObjectiveProgressInput!) {
mutation UpdateObjectiveProgress($input: UpdateObjectiveProgressInput!) {
updateObjectiveProgress(input: $input){
objective {
id

View File

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

View File

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

View File

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