mirror of
https://github.com/rjNemo/graphql_python_template
synced 2026-06-06 02:26:47 +00:00
add deassign todo from user mutation
This commit is contained in:
parent
3ead154903
commit
f3f0466e1e
6 changed files with 45 additions and 6 deletions
|
|
@ -43,3 +43,9 @@ def remove_user(user_id: str) -> User:
|
|||
def add_todo_to_user(todo: Todo, user: User) -> bool:
|
||||
user.tasks.append(todo)
|
||||
return True
|
||||
|
||||
|
||||
def remove_todo_from_user(todo, user) -> bool:
|
||||
index = user.tasks.index(todo)
|
||||
user.tasks.pop(index)
|
||||
return True
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ from app.schema.mutations.user import (
|
|||
UpdateUser,
|
||||
DeleteUser,
|
||||
AssignTodoToUser,
|
||||
DeassignTodoToUser,
|
||||
)
|
||||
|
||||
|
||||
|
|
@ -20,3 +21,4 @@ class Mutation(graphene.ObjectType):
|
|||
update_user = UpdateUser.Field()
|
||||
delete_user = DeleteUser.Field()
|
||||
assign_todo_to_user = AssignTodoToUser.Field()
|
||||
deassign_todo_to_user = DeassignTodoToUser.Field()
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
from .create_user import CreateUser
|
||||
from .delete_user import DeleteUser
|
||||
from .update_user import UpdateUser
|
||||
from .assign_todo_to_user import AssignTodoToUser
|
||||
from .assign_todo_to_user import AssignTodoToUser, DeassignTodoToUser
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import graphene
|
||||
|
||||
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):
|
||||
|
|
@ -18,3 +18,19 @@ class AssignTodoToUser(graphene.Mutation):
|
|||
return AssignTodoToUser(
|
||||
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)
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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 .delete_user import delete_user
|
||||
from .read_all_users import read_all_users
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
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.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])
|
||||
|
||||
|
||||
|
|
@ -17,7 +17,22 @@ def assign_todo_to_user(user_id: str, todo_id: str) -> bool:
|
|||
if not is_success:
|
||||
return False
|
||||
|
||||
if is_already_assigned(user, todo):
|
||||
if is_todo_assigned_to_user(user, todo):
|
||||
return False
|
||||
|
||||
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)
|
||||
|
|
|
|||
Loading…
Reference in a new issue