add deassign todo from user mutation

This commit is contained in:
Ruidy 2020-11-08 00:05:44 +01:00
parent 3ead154903
commit f3f0466e1e
6 changed files with 45 additions and 6 deletions

View file

@ -43,3 +43,9 @@ def remove_user(user_id: str) -> User:
def add_todo_to_user(todo: Todo, user: User) -> bool: def add_todo_to_user(todo: Todo, user: User) -> bool:
user.tasks.append(todo) user.tasks.append(todo)
return True return True
def remove_todo_from_user(todo, user) -> bool:
index = user.tasks.index(todo)
user.tasks.pop(index)
return True

View file

@ -6,6 +6,7 @@ from app.schema.mutations.user import (
UpdateUser, UpdateUser,
DeleteUser, DeleteUser,
AssignTodoToUser, AssignTodoToUser,
DeassignTodoToUser,
) )
@ -20,3 +21,4 @@ class Mutation(graphene.ObjectType):
update_user = UpdateUser.Field() update_user = UpdateUser.Field()
delete_user = DeleteUser.Field() delete_user = DeleteUser.Field()
assign_todo_to_user = AssignTodoToUser.Field() assign_todo_to_user = AssignTodoToUser.Field()
deassign_todo_to_user = DeassignTodoToUser.Field()

View file

@ -1,4 +1,4 @@
from .create_user import CreateUser from .create_user import CreateUser
from .delete_user import DeleteUser from .delete_user import DeleteUser
from .update_user import UpdateUser from .update_user import UpdateUser
from .assign_todo_to_user import AssignTodoToUser from .assign_todo_to_user import AssignTodoToUser, DeassignTodoToUser

View file

@ -1,7 +1,7 @@
import graphene import graphene
from app.schema.types.response import ResponseField from app.schema.types.response import ResponseField
from app.usecases.user import assign_todo_to_user from app.usecases.user import assign_todo_to_user, deassign_todo_to_user
class AssignTodoToUser(graphene.Mutation): class AssignTodoToUser(graphene.Mutation):
@ -18,3 +18,19 @@ class AssignTodoToUser(graphene.Mutation):
return AssignTodoToUser( return AssignTodoToUser(
ResponseField(is_success=is_success, error_message=error_message) ResponseField(is_success=is_success, error_message=error_message)
) )
class DeassignTodoToUser(graphene.Mutation):
class Arguments:
todo_id = graphene.String()
user_id = graphene.String()
result = graphene.Field(ResponseField)
def mutate(self, info, todo_id: str, user_id: str):
is_success = deassign_todo_to_user(user_id=user_id, todo_id=todo_id)
error_message = "Cannot deassign todo to user." if not is_success else None
return AssignTodoToUser(
ResponseField(is_success=is_success, error_message=error_message)
)

View file

@ -1,4 +1,4 @@
from .assign_todo_to_user import assign_todo_to_user from .assign_todo_to_user import assign_todo_to_user, deassign_todo_to_user
from .create_user import create_user from .create_user import create_user
from .delete_user import delete_user from .delete_user import delete_user
from .read_all_users import read_all_users from .read_all_users import read_all_users

View file

@ -1,10 +1,10 @@
from app.models import User, Todo from app.models import User, Todo
from app.repositories.users import add_todo_to_user from app.repositories.users import add_todo_to_user, remove_todo_from_user
from app.usecases.todo import read_todo_by_id from app.usecases.todo import read_todo_by_id
from app.usecases.user.read_user_by_id import read_user_by_id from app.usecases.user.read_user_by_id import read_user_by_id
def is_already_assigned(user: User, todo: Todo) -> bool: def is_todo_assigned_to_user(user: User, todo: Todo) -> bool:
return any([task == todo for task in user.tasks]) return any([task == todo for task in user.tasks])
@ -17,7 +17,22 @@ def assign_todo_to_user(user_id: str, todo_id: str) -> bool:
if not is_success: if not is_success:
return False return False
if is_already_assigned(user, todo): if is_todo_assigned_to_user(user, todo):
return False return False
return add_todo_to_user(todo, user) return add_todo_to_user(todo, user)
def deassign_todo_to_user(user_id: str, todo_id: str) -> bool:
user, is_success = read_user_by_id(user_id)
if not is_success:
return False
todo, is_success = read_todo_by_id(todo_id)
if not is_success:
return False
if not is_todo_assigned_to_user(user, todo):
return False
return remove_todo_from_user(todo, user)