Add project entry deletion by user
This commit is contained in:
parent
d5364d8d9d
commit
735d2d9afa
|
|
@ -1,7 +1,10 @@
|
|||
<template>
|
||||
<div class="project-entry">
|
||||
<more-options-widget class="project-entry__more" data-cy="project-entry-more">
|
||||
<li class="popover-links__link"><a @click="editProjectEntry()" data-cy="edit-project-entry">Eintrag bearbeiten</a></li>
|
||||
<li class="popover-links__link"><a @click="editProjectEntry()" data-cy="edit-project-entry">Eintrag bearbeiten</a>
|
||||
</li>
|
||||
<li class="popover-links__link"><a @click="deleteProjectEntry()" data-cy="delete-project-entry">Eintrag löschen</a>
|
||||
</li>
|
||||
</more-options-widget>
|
||||
|
||||
<h3 class="project-entry__heading">Tätigkeit</h3>
|
||||
|
|
@ -31,6 +34,9 @@
|
|||
import DocumentBlock from '@/components/content-blocks/DocumentBlock';
|
||||
import MoreOptionsWidget from '@/components/MoreOptionsWidget';
|
||||
|
||||
import DELETE_PROJECT_ENTRY_MUTATION from '@/graphql/gql/mutations/deleteProjectEntry.gql';
|
||||
import PROJECT_QUERY from '@/graphql/gql/projectQuery.gql';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
DocumentBlock,
|
||||
|
|
@ -41,6 +47,30 @@
|
|||
methods: {
|
||||
editProjectEntry() {
|
||||
this.$store.dispatch('editProjectEntry', this.id);
|
||||
},
|
||||
deleteProjectEntry() {
|
||||
const projectEntry = this; // otherwise we run into scope errors
|
||||
this.$apollo.mutate({
|
||||
mutation: DELETE_PROJECT_ENTRY_MUTATION,
|
||||
variables: {
|
||||
input: {
|
||||
id: this.id
|
||||
}
|
||||
},
|
||||
update(store, {data: {deleteProjectEntry: {success}}}) {
|
||||
if (success) {
|
||||
const query = PROJECT_QUERY;
|
||||
const variables = {
|
||||
slug: projectEntry.$route.params.slug
|
||||
};
|
||||
const data = store.readQuery({query, variables});
|
||||
if (data) {
|
||||
data.project.entries.edges.splice(data.project.entries.edges.findIndex(edge => edge.node.id === projectEntry.id), 1);
|
||||
store.writeQuery({query, variables, data});
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,12 @@
|
|||
mutation DeleteProjectEntry($input: DeleteProjectEntryInput!) {
|
||||
deleteProjectEntry(input: $input) {
|
||||
success
|
||||
errors
|
||||
}
|
||||
}
|
||||
|
||||
#{
|
||||
# "input": {
|
||||
# "id": "Um9vbU5vZGU6MjY="
|
||||
# }
|
||||
#}
|
||||
|
|
@ -13,6 +13,7 @@ from portfolio.serializers import ProjectSerializer, ProjectEntrySerializer
|
|||
def check_owner(user, project):
|
||||
return user.id != project.student.id
|
||||
|
||||
|
||||
class MutateProject(relay.ClientIDMutation):
|
||||
errors = graphene.List(graphene.String)
|
||||
project = graphene.Field(ProjectNode)
|
||||
|
|
@ -49,7 +50,6 @@ class AddProject(MutateProject):
|
|||
|
||||
@classmethod
|
||||
def mutate_and_get_payload(cls, root, info, **kwargs):
|
||||
|
||||
data = kwargs.get('project')
|
||||
data['student'] = info.context.user.id
|
||||
|
||||
|
|
@ -124,10 +124,29 @@ class DeleteProject(relay.ClientIDMutation):
|
|||
return cls(success=True)
|
||||
|
||||
|
||||
class DeleteProjectEntry(relay.ClientIDMutation):
|
||||
class Input:
|
||||
id = graphene.ID(required=True)
|
||||
|
||||
success = graphene.Boolean()
|
||||
errors = graphene.List(graphene.String)
|
||||
|
||||
@classmethod
|
||||
def mutate_and_get_payload(cls, root, info, **kwargs):
|
||||
id = kwargs.get('id')
|
||||
project_entry = get_object(ProjectEntry, id)
|
||||
user = info.context.user
|
||||
|
||||
if project_entry.project.student != user:
|
||||
raise PermissionDenied('Permission denied: Incorrect project')
|
||||
project_entry.delete()
|
||||
return cls(success=True)
|
||||
|
||||
|
||||
class PortfolioMutations:
|
||||
add_project = AddProject.Field()
|
||||
update_project = UpdateProject.Field()
|
||||
delete_project = DeleteProject.Field()
|
||||
add_project_entry = AddProjectEntry.Field()
|
||||
update_project_entry = UpdateProjectEntry.Field()
|
||||
|
||||
delete_project_entry = DeleteProjectEntry.Field()
|
||||
|
|
|
|||
Loading…
Reference in New Issue