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:
|
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
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
)
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue